Non c’entra molto col tema principale di questo blog ma Raffaele Gaito è una di quelle persone che mi fregio di conoscere da un bel po’ di tempo. Lui ha avuto il suo percorso, io ho avuto il mio, e quando parlo con lui è sempre un piacere confrontarsi, specie perché magari avendo costantemente il pregiudizio causato dal fatto di avere a che fare principalmente con persone orientate alle professioni IT, Raffaele è esattamente quel tipo di persona di cui ho bisogno per riferirmi a lui come un buon punto di vista esterno.
E poi consiglia delle pizze da paura!
Ieri ha pubblicato il suo “7 cose (di business) che ho imparato nel 2017”, e leggendolo ho notato questo:
Poi a un certo punto ti trovi di fronte a un bivio: o impazzisci per stare dietro all’opinione delle persone o realizzi che non puoi piacere a tutti. Passi in modalità “sticazzi, chi mi ama mi segua” e ti accorgi che da un certo punto è inevitabile che il pubblico si spacchi, che la loro opinione diventi polarizzata e che starai antipatico a qualcuno.
Appena l’ho realizzato è stato come aver scoperto le altre marce di una Aston Martin che stavo guidando in prima da troppo tempo.
È vero. Mi ha fatto particolarmente bene leggerlo, perché sono tesissimo dato che domani parlo al Facebook Developer Circle di Roma e sto ancora lavorando alle slide in maniera ossessiva. Mi ha tranquillizzato.
Grazie Raf. 🚀
Elixir 1.6 è fuori, into the wild.
Novità rilevanti:
- Formatter! Yay!
@deprecated e @since per favorire le transizioni tra versioni “breaking” dei moduli
- IEx adesso integra il formatter e una serie di nuove feature per fare pretty print degli snippet
mix xref dà informazioni superfiche su progetto corrente e dipendenze
defguard? Le guardie sono un concetto che non ho approfondito, ma potentissime. Adesso possiamo definirle e usarle nella firma delle funzioni. Non capisco bene quanto di questo differisca dal passato.
Per approfondimenti, il post originale è al suo posto (ed è linkato nell’header, come sempre). E ovviamente il manuale!
In questi giorni mi sono concesso un po’ di completo relax, e nel relax ho cominciato a smaltire un po’ di arretrati di Pocket, arrivando alla review dell’iPhone X su Daring Fireball. No, non ho comprato un iPhone X, no, non lo farò, ma trovo il modo di scrivere di John veramente scorrevole e stimolante; la chicca che ho trovato a poca distanza dall’inizio è lo Switcher, di cui non sapevo assolutamente nulla.
“Excuse me,” he told us, as he pressed a key combination on his keyboard, his monitor screen instantly changing to a different program. He talked on the phone for a minute or two, occasionally typing, before he finished the conversation and pressed a key combination to switch back to his Thunderscan notes.
Oggi, nel 2018, con un colpo di Alt-Tab possiamo passare in un secondo dal browser alla suite ufficio, dal terminale all’editor di testo. Possiamo cominciare a scrivere alla nostra fiamma in mezzo secondo. Possiamo far finta di lavorare mentre guardiamo Facebook.
Andy Hertzfeld ha scritto il primo window switcher per Mac, in un’epoca in cui scrivere questo tipo di applicazioni era veramente, veramente difficile. Personalmente sono molto affezionato al mio Alt-Tab sin dai primi anni con Linux, e leggere la storia di come è stata concepita questa funzionalità devo dire che è stato emozionante.
A conti fatti, per parecchi nerd come me, Hertzfeld è responsabile di una parte del computing desktop come lo conosciamo oggi. Switcher è stato integrato successivamente in MacOS Classic, continuando ad evolvere fino ad OS X con l’implementazione “attuale”. Nel frattempo anche Windows e Linux hanno implementato i loro window switcher: tutto per via di questa storia, che trovo straordinariamente affascinante.
09 Jan 2018
Visto che abbiamo imparato come configurare Elixir sulla nostra macchina, un po’ di esperimenti e un approccio di base.
I tipi sono interi, numeri (in virgola mobile), booleani, atomi, e stringhe.
Possiamo giochicchiarci in iex:
iex(1)> 1 + 2
3
iex(2)> "hello" <> "world"
"helloworld"
iex(3)> false || true
true
iex(4)> !true
false
iex(5)> !false
true
iex(6)> true == true
true
iex(7)> 2 == 2
true
iex(8)> 2 == "2"
false
iex(9)> 2 == 2.0
true
iex(10)> 2 === 2.0
false
Cose che possiamo notare sin da subito: le operazioni con tipi discordanti non funzionano, al contrario per esempio di JavaScript dove possiamo sommare stringhe e numeri indistintamente ottenendo una concatenazione (per esempio, grazie al casting implicito “molto libertino”); oltre questo, la comparazione con l’operatore == è debolmente tipizzata, ma i tipi compatibili tra loro sono molti meno. 2 è diverso da "2" ma è uguale a 2.0, che è in virgola mobile.
L’uguaglianza con il numero in virgola mobile viene falsificata da una comparazione “strict”, ovvero con triplo uguale, che fa anche un check del tipo.
I tipi li considero sempre la parte noiosa, ma vanno studiati; tra le cose divertenti invece abbiamo l’interpolazione di stringhe, che è abbastanza utile:
iex(15)> lang = "Elixir"
"Elixir"
iex(16)> "I'm studying #{lang}"
"I'm studying Elixir"
Stiamo carburando? Stiamo carburando! Mancano ancora un po’ di basi, tra cui le strutture dati fondamentali per non scrivere cose nonsense. Le vedremo in seguito.
Vai alla parte 1
Vai alla parte 3
07 Jan 2018
Visto che ci siamo cominciamo l’anno nuovo col piede giusto, e diamo il via alla serie di post “Elixir per idioti”, ovvero appunti sparsi, confusi e ordinati semicasualmente sul mio viaggio nell’ecosistema di Elixir.
Bando alle ciance, iniziamo:
Why
Elixir è un linguaggio con una sintassi molto simile a quella di Ruby che però, contrariamente appunto a Ruby, sfrutta la potenza della BEAM, ovvero la virtual machine di Erlang, e dell’ecosistema OTP per costruire ed eseguire applicazioni per la maggior parte di rete, a bassa latenza, distribuite, fault-tolerant.
Quello che a me fa impazzire è che oltre ad essere un vero gioiellino per le web application ed in generale la programmazione distribuita, la sintassi funzionale impura Ruby-like lo rende in realtà un meraviglioso giocattolino general purpose, che diventa adatto per costruire qualsiasi tipo di programma, anche un CLI tool o altro.
Il sito ufficiale del linguaggio è elixir-lang.github.io.
Setup
Il setup dell’ambiente è abbastanza facile. Su macOS:
Su Linux leggermente meno, ma dipende dalla distribuzione che usiamo. In genere abbiamo il pacchetto elixir nei repository della nostra distribuzione. Per Arch Linux è sufficiente un:
Ubuntu e Debian per esempio prevedono che venga usato il repository di pacchetti di Erlang Solutions:
$ wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
$ sudo dpkg -i erlang-solutions_1.0_all.deb
$ sudo apt-get update
$ sudo apt-get install esl-erlang elixir
In caso di necessità comunque, informazioni aggiornate possono essere trovate sulla pagina ufficiale.
REPL
Figata! Ora che abbiamo il nostro setup possiamo divertirci con il REPL.
A Read–Eval–Print Loop (REPL), also known as an interactive toplevel or language shell, is a simple, interactive computer programming environment that takes single user inputs (i.e. single expressions), evaluates them, and returns the result to the user; a program written in a REPL environment is executed piecewise. The term is most usually used to refer to programming interfaces similar to the classic Lisp machine interactive environment. Common examples include command line shells and similar environments for programming languages, and is particularly characteristic of scripting languages.
Wikipedia ci dà una definizione abbastanza precisa di cos’è un REPL, ed io ad oggi considero questo tipo di applicativo la via più breve per imparare un linguaggio di programmazione, sperimentare funzioni specifiche e scoprire sempre cose nuove riguardo gli internals.
Tip: moltissimi altri linguaggi hanno un REPL incluso nell’ambiente di sviluppo, come Python (python), JavaScript (node o la stessa console di Chrome), Ruby (irb), Haskell (ghci).
Il nostro REPL nello specifico si chiama iex. Lanciandolo nel terminale ci dà un po’ di informazioni utili, dopodiché sta a noi cominciare a fabbricare i nostri elisir:
blaster at gandalf in [~]
22:02:51 › iex
Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Interactive Elixir (1.5.3) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
Ci siamo.
Hello world
Il percorso di apprendimento di un nuovo linguaggio comincia sempre con un hello world.
iex(1)> IO.puts("hello world!")
hello world!
:ok
iex(2)>
Beh, per ora è tutto 😎
Vai alla parte 2