📜

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+.

📜

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

🔍
Retrospettiva 2026
Debian Squeeze ha raggiunto l’end-of-life nel 2016, e Node.js ora distribuisce pacchetti .deb ufficiali tramite NodeSource o arriva già pacchettizzato in ogni release moderna di Debian. Di sicuro non vuoi più cross-compilare da SID — usa nvm o i repo ufficiali.

In breve: aggiungi la sorgente APT di SID, configura l’APT Pinning per dare priorità ai pacchetti di squeeze rispetto a quelli di SID, ricompila il pacchetto nodejs sotto squeeze.

  • Aggiungi la sorgente APT di SID creando /etc/apt/sources.list.d/sid.list (usa il tuo mirror più vicino):
deb http://ftp.us.debian.org/debian/ sid main
deb-src http://ftp.us.debian.org/debian/ sid main
  • Configura il pinning APT creando /etc/apt/preferences.d/sid:
Package: *
Pin: release a=unstable
Pin-Priority: 50
  • Installa manualmente l’ultima versione di libv8, libv8-3.8.9.20 al momento di questo articolo:
apt-get install libv8-3.8.9.20
  • Scarica i sorgenti del pacchetto nodejs, le dipendenze e compilali:
cd
apt-get source nodejs
apt-get build-dep nodejs
cd nodejs-*
debuild -nc -uc
  • Se incontri errori di dipendenze di build, dovresti provare prima ad abbassare la dipendenza in debian/control, sia in Build-Depends che in Depends, e rieseguire debuild. Se la compilazione fallisce (ad es. con undefined reference to 'ev_run') la versione precedente non ha le funzioni richieste. Quindi, devi installare le versioni aggiornate delle dipendenze necessarie (ad es. libev4) da sid, usando apt-get install nome=versione ad es. libev4=1:4.11-1. Lo suggerisco perché dovrai aggiornare manualmente i pacchetti installati da sid, quindi meno sono, meglio è.

  • Installa il pacchetto generato

dpkg -i nodejs_*.deb nodejs-dev*.deb
  • Profit :-)
📜

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

🔍
Retrospettiva 2026
Da Linux 4.11 (2017), sysctl net.ipv4.ip_unprivileged_port_start=0 permette a qualsiasi utente di fare il bind sulle porte basse senza capabilities — niente setcap. Inoltre, il web server Thin mostrato qui è obsoleto da quando Puma è diventato il server Rails di default in Rails 5 (2016). E se usi Docker, niente di tutto questo conta comunque.

Neo Tux

Quindi hai una VM Linux che usi per lo sviluppo, perché vuoi replicare l’ambiente di produzione il più fedelmente possibile. Hai molte applicazioni da gestire, devono girare tutte contemporaneamente perché sono dei bei web service REST JSON.

Sei stanchissimo di ricordarti quale hai messo sulla porta 8081, e i tuoi file di configurazione stanno diventando un vero casino. Quindi configuri degli alias per gli indirizzi IP sull’interfaccia di rete e decidi di assegnare persino dei nomi host — /etc/hosts va benissimo — per ogni applicazione.

Poi, in una configurazione del genere, perché dovresti ancora farle girare su porte superiori a 1024? Non sarebbe fantastico digitare il nome dell’applicazione nella barra degli indirizzi del browser? Sì che lo sarebbe, ma è meglio non farle girare come root, comunque.

La soluzione sono le Linux capabilities (vedi anche qui). Quella che ci interessa è cap_net_bind_service: dà a un processo il diritto di fare il bind su porte well-known (< 1024). Se usi un linguaggio interpretato, ovviamente dovrai aggiungere la capability all’interprete stesso. Ecco perché c’è sviluppo nel titolo di questo articolo — non dovresti configurare questo su un server di produzione, se non sai cosa stai facendo.


In questa pagina