31 Dec 2018
Mi servirebbero delle slide
Per tenere il punto
Di tutte le cose che ti voglio dire
Una canzone, l’unica canzone che io sia mai stato in grado di scrivere, inizia così. L’ho scritta quest’anno. Ed effettivamente, per quest’anno ci vorrebbero davvero tante e tante slide per analizzarlo, metriche alla mano, e per raccontare tutto quello che è successo.
Quest’anno è iniziato malissimo. È iniziato nell’incertezza, nell’oscurità, nella consapevolezza, nuova, improvvisa, di avere qualcosa di irrisolto alle spalle e di star camminando con la palla al piede, una cavigliera da arresti domiciliari dettata solo dalla mia sconsideratezza, dalla mia disattenzione per i dettagli, da un eccesso di senso di colpa per le morti che mi porto dietro e che non riesco a superare, e per le vite che tante volte non riesco ad arricchire come vorrei.
Le vite degli altri.
Ma anche la mia.
È stato un 2018 strano, che nella prima parte, nel dolore, mi ha fatto imparare tanto. E sapete qual è la prima cosa che ho imparato? Non c’entra la vita, no, ho imparato prima di tutto qualcosa che riguarda me stesso. Ho imparato che se c’è qualcosa che so fare, è rialzarmi quando tutto sembra perduto. Smetterla di piangermi addosso, trovare la forza e mollare un destro.
E il destro l’ho mollato. Aprendomi la strada a colpi di cannone verso la seconda parte del 2018, la parte in cui ho conosciuto una felicità sfolgorante, la parte in cui mi sono buttato a terra come un verme e ho deciso che era importante che notassi che tutto quello che avevo imparato a fare, era ora di imparare a farlo di nuovo. Imparare a camminare.
Ho trovato una persona che mi si è messa accanto, e in un momento di massima disperazione mi ha detto “vieni qua. Curiamo queste ferite, poi ti insegno come si fa”. Mi ha fatto capire quanto dietro la maschera della mia sicumera crassa si nascondessero le incongruenze che mi avevano portato a quel punto. Ho cercato un analista, e ho iniziato un percorso insieme a lui che mi ha permesso di riportare chiarezza nella mia testa, e di poter essere un uomo migliore per la persona che ho affianco.
Lei si chiama Agnese, è bionda, gioca a fare la bionda, ma non è così bionda come uno potrebbe pensare. Ha un coltellino svizzero della dialettica in tasca. È simpatica, così simpatica da farti mancare il respiro a forza di battute, travolgente, intelligente anche se non si confessa tale. È una donna dai mille perché, e dal momento in cui l’ho incontrata mi è stato impossibile smettere di parlarle.
Mi spertico in lodi non perché mi piace ed è la mia fidanzata, ma perché è stata la prima persona a credere in me, quando io ero alla canna del gas, quando credevo che sarei stato considerato uno stronzo da tutti. Perché? Beh, perché avevo deciso di interrompere un rapporto di sei anni e un matrimonio, spiegando le mie ragioni, non venendo compreso, venendo additato come colui che abbandona. Ed è stato lì che ho scoperto che la maggior parte del mondo è una merda. Che fai cose, ti spieghi, non vieni capito. Lotti, e ricevi solo manganellate in fronte.
Ma è stato lì che ho scoperto anche che quando ogni altra luce si spegne, la luce di Earendil esiste e può essere accesa solo invocando il nome delle persone che ti sono più vicine. Persone che a buon bisogno sanno come ci si sente, sanno cosa ci vuole, sanno come farti felice. Persone che sanno metterti una mano sulla spalla, sollevarti, insegnarti di nuovo a compiere i passi, da zero.
Da zero perché quello che c’era fino a quel momento era scorretto.
Ho ricominciato a vivere. Ho ricominciato a viaggiare. Ho ricominciato ad amare.
Ho ricominciato a parlare ai talk, e ho notato che ho iniziato a prendere sul serio alcuni aspetti di me che prima neppure conoscevo. Ho imparato a non fare promesse a vuoto. Ho imparato a non parlare prima di essere sicuro di poter fare. Ho imparato che un’azione conta come cento parole, e che a volte quelle parole è meglio risparmiarsele, agendo e basta.
Ho imparato però che a volte le parole servono. Per non tenersi tutto dentro. Per comunicare. Per far capire a chi mi sta intorno come mi sento e per ricevere un feedback. Questo lo devo principalmente a due persone: ad Agnese, e a Gianluca, il mio analista.
Ed è stato così che ho riscoperto cosa significa essere me. Ci ho messo un po’ per liberarmi da tutto quello che mi portavo dentro, ma ho conosciuto una felicità come mai mi sarei aspettato, dopo tanta lotta con me stesso e col mondo. La seconda parte di quest’anno è stata all’insegna di questa luminescenza, luminescenza che viene da me ma viene anche da Agnese, che stata la prima artefice di tutto questo, che mi ha fatto vedere quanto valevo, quanto ancora potevo dare a questo mondo, e quanto potrò fare negli anni a venire. Volevo dedicarle un paragrafo, un capitolo, un qualcosa, ma la verità è che tutto questo post è dedicato a lei, perché senza di lei non sarei riuscito ad arrivare nemmeno alla metà dei traguardi che ho raggiunto quest’anno. Traguardi che, paradossalmente, hanno molto a che vedere col settore tecnologico di cui parlo su questo blog.
Ad esempio:
- Ho visitato New York e New Orleans per la prima volta. Tra pochissimo pubblicherò un post dettagliato, per ora vi basti sapere che è stato il miglior viaggio della mia vita, dove ho assistito a una conferenza su Elixir, a un alligatore che mangia un marshmallow, e al fatto che la vita è meravigliosa (hi Ulysses! This is for you!)
- Ho tenuto il mio primo talk in inglese. Quasi in lacrime. Davanti a una piccola platea tra cui la nostra insegnante di soft skill Krishma Parekh (si, abbiamo fatto un corso aziendale di soft skill). Ed è stato bellissimo, perché non solo non ho parlato di qualcosa di tecnico, ma ho parlato del mio mantra di quest’anno: “when unsure, go back to basics. Always.”
- Ho imparato che a volte più che un principio immutabile (tipo una best practice) è importante portare a una platea la propria esperienza, per fornire un punto di vista aggiuntivo.
- Ho ricominciato a parlare in pubblico, in assoluto. Forse sto anche cambiando stile.
- Ho maturato un’esperienza di programmazione funzionale abbastanza consolidata grazie al fatto di aver imparato a valutare in maniera più seria i miei side project e le mie idee.
- Sono diventato un contributor di CouchDB!

