Alessio Biancalana Grab The Blaster di Alessio Biancalana

Farewell Chrome Apps

Google Chrome

E così, è successo: Google ha iniziato a dire ufficialmente che nel giro di un paio d’anni eliminerà la possibilità di eseguire le cosiddette Chrome Apps, ovvero applicazioni all’interno di Google Chrome – almeno per quanto riguarda Windows, macOS e Linux. Chiaramente questa possibilità penso rimarrà confinata al loro ChromeOS.

ChromeOS sul quale si continua a lavorare, e per il quale è stata annunciata proprio poche ore fa una nuova feature (il PIN di sblocco al posto della password di Google); questo a riprova del fatto che secondo me la strategia di centralizzare in Chrome le operazioni degli utenti da parte di Google è fallita miseramente.

Chrome runtime VS Electron

Col tempo infatti ha preso piede sì l’idea di eseguire delle webapp su desktop, ma in modo molto diverso da come Google aveva concepito la cosa; mentre a Mountain View si cercava di rendere Chrome il motore immobile dell’ambiente desktop, legando di fatto l’esecuzione delle applicazioni a quella del browser, anche se in finestre separate, GitHub ha tirato fuori dal cilindro un suo container agnostico per applicazioni web.

Il risultato usando Electron è molto meglio, dato che non è in nessun modo legato al browser in uso, e le applicazioni risultano molto, molto meglio integrate nel sistema operativo. Così l’idea delle Chrome Apps per macOS, Windows, Linux è andata a morire in favore di un sistema che a fronte di una omogeneità maggiore col sistema operativo e con l’ambiente desktop anziché col browser offre comunque un agnosticismo di fondo che consente di portare il codice su tutte le piattaforme senza troppi sbattimenti.

Tutti amano i runtime, a nessuno piace il contenitore

Secondo me le Chrome Apps (che per un periodo stavano prendendo piede) sono state uccise dai runtime per una ragione molto semplice: a tutti piace il runtime, mentre a nessuno piace vedere una webapp “vestita” da app desktop con così poca cura, e con così poca differenza rispetto al sito che la rappresenta.

A me è sempre sembrata una presa in giro, e mentre le Chrome Apps cominciano ad essere allontanate persino dai loro creatori, i runtime simili ad Electron (addirittura compatbili con questo) crescono di numero: Mozilla ha il suo, e GNOME agogna la possibilità di trasformare un pezzo di Epiphany in una shell simile.

Di positivo c’è che trovo che Chrome stia tornando pian piano a fare solo il browser. Ed è una cosa di cui c’è da essere contenti.

Photo courtesy of Thomas Hawk

Bootstrapping a React project

Effettivamente, dovrei cominciare a scrivere della mia esperienza con React, che in qualche coppia di settimane è diventata piuttosto estesa. Intanto però, mi annoto questo articolo sul blog di Auth0 sul kickstart di un progetto con React, che può tornare utile.

PowerShell is open sourced and is available on Linux

PowerShell non solo è open source (possiamo vedere tutto il codice su GitHub), ma possiamo installarla anche su Linux e macOS.

As we port PowerShell to Linux, we are making sure that we are a first class citizen on that platform. We fit in well with the architecture, idioms and existing tools. This was pretty easy as most of the original PowerShell team had deep Unix backgrounds and that shows in our design.

A me come shell non piace tantissimo, ma sono un grande fan della disponibilità dei software su ogni piattaforma e della possibilità di ampia scelta. Non so cos’altro abbia in mente Microsoft, ma io posso solo fare i complimenti.

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

Mac keyboard

Arrivi in aeroporto a Santorini, hai il volo all’una e cinquanta di notte, dopodiché devi stare a Fiumicino per svariate ore finché verso le dieci del mattino non partirà il tuo prossimo volo. Questa è la condizione in cui mi sono trovato io qualche sera fa, ad attendere tra un aereo e l’altro costretto in aeroporto l’intera notte, con nulla da fare e nemmeno la minima voglia di studiare.

Così 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-)