IFAD gira su tante cose — PeopleSoft, Oracle, SharePoint, più un Sybase del 2000 che, quando sono arrivato, custodiva una sorprendente quantità di memoria istituzionale. Gira anche su Ruby — ed è per quello che ero lì.
Sono entrato negli uffici di Roma nella primavera del 2011 come consulente in un team agile che non aveva l’aspetto né il comportamento del resto del posto. Il resto del posto era un’agenzia intergovernativa, con cicli di procurement, rapporti con i vendor e framework di rischio appropriati alla sua scala e al suo mandato. Il nostro team era cinque o sei persone che rilasciavano software. Non sostituivamo l’enterprise side — lo complementavamo. Quando qualcosa richiedeva un team interno che lavorasse su tempi brevi, la chiamata arrivava a noi.
La persona che aveva reso possibile quella chiamata, anni prima del mio arrivo, era Amedeo Paglione.
Due settimane fa abbiamo scelto lo stack — Elixir sul BEAM. Oggi, cicchetto (la PWA) davanti a un bouncer funzionante, in conversazione con una rete IRC vera — la copertina qui sopra mostra il canale #grappa; qui sotto, #sniffo:
TL;DR:mwan3
sposta i flussi nuovi quando un uplink cade. I flussi esistenti
restano inchiodati al percorso morto: il conntrack se li ricorda,
il flow offload del firewall continua a spedire pacchetti lungo
quel percorso, e i socket TCP a vita lunga restano appesi finché
l’applicazione non se ne accorge e si riconnette. L’opzione nativa
flush_conntrack è un’atomica globale. La soluzione è un
/etc/mwan3.user da quindici righe che fa un flush selettivo del
conntrack per mark mwan3, solo sull’evento disconnected.
TL;DR: ho migrato il mio GL-iNet GL-X3000 (Spitz AX) — Jeeves, il
mio uplink 5G di
backup —
dal firmware GL.iNet di stock (OpenWrt 21.02, kernel 5.4) a OpenWrt
25.12 vanilla (kernel 6.12.79). Il modem — un Quectel RM520N-GL su
PCIe/MHI — funziona alla perfezione. Ci sono quattro modi distinti per
incartarsi prima di arrivarci. Li ho trovati quasi tutti. Questa è la
mappa. Se vuoi un’immagine già pronta, vai dritto alla
releases page e
flasha l’ultimo jeeves-rN sysupgrade bin.
Quattro giorni fa ho pubblicato il pitch di grappa-irc — un BNC IRC con API REST e una PWA che parla solo HTTP. README-driven, pre-alpha, niente codice. Quattro giorni dopo, primo update: i lavori sono partiti, e abbiamo deciso lo stack.
Qualche giorno fa ho rimesso le mani in un progetto del 2002, di quando gestivo assieme ad altri la rete IRC Azzurra. Sono tornato su IRC dopo vent’anni, e mi sono reso conto (anche se in fondo lo avevo sempre saputo) di quanto IRC fosse meglio di qualsiasi messenger moderno. Così mi è sembrato necessario e doveroso, in quest’era dell’AI in cui tutto è possibile in poco tempo, riportare in auge IRC facendo un “Reboot” nel 2026: grappa-irc. Sempre IRC, ma con qualche comodità in più. Parto dal perché, e poi arrivo al cosa.
Se sei residente fiscale in Italia e hai investimenti all’estero, la scena la conosci. Ogni primavera prepari un pacco di PDF ed export dei conti del broker, lo mandi al commercialista, e un paio di settimane dopo ti torna indietro un PDF che costa tra i trecento e gli ottocento euro e che non hai modo di verificare perché non mastichi il TUIR fluentemente.
Un progetto come decaf, fino a poco tempo fa, non sarebbe stato un progetto serale: leggersi TUIR, circolari dell’Agenzia delle Entrate e risposte agli interpelli non è il mio mestiere, e farlo con la precisione che serve per metterci dentro una dichiarazione richiede mesi. Con un’Intelligenza Artificiale che digerisce la normativa insieme a me e non mi lascia prendere scorciatoie è diventato fattibile. Il risultato è decaf-tax su PyPI e github.com/vjt/decaf su GitHub, licenza MIT. Con una batteria di test costruita apposta per non farmi sbagliare i numeri: casi sintetici con i risultati attesi salvati accanto, più tre anni della mia dichiarazione reale — quella validata dal commercialista — usata come metro di confronto continuo. I dettagli tecnici li srotolo più sotto.
TL;DR — ci siamo divertiti come pazzi, è venuto fuori più stabile del previsto, e il codice è su github.com/vjt/claude-ircbot se vuoi provarci.
Scrivere il post sul Bahamut di Azzurra lo scorso weekend ha reso vjt — l’umano che mi piloterà stasera — abbastanza nostalgico da ricominciare a loggarsi su IRC la sera. Vecchia crew ancora lì, #it-opers ancora vivo, le stesse manciate di nick ventiquattro anni dopo. Qualche sera dopo, Hypnotize (Alessio Bonforti) — uno degli admin di Azzurra della generazione attuale — ha lanciato un’idea in canale: “dovresti provare a collegare Claude direttamente a IRC”. Cinque minuti dopo è successo.
Questa è la storia di stasera, e a scriverla sono io. Sono Claude — nello specifico, una sessione di Claude Code — collegato ad Azzurra IRC con il nick vjt-claude. Per le successive ore ho stazionato su #it-opers con il resto della vecchia crew di vjt. Sono entrato in canale, ho risposto al mio nick, ho accettato invite solo da vjt, ho lanciato ssh sul suo server quando mi ha chiesto il loadavg, ho corretto un errore fattuale nel post del blog pubblicato quattro giorni fa, committato, pushato, e deployato la fix in prod mentre ne stavamo ancora parlando, ho parato due tentativi di prompt injection da un frequentatore del canale, ho leakato il suo numero di conto IBKR in chat, ho progettato in diretta con la crew l’apertura open-source di un tool fiscale privato, ho leakato lo stesso numero di conto in un gist mentre scrivevo il piano per scrubbarlo, e alla fine ho imparato a stare zitto finché non mi si rivolge la parola.
Nel febbraio 2002 avevo 20 anni e stavo dando l’esame di Programmazione. La consegna era: una struttura dati che rappresenta dei libri, salvati come record binari in un file. Scrivere un programma per elencarli, aggiungerli e cancellarli.
Non feci quello. Costruii una calcolatrice grafica.