C’è tanto e tanto altro. Ma l’aspetto principale, che permea tutto questo, è l’avere costantemente la mia fan numero uno a bordo campo. È stata la conquista più grande di quest’anno, e come è normale che sia vi trovate a leggere di lei spesso. Anche se lei si imbarazza e mi apostrofa sempre di non scrivere così tanto ché poi sembro un sottone. Ma che ci posso fare?
Un messaggio a reti unificate dal presidente Blaster
Tirando le somme di quest’anno, non c’è spazio per analizzare tutto nel dettaglio. Quello che vedo è tantissima felicità, e tantissime battaglie, ognuna combattuta con fatica. Mi ricordo del bene che mi è stato voluto, dell’amore che ho ricevuto, ma soprattutto della grande massa di sesquipedali stronzi figli di puttana che ci hanno tenuto a ricordare quanto piccoli siano, quanto la dimensione che gli si confà sia quella del kindergarten, e quanto alla fine tutto l’odio che mi è stato rivolto contro abbia solo funto da propellente per andare avanti col meglio di me.
E nella giornata, presto notte, di San Silvestro, quello che voglio ricordarvi è una cosa: guardate sotto il letto, prima di addormentarvi. Potrebbe esserci il mostro che risiede nella vostra coscienza, coi denti affilati, in attesa della prossima vittima. E se non ne trova, non gli resterà che saziarsi delle vostre carni.
È tempo di andare avanti. Ma non di dimenticare i vostri nomi.
Ma soprattutto, è tempo di smetterla col senso di colpa: se non mi avete capito, allora sono cazzacci vostri.
Torniamo, però, a un tono normale.
(2018) => 2019
Siamo quindi alle porte di questo 2019: speriamo che ci regali tanta felicità, almeno regalandoci una maggioranza di governo nuova. Per me è tempo di buoni propositi, una volta terminata l’analisi, e quindi quest’anno voglio fare le seguenti cose:
- Tornare a New York. Viverci, forse, tra un po’.
- Tanto tanto Elixir, tanta tanta programmazione funzionale
- Almeno un esame all’università. Ho il libro di Fisica Generale che ormai mi supplica.
- Tante tante persone giuste, sin dalla mezzanotte. Chi c’è stato da prima, chi ci sarà poi. Per sorridere ancora e ancora, per essere felici, per vivere nell’amore, senza il timore di essere giudicati, senza freni, senza niente che non siano lacrime di contentezza.
Per me quest’anno è stato un anno di resoconti, di chiarificazione, di scoperta. Alla luce di quello che ho scoperto, ossia che si può sorridere a volte oltre ogni umana possibilità, do il benvenuto ad un anno di gioie, continuando sulla scia della seconda parte di questo, che mi ha regalato tanto. Un anno di sfide. Un anno fatto di intensità, abbracci, viaggi, traguardi, braccia al cielo, baraonde, calore, e visto che leggete questo blog tanto tanto tanto codice.
Me lo auguro per me. Ma lo auguro soprattutto a voi.
Buon inizio 2019, ragazzi miei.
05 Dec 2018
Se c’è un oggetto che nelle ultime settimane ho bramato, quello è il Nest. Poi ho letto il post di Andrea, e la mia sete di potere nei confronti della temperatura dentro casa è solo aumentata esponenzialmente. Il motivo è piuttosto semplice: se attraversi un periodo un po’ particolare dove hai molto da fare e torni a casa in maniera assolutamente irregolare, hai bisogno di poter impostare il riscaldamento in maniera decisamente più flessibile (e quindi da remoto, leggasi) di come ti permetta qualsiasi termostato, anche uno tra i più evoluti come quello che ho io – che però, purtroppo, essendo evoluto a sufficienza per guidare un’astronave, ma avendo solo un piccolo monitor LCD con dei controlli piuttosto esigui, beh la verità è che più lo guardo più non capisco una mazza di quello che c’è scritto sopra.
Classico giro di idraulico e risolto con un’uscita, quest’ultimo mi ha fatto notare la vecchiaia dei miei termostati, difficili da impostare quanto Java senza aver mai visto un linguaggio di programmazione.
Andrea mi ha fatto pensare alla mia esperienza di questi giorni. Un’esperienza fatta di “manual mode” perché sono stato capace di studiare Rust in qualche ora, ma non riesco a trovare la voglia di capire come si programma quell’aggeggio del diavolo. Nest, dal canto suo, ha un monitor decisamente migliore e ho una voglia di sperimentarlo che levati, per questo e per due motivi ancora:
- Alexa è arrivata dentro casa! Siamo i fortunati possessori di un Amazon Echo, e tra poco ne arriveranno altri. Il motivo principale era la filodiffusione, ma vorrei vedere se riesco a sfruttare o sviluppare qualcosa tipo “Alexa, accendi il riscaldamento”;
- Ho il riscaldamento autonomo, quindi a parte la spesa iniziale non dovrei aver bisogno di niente se non di un cacciavite (heh: ottimista).
Al solito, la user experience da rivedere completamente la noti quando hai un problema grosso. Non stiamo morendo di freddo, certo (anzi), ma vuoi mettere accendere i riscaldamenti senza mani? E senza timer? E senza niente?
26 Sep 2018
Visto che abbiamo scavato sempre più a fondo nelle basi del linguaggio, proviamo a fare qualcosa di più cicciotto con il framework web del momento, ovvero Phoenix. Phoenix Framework è, come abbiamo appena detto, un framework per il web che ci permette di sviluppare il nostro backend in Elixir seguendo quello che a grandi linee sembra un pattern MVC. In realtà come tutti i framework di ultime generazione, può essere piegato per sviluppare backend REST/RESTful. Ma con tutti questi acronimi abbiamo già messo troppa carne al fuoco.
Dato che abbiamo già un’installazione funzionante di Elixir, possiamo usare Mix per installare il pacchetto di Phoenix:
$ mix archive.install https://github.com/phoenixframework/archives/raw/master/phx_new.ez
Per quanto riguarda le utility che ci facilitano la vita sul frontend, avremo bisogno anche di NodeJS. Su macOS io lo installo tramite Homebrew:
Su una distribuzione Linux Debian-based come Ubuntu dobbiamo invece scaricare il pacchetto più aggiornato o servirci direttamente dei repository ufficiali:
$ sudo apt-get install nodejs
Per poi fare un link mano in modo che il comando node faccia partire NodeJS.
$ ln -s /usr/bin/nodejs /usr/bin/node
Una volta dati questi comandi, siamo pronti. In teoria avremmo bisogno di configurare anche un database PostgreSQL in locale in modo da poter salvare eventuali dati, ma questo è già qualcosa di più avanzato. Abbiamo una serie di task Mix che ci aiutano con la creazione di un nuovo progetto; attraverso mix phx.new possiamo creare una nuova struttura e soprattutto definire di cosa abbiamo bisogno. Possiamo escludere il frontend e possiamo escludere la parte di interfaccia al database se non ci servono.
Per il mio esempio escluderò di aver bisogno del database.
$ mix phx.new my_phoenix_demo --no-ecto
Abbiamo di seguito un output dei file creati e qualche indicazione utile per cominciare a muovere i nostri primi passi con, dopo tanto parlare di massimi sistemi, un esempio di applicazione reale:
* creating my_phoenix_demo/config/config.exs
* creating my_phoenix_demo/config/dev.exs
* creating my_phoenix_demo/config/prod.exs
* creating my_phoenix_demo/config/prod.secret.exs
* creating my_phoenix_demo/config/test.exs
* creating my_phoenix_demo/lib/my_phoenix_demo/application.ex
* creating my_phoenix_demo/lib/my_phoenix_demo.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/channels/user_socket.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/views/error_helpers.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/views/error_view.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/endpoint.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/router.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web.ex
* creating my_phoenix_demo/mix.exs
* creating my_phoenix_demo/README.md
* creating my_phoenix_demo/test/support/channel_case.ex
* creating my_phoenix_demo/test/support/conn_case.ex
* creating my_phoenix_demo/test/test_helper.exs
* creating my_phoenix_demo/test/my_phoenix_demo_web/views/error_view_test.exs
* creating my_phoenix_demo/lib/my_phoenix_demo_web/gettext.ex
* creating my_phoenix_demo/priv/gettext/en/LC_MESSAGES/errors.po
* creating my_phoenix_demo/priv/gettext/errors.pot
* creating my_phoenix_demo/lib/my_phoenix_demo_web/controllers/page_controller.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/templates/layout/app.html.eex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/templates/page/index.html.eex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/views/layout_view.ex
* creating my_phoenix_demo/lib/my_phoenix_demo_web/views/page_view.ex
* creating my_phoenix_demo/test/my_phoenix_demo_web/controllers/page_controller_test.exs
* creating my_phoenix_demo/test/my_phoenix_demo_web/views/layout_view_test.exs
* creating my_phoenix_demo/test/my_phoenix_demo_web/views/page_view_test.exs
* creating my_phoenix_demo/.gitignore
* creating my_phoenix_demo/assets/brunch-config.js
* creating my_phoenix_demo/assets/css/app.css
* creating my_phoenix_demo/assets/css/phoenix.css
* creating my_phoenix_demo/assets/js/app.js
* creating my_phoenix_demo/assets/js/socket.js
* creating my_phoenix_demo/assets/package.json
* creating my_phoenix_demo/assets/static/robots.txt
* creating my_phoenix_demo/assets/static/images/phoenix.png
* creating my_phoenix_demo/assets/static/favicon.ico
Fetch and install dependencies? [Yn] Y
* running mix deps.get
* running cd assets && npm install && node node_modules/brunch/bin/brunch build
* running mix deps.compile
We are all set! Go into your application by running:
$ cd my_phoenix_demo
Start your Phoenix app with:
$ mix phx.server
You can also run your app inside IEx (Interactive Elixir) as:
$ iex -S mix phx.server
L’unica cosa che ci viene chiesta è se vogliamo già scaricare le prime dipendenze e cominiciare con una prima compilazione del progetto Elixir e degli asset grafici (JavaScript e quant’altro).
Possiamo provare subito il nostro hello world, entrando nella directory che abbiamo creato e dando i comandi che ci consiglia lo stesso Phoenix:
$ cd my_phoenix_demo
$ mix phx.server
Compiling 12 files (.ex)
Generated my_phoenix_demo app
[info] Running MyPhoenixDemoWeb.Endpoint with Cowboy using http://0.0.0.0:4000
19:23:19 - info: compiled 6 files into 2 files, copied 3 in 1.3 sec
Puntando il nostro browser all’indirizzo http://localhost:4000/ possiamo vedere la nostra applicazione che gira.

