Alessio Biancalana Grab The Blaster di Alessio Biancalana

How bad is the Windows command line really?

Alex Clemmer su Batch, Bash, e quanto effettivamente la CLI di Windows non sia esattamente la ragazza più carina della scuola:

Sure, Bash could be worse. But substantially worse? Bash had one value proposition: it was just good enough. It is difficult to imagine that it would have flourished as it has, if that had that not been true.

E ancora:

But the truth is what it is. Batch is substantially worse.

Diciamo che, nonostante tutto, Bash ha le sue pecche ma è una buona soluzione a un problema vecchio di anni. Diversamente, Batch risulta frustrante, a maggior ragione per le persone che sono abituate a lavorare in un certo modo (leggi: gli utenti Unix).

So, here we are. This is the reality of the Windows world. Yesterday, your choice was Batch or PowerShell. Today your choice is Batch, PowerShell, or Bash. (Well, it’s not really as simple as that, but you get my point.)

Burst 1.0.0 e una notte insonne in aeroporto: arrivano i customs

Ho ripreso in mano Burst, che era tanto che non toccavo (come era tantissimo che non toccavo una riga di Ruby), ovvero il mio generatore di front-matter YAML per Jekyll, e ho cominciato a scrivere del codice nuovo per introdurre una feature che avevo buttato nel dimenticatoio.

Per prima cosa ho introdotto un file di configurazione, situato nella home dell’utente, in formato JSON, chiamato .burstrc. Successivamente, oltre ad inserire la possibilità di inserire un titolo di default per i post, ho cominciato a scrivere il codice per implementare una sorta di comportamento configurabile all’amatriciana.

Customs to the rescue!

Ho deciso di chiamare questi “cosi” customs, dato che sono a tutti gli effetti dei formati custom per il front-matter YAML di Jekyll. Il file di configurazione ha questa faccia:

{
  "defaultTitle": "This is a default title",
  "customs": {
    "link": {
      "replaces": {
        "layout": "link"
      },
      "adds": {
        "origlink": "http://dottorblaster.it"
      }
    },
    "foo": {
      "replaces": {
        "layout": "bar"
      },
      "adds": {
        "custom_field": "meh"
      }
    }
  }
}

È tutto un po’ verboso, ma efficace. La sezione del JSON in questione relativa per esempio al layout custom chiamato “link” mi permette di creare uno YAML al volo sostituendo il contenuto della chiave “layout” e aggiungendo una chiave “origlink” con un link che poi andrò a modificare. In pratica, con un meccanismo di questo tipo posso definire costantemente nuovi custom a seconda di quello che mi serve andando ad indicare un nome per il mio custom, cosa aggiungere, e cosa modificare del layout originale.

Il risultato finale è molto cool:

$ burst --custom link --title "You see customs here"

---
layout: link
status: publish
published: true
title: You see customs here
origlink: http://dottorblaster.it
date: 2016-08-15 18:10:58 +0200
categories:
- Category
tags:
- first_tag
- second_tag
---

Eh ma oggi è ferragosto, ci hai messo troppo

Vero. Ma ho anche imbellettato un po’ tutto con un po’ di colori :-) E ho anche rifattorizzato leggermente la classe che gestisce i customs (anche se c’è una cosa che non mi piace per niente…). Il prossimo passo è suddividere in più classi tutto quanto quello c’è nel burst.rb. E poi che diamine, mica potevo finire tutto subito: avevo da scrivere ferragosto ;-)

Note interessanti

Sviluppando i customs mi sono capitati un paio di episodi di “incriccamento”, ossia episodi durante i quali non sapevo andare avanti e avevo la sensazione di essermi incartato in qualcosa di troppo complicato.

Il primo è sicuramente dovuto al fatto che non avevo idea di come implementare il file di configurazione e di cosa scriverci dentro per facilitarmi la vita senza essere troppo d’intralcio al futuro me che dovrà solo usare questa roba (o magari altre persone). La soluzione è stata cominciare a scrivere di getto un JSON senza pensarci troppo e usandolo come una scatola delle sorprese, mettendoci dentro tutto quello che mi sarebbe piaciuto di più avere come un parametro configurabile.

Il secondo caso è stato più difficile da risolvere in modo elegante e devo solo ringraziare che l’aeroporto fosse vuoto per aver potuto concentrarmi a sufficienza. Nonostante il letame che ho lasciato sparso e che dovrei pulire, ho adottato un approccio funzionale per la mia classettina CustomsHandler che mi ha consentito come ultimo benefit di effettuare una combinazione di funzioni in un wrapper che ho usato come entrypoint per popolare tutto il cucuzzaro.

In entrambi i casi, è stato apprezzabile avere affianco la mia Moleskine.

Sono discretamente soddisfatto, è stato un bell’esercizio che oltre a farmi sorridere mi ha anche consentito di sopravvivere ad una notte insonne in aeroporto senza troppi effetti collaterali (a parte una grossa dormita una volta arrivato a destinazione).

Adesso devo solo documentare tutto nel README 8-)

Ferragosto e un esercizio di stile in Node.js

ferragosto nodejs CLI util

Proprio ieri pomeriggio, con la musica nelle orecchie, ero in cerca di un valido motivo per non studiare. Sono incappato per “caso” nel sito dedicato a Ferragosto di nois3, ovvero chefacciamoaferragosto.it, e con un po’ di curiosità ho cominciato a smanettarci su. Ficcanasando nel codice ho scoperto l’endpoint al quale la UI chiede le frasi, e ho deciso di mettermi a costruire un tool da riga di comando per farmi dare dei consigli su cosa fare a Ferragosto :-)

In capo a qualche ora ho messo in piedi il tutto, ed è possibile installare ferragosto tramite npm (il codice, ovviamente, è su GitHub):

$ npm install -g ferragosto

Dopodiché, per provarlo basta invocarlo come un qualsiasi altro comando. Ovviamente richiede Node.js.

Le cose interessanti

Grazie a Carlo che mi ha segnalato la sua ultima creatura, e grazie alla mia curiosità nel costruire questo programmino molto semplice ho potuto provare nopt, ovvero l’option parser per i programmi da CLI scritto dai ragazzi di NPM. È davvero ben fatto, anche se avrei apprezzato la possibilità di gestire un default sugli argomenti (come Trollop in Ruby, che uso in Burst).

Creare eseguibili in Node da pubblicare su NPM è un affare abbastanza semplice, sono rimasto abbastanza colpito sia dalla dimensione piccolina dal programma (che fa due cose in croce eh), sia da come con un debito tecnico abbastanza consistente io sia comunque stato in grado in un paio di ore di mettere insieme tutto in una forma non esattamente vicina alla sciatteria.

Queste diavolerie da giovani, altro che Node.js, ai miei tempi c’era il C

È vero! Devo tornare a studiare. ;-)

APT passa a CMake

Dato che ultimamente ho scritto spesso del codice C mi sono appassionato ai sistemi di build, ai Makefile, e a tutto quello che ci gira intorno. Stavo anche scrivendo la guida per i niubbi, ma l’ho lasciata nell’hard disk del fisso a casa mentre in vacanza ho portato il laptop (il quale ho scoperto essere poco utile per le notti in aeroporto: ho cestinato tutti i film che avevo…).

Tentando di giustificare il mio essere poco prolifico con queste frasi, passiamo oltre e andiamo a guardare che diamine ha fatto Julian Andres portando APT a CMake. È un sacco di roba, e penso che il passaggio più importante – almeno per me che sono a zero su C e building/bundling – sia questo:

Talking about CMake: I don’t really love it. As you might know, CMake differentiates between targets and files. Targets can in some cases depend on files (generated by a command in the same directory), but overall files are not really targets. You also cannot have a target with the same name as a file you are generating in a custom command, you have to rename your target (make is OK with the generated stuff, but ninja complains about cycles because your custom target and your custom command have the same name).

Alla fine della fiera è un lavoro secondo me molto, molto carino. E io vorrei saper mettere le mani a questo modo al sorgente di un tool così importante :-)

Ah però, questo Windows 10

Windows 10 Alienware

Stamattina ho letto in rapida successione il post di Nicola su Apple che a quanto pare è percepita come disinteressata verso la sua linea di prodotti “per fare cose serie” (ovvero i Mac), rispetto ai soliti iCosi tipo iPhone, iPad, eccetera, e gli articoli di OS News e di Architosh in proposito.

If Apple doesn’t care about its PC business, why should anyone else?

Questo mi ha fatto venire in mente che un paio di weekend fa, con il fisso sotto le mani, un po’ di tempo da perdere e una licenza Microsoft fresca fresca, ho installato a tempo perso Windows 10 affianco alla mia Arch Linux di fiducia giusto per fare qualche test e provare a convivere con quello che a conti fatti per me è qualcosa di nuovo.

La cosa che mi ha stupito è che a livello di esperienza utente non sono affatto deluso, anzi: chiaramente mi manca la personalizzabilità di Linux, e l’avere a disposizione out-of-the-box oppure installabili con un colpo di package manager tutti quei tool che sono abituato ad avere senza muovere un dito. Però, con un po’ di pazienza, qualche .exe piazzato per l’occasione e una shell un po’ meglio di quella di default che nemmeno so usare troppo bene (per il momento la Bash integrata in Sourcetree debitamente “shortcuttata”, non ho ancora avuto tempo di provare il runtime Unix dedicato), mi sono trovato a non soffrire più così tanto, anzi: comunque a fronte di un ambiente desktop gradevole a vedersi e da usarsi almeno per i miei gusti, i problemi sono pochi e sinceramente mi sento in potere di equiparare il lavoro che riesco a fare con questa configurazione a quello che riesco a fare con il mio Macbook.

E questo solo parlando di software: per quanto riguarda l’hardware, se il progetto che ho è quello di costruirmi un PC desktop nuovo più che carrozzato (e quindi non fare della mobilità il mio problema su cui ragionare), sicuramente anche sul lato degli ultrabook un Macbook Pro, Air o anche quell’altro nuovo aborto da 12 pollici dovrebbero sentirsi intimoriti da quello che può fare Dell con l’XPS 13 di nuova generazione, ed è solo il primo esempio che mi viene in mente dato che gli altri brand sono perfettamente in grado di stare dietro a questo trend, pur se con materiali tendenti al risparmio e componenti leggermente meno prestanti.

Quello che voglio dire, in ogni caso, è che sui PC “consumer”, anche i più scarsi, comincia ad approdare quell’esperienza utente curata tipica di un sistema come macOS, o Android, con un design finalmente “non brutto”. E se quelli potevano essere i cavalli di battaglia di Apple, adesso è tempo di muovere un ennesimo passo oltre, perché se avessi pensato di prendere un iMac, l’esperienza che ho avuto con Windows in queste settimane basterebbe da sola a farmi desistere dall’intento.

Nel frattempo comincio a riempire il carrello di Amazon.

P.S.: La cosa più fastidiosa, per la verità, sono i keybinding di Markdown Editor per Atom, fortemente legati a macOS. Credo che siano da rimappare.

Photo courtesy of Larry Qian

Member of

Previous Random Next