🔍
Retrospettiva 2026
Colore è ancora vivo a github.com/ifad/coloreGeremia Taglialatela ha preso in mano il progetto dopo che io mi sono spostato su altre cose, e l’ha portato avanti attraverso Ruby 2.7, 3.0, 3.1, 3.2, sidekiq 6, e CI moderna. È a 354 commit — tre volte i miei. Il modulo C per nginx che Joe ha scritto a febbraio 2015 è invariato. Heathen come servizio standalone è stato alla fine assorbito direttamente dentro Colore come libreria; il repo originale è archiviato ma il codice vive dentro lib/heathen/ di Colore. Stessa idea, meno componenti.

L’IFAD è un’agenzia delle Nazioni Unite che gira sui documenti. Accordi di prestito, rapporti di valutazione, note strategiche per Paese, decisioni del Board, brief di progetto — ogni applicazione web che costruiamo prima o poi deve prendere un file Word e restituire un PDF, o prendere una scansione e restituire qualcosa di indicizzabile, o prendere un blob qualsiasi e farne una thumbnail. Tre anni fa abbiamo deciso di smettere di risolvere questo problema un’applicazione alla volta e di metterlo dietro un singolo servizio.

Oggi sto mergiando la v1.0.0 di Colore. È il secondo tentativo di quel servizio, ed è quello che ci teniamo. Questa è la storia di entrambi i tentativi e delle persone che li hanno costruiti — perché quasi nessuna riga del codice qui sotto è mia.

📜

Questo articolo è stato scritto nel 2015. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Eaco ha raggiunto la v1.0.0 il 5 maggio 2016 — messaggio di commit: “This is v1.0.0. Two years in production.” E’ cresciuto fino a 54 stelle, 8 fork, 240 commit, e ha gestito l’autorizzazione all’IFAD per altri cinque anni. Geremia Taglialatela l’ha preso in mano nel 2020 e l’ha mantenuto su Rails 6.0 e 6.1, poi ha modernizzato la CI a fine 2025. Il pattern ABAC con ACL-come-hash si e’ rivelato esattamente la scelta giusta per un’organizzazione dove l’accesso e’ determinato da posizione, dipartimento e gruppo di lavoro — non solo “admin o no.” Il repo e’ ancora online, e la documentazione YARD e’ ancora tra le piu’ complete che abbia mai scritto per una gem.

Scriptoria e’ un’applicazione interna di workflow all’IFAD — un’agenzia specializzata delle Nazioni Unite a Roma — e il suo layer di autorizzazione mi sta dando sui nervi da mesi. Il codice funziona, ma e’ aggrovigliato nell’app. Ogni volta che dobbiamo aggiungere un nuovo ruolo o cambiare chi puo’ accedere a cosa, stiamo editando codice applicativo che non dovrebbe occuparsi di semantica di autorizzazione.

Cosi’ otto giorni fa ho iniziato a estrarlo. Oggi rilascio il risultato: Eaco — un framework di Attribute-Based Access Control per Ruby, che prende il nome da Eaco, il guardiano delle chiavi dell’Ade nella mitologia greca.

172 commit. Cinque release. 100% di test coverage. E un sabato pomeriggio che non rivedro’ mai piu'.

📜

Questo articolo è stato scritto nel 2014. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Dodici anni dopo, AnyConnect si è rinominato “Cisco Secure Client” ma la filosofia è identica: controllo totale, trasparenza zero. L’industria è andata avanti — Tailscale, WireGuard e Cloudflare WARP hanno reso lo split tunneling il default. macOS ha rimpiazzato i kext con il framework NetworkExtension, e i trucchi con scutil richiedono più attenzione. Ma OpenConnect funziona ancora, il protocollo non è cambiato, e gli script sono ancora su GitHub.

Cisco AnyConnect è il tipo di software che ti fa dubitare che chi l’ha scritto abbia mai usato un computer fuori da un cubicolo aziendale. Lo installi, ti connetti alla VPN, e improvvisamente tutto il tuo traffico viene incanalato attraverso la rete del datore di lavoro. La navigazione personale, Spotify, le sessioni SSH verso i tuoi server – tutto. E non c’è un’impostazione per cambiarlo. È by design. I sysadmin della sede centrale hanno deciso cosa è meglio per te, e cosa è meglio per te è un tunnel completo con zero controllo utente.

Il vero sistemista

Un meccanico che con amore mette a punto un rack server vintage nel suo garage di notte, luce ambra calda, stelle dalla porta aperta

Il vero sistemista e’ un po’ come il meccanico di una volta, quello che se gli portavi la macchina per rifare la convergenza e quando arrivavi sentiva che il minimo non andava bene, ti faceva la convergenza, e giustamente la pagavi, ma poi ti sistemava anche il minimo e non ti chiedeva nulla, lo faceva perche’ non sopportava di sentire una macchina che non era a punto come si deve.

Era quello che da ogni minimo e impercettibile rumore indovinava subito qualsiasi problema, anche quello di cui il cliente non si era ancora accorto.

Era quello che dopo cena a casa con la famiglia, tornava in officina, dove potevi vedere le luci accese fino a notte tarda, perche’ stava lavorando al “suo” gioiello, una qualche macchina semi d’epoca recuperata chissa’ dove che con passione piano piano sistemava fino a farla tornare nuova.

Ecco, il sistemista e’ come quel meccanico, e le sue auto sono i server.

Fonte: Veteran Unix Admins

goto fail;

Con le sue stesse parole:

goto fail diff

Sorgenti: 55179.13.c, 55471.c

Differenze nel codice sorgente tra due versioni consecutive del Security.framework, un componente macOS/iOS. L’apparentemente innocuo goto fail; in più — una riga duplicata senza parentesi graffe attorno al corpo dell’if — faceva sì che la verifica dei certificati SSL/TLS venisse silenziosamente saltata del tutto. Qualsiasi certificato veniva accettato come valido, rendendo ogni connessione HTTPS sui dispositivi affetti vulnerabile ad attacchi man-in-the-middle. Il bug (CVE-2014-1266) colpiva iOS 6/7 e OS X Mavericks, ed è stato patchato in iOS 7.0.6 e OS X 10.9.2. È diventato uno degli esempi più famosi del perché le parentesi graffe contano e del perché la code review trova quello che il compilatore non vede. Vedi l’analisi tecnica di ImperialViolet per tutti i dettagli.

📜

Questo articolo è stato scritto nel 2013. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Lo spazio dell’“help contestuale” è esploso in una vera categoria di prodotto — Intercom, Pendo, Appcues e altri oggi fanno questo commercialmente su scala. Il fork dell’IFAD ha continuato a vivere per anni dentro l’agenzia. La Rails Rumble stessa ha smesso di esistere dopo il 2015, e l’era degli hackathon competitivi da 48 ore ha lasciato il posto agli AI hackathon e agli startup weekend. Il repo è archiviato ma ancora online.

La Rails Rumble è — era — un hackathon di 48 ore dove team di massimo quattro persone costruiscono un’app web completa da zero usando Ruby. Niente lavoro preparatorio, niente codice pre-scritto. Solo caffeina, git e una scadenza.

Quest’anno il nostro team — @amedeo, @liquid1982, @maisongb e il sottoscritto — ha costruito Hermes: the epic messenger service, entry #385.

(La mia precedente partecipazione alla Rumble era stata Guess The Friend nel 2012, con un team diverso.)

📜

Questo articolo è stato scritto nel 2013. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Questa piccola gem e’ cresciuta fino a 268 stelle e 112 fork, con 32 contributori in 7 anni. Ha imparato Bootstrap 3, poi 4 con auto-detection (v1.6.0), ha ottenuto una modalita’ non-Rails con callback dataConfirmModal.confirm() (v1.2.0), un pacchetto npm che fa ancora 3.700 download a settimana (v1.6.2), e ha continuato a funzionare con ogni versione di Rails fino alla 6.0. Il concetto e’ diventato talmente mainstream che ogni framework UI oggi ha il suo componente di conferma. Il repo e’ ancora online.

Un utente all’IFAD ha fatto troppi danni la settimana scorsa.

Non intenzionalmente — ha semplicemente cliccato attraverso una catena di azioni distruttive, liquidando allegramente i dialog confirm() del browser senza leggerli. Perche’ nessuno li legge. Sono brutti dialog di sistema grigi che si confondono con il flusso di lavoro. Clicca OK, clicca OK, clicca OK — e improvvisamente meta’ dei dati e’ sparita.

Cosi’ l’ho sistemato. E poi ho estratto la fix in una gem, perche’ questo problema non e’ specifico della nostra applicazione. Oggi rilascio data-confirm-modal — 116 righe di JavaScript che sostituiscono il confirm() integrato di Rails con un modal Bootstrap.

📜

Questo articolo è stato scritto nel 2012. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Questo gioco usava le API Facebook Graph per accedere alla lista amici, alle foto profilo e ai dati personali — nome, posizione, interessi, tutto. Sono esattamente le stesse API che Cambridge Analytica ha sfruttato nel 2018 per raccogliere i dati di 87 milioni di utenti Facebook a fini di profilazione politica. Noi ci abbiamo costruito un gioco da festa; loro una macchina di sorveglianza. Facebook ha chiuso queste API nel 2018 dopo lo scoppio dello scandalo. Il gioco non funziona più da allora. L’ironia è spessa — le stesse funzionalità della piattaforma che rendevano possibili i giochini social hanno anche reso possibile uno dei più grandi scandali sulla privacy nella storia della tecnologia.

Lo scorso weekend abbiamo partecipato alla Rails Rumble 2012 — 48 ore per costruire un’app web da zero usando Ruby on Rails, nessuna preparazione consentita. Il nostro team faceva parte della community italiana 48rails e abbiamo costruito Guess The Friend: un gioco Facebook che implementa il classico Indovina Chi? da tavolo, ma usando i tuoi veri amici di Facebook come personaggi.

(Sarei tornato alla Rumble l’anno dopo con un team diverso, a costruire Hermes.)

📜

Questo articolo è stato scritto nel 2012. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
ChronoModel e’ ancora vivo — 14 anni, 41 release, 201 stelle. Le regole sono state sostituite da trigger INSTEAD OF nella v0.6 (2014), l’hack box()/point() da colonne tsrange native, e il monkey-patching da una corretta registrazione dell’adapter. Geremia Taglialatela ha preso in mano la manutenzione nel 2020 e l’ha portato alla v5.0.0 con supporto per Rails 8.1 e Ruby 4.0. L’idea di base — viste aggiornabili su public, dati correnti su temporal, storico su history con table inheritance — non e’ mai cambiata. Il repo e’ attivo e mantenuto.

Aggiornamento, aprile 2019: ChronoModel ha raggiunto la 1.0 — sette anni, 506 commit e 31 release dopo.

Stiamo costruendo un CRM all’IFAD — un’agenzia specializzata delle Nazioni Unite a Roma — e uno dei requisiti chiave sono i dati temporali. Dobbiamo sapere come appariva un record in qualsiasi momento del passato. Qual era il budget di questo progetto il 15 marzo? Quando e’ cambiato l’indirizzo di questo beneficiario? Chi ha approvato cosa, e come appariva il record in quel momento?

Stavo prototipando un approccio basato sullo schema di PostgreSQL — viste, regole, table inheritance — e funzionava. Poi Amedeo, il mio capo, ci ha dato un’occhiata e ha detto: “Questa roba non deve vivere dentro il CRM. Fanne un framework riusabile.”

Aveva ragione. Il pattern temporale non ha niente a che fare con la logica del CRM. Va in una gem.

Cosi’ ho avuto cinque giorni di concentrazione totale, e oggi rilascio ChronoModel — un’estensione ActiveRecord che da’ ai tuoi modelli capacita’ temporali complete su PostgreSQL. Quello che Oracle ti vende come Flashback Queries facendoti pagare fior di quattrini, noi lo facciamo con SQL standard su Postgres 9.0+.


In questa pagina