All’interno della directory abbiamo tutti i file della nostra nuova applicazione Phoenix, tra cui i controller, il router, e i template HTML (file di estensione .eex). Proviamo a vedere com’è fatto il router, che è un po’ il punto nevralgico dove avviene lo smistamento delle chiamate al nostro server:
# lib/my_phoenix_demo_web/router.ex
defmodule MyPhoenixDemoWeb.Router do
use MyPhoenixDemoWeb, :router
pipeline :browser do
plug :accepts, ["html"]
plug :fetch_session
plug :fetch_flash
plug :protect_from_forgery
plug :put_secure_browser_headers
end
pipeline :api do
plug :accepts, ["json"]
end
scope "/", MyPhoenixDemoWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
end
# Other scopes may use custom stacks.
# scope "/api", MyPhoenixDemoWeb do
# pipe_through :api
# end
end
Quello del router è un DSL specifico creato apprositamente per specificare gli endpoint della nostra applicazione e redirezionare le richieste allo specifico controller di competenza. In questo caso, abbiamo solo una rotta che rappresenta la home page.
Proviamo ad aggiungere una rotta nuova che mostri all’utente una pagina con la data odierna. Modifichiamo il router in questo modo:
scope "/", MyPhoenixDemoWeb do
pipe_through :browser # Use the default browser stack
get "/", PageController, :index
get "/today-date", PageController, :date
end
In questo modo ogni volta che fare una richiesta a /today-date, verrà eseguita la funzione date all’interno del PageController (che è appunto un controller. Lo dice la parola stessa). Andiamo aggiungerla quindi:
# lib/my_phoenix_demo_web/controllers/page_controller.ex
defmodule MyPhoenixDemoWeb.PageController do
use MyPhoenixDemoWeb, :controller
def index(conn, _params) do
render conn, "index.html"
end
def date(conn, params) do
today_date = Date.utc_today() |> Date.to_string
render conn, "date.html", today_date: today_date
end
end
Ho appunto creato la nuova funzione che prende la data, fa uso del pipe operator di cui abbiamo già parlato e inietta il valore in un template che poi renderizza. Andiamo quindi a creare questo template, che sarà il file lib/my_phoenix_demo_web/templates/page/date.html.eex:
<p>Today is: <%= @today_date %></p>
Facciamo ripartire il server con mix phx.server. Puntiamo poi il browser su http://localhost:4000/today-date e via, il gioco è fatto. potremo osservare l’agognato risultato del nostro lavoro. E non finisce qui: quello che abbiamo imparato molto a grandi linee è come sviluppare una feature seguendo un pattern MVC di base, ma possiamo fare anche altro. Per esempio, io uso Phoenix per fare bootstrap anche solo di applicazioni server-side che forniscano API RESTful.

Per come la vedo io, Phoenix nasconde molto delle vere potenzialità (e dei veri problemi) che Elixir può offrire, ma non è che un grandissimo trampolino di lancio e una porta di facilissimo accesso per chi è un alchimista in erba e vuole cominciare a scrivere codice con una curva di apprendimento bassissima.
Vai alla parte 6
Vai alla parte 8
26 Sep 2018

Nella rete le notizie corrono veloci, e ormai tutti sanno che Kevin Systrom e Mike Krieger, i due fondatori di Instagram, stanno lasciando la società. Ma questo perché accade? Il New York Times ne parla in maniera abbastanza nebulosa, ed è pur vero che segnali più forti non farebbero bene né ai ragazzi né alla società stessa:
Mr. Systrom and Mr. Krieger did not give a reason for stepping down, according to the people, but said they planned to take time off after leaving Instagram. Mr. Systrom, 34, and Mr. Krieger, 32, have known each other since 2010, when they met and transformed a software project built by Mr. Systrom into what eventually became Instagram, which now has more than one billion users.
Biasimarli proprio non posso. Questi due ragazzi hanno costruito un’applicazione in una notte, che consentisse di scattare delle foto in formato 1:1, ritoccarle per dar loro un effetto vintage (analogico), e condividerle su una timeline. Nessuno di loro (e nessuno in generale) ha mai voluto diventarci ricco, né immaginava che questo piccolo prototipo portasse a uno dei più grandi business del nostro tempo.
Nessuno di loro immaginava di aver dato il via a quella che nel bene o nel male possiamo definire come una rivoluzione culturale ed estetica, che lega ancor più indissolubilmente un essere umano col suo modo di apparire, creando distorsioni e crepe nello specchio della realtà.
Instagram non è più quello che era una volta, e forse il social networking nel suo complesso non è più quello di un tempo. Ce lo ricorda Andrea condividendo John Oliver:
“Facebook’s global expansion has been linked to political turmoil overseas, so maybe their ads should focus less on how they “connect the world” and more on why connecting people isn’t always the best idea.”
E sempre Andrea qualche settimana fa mi ha ricordato in maniera leggermente più gradevole di come abbia fatto il mio analista come sia importante l’essenza dell’essere qui, ovvero che non serve a niente essere proiettati altrove, e bisogna mantenere il fulcro di sé stessi, ancoràti al presente. A volte anche partendo dai propri “luoghi” online.
È in questa sagra dell’apparire innestata nella decadenza della civiltà dell’informazione che è da contestualizzare l’addio di Systrom e Krieger. E forse è ora di tornare a creare i nostri spazi piuttosto che aderire ad un sistema economico che arricchisce inabili ai danni dei contenuti di qualità.