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:
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 è.
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.
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.
Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
PH-Neutral è stata l’ultima edizione — fedele al motto sul badge, “if it is good, they stop making it.” Phenoelit si è sciolta poco dopo. Molte delle tecniche di attacco descritte qui (bypass ASLR, downgrade Chip & PIN, intercettazione TETRA) sono state nel frattempo patchate o mitigate, ma le lezioni di fondo sui difetti implementativi nelle tecnologie “sicure” restano senza tempo. La ricerca sull’exploitation DWARF di James Oakley e Sergey Bratus è diventata un paper fondamentale nel campo.
“If it is good, they stop making it”, il
payoff stampato sui laccetti della conferenza, distribuiti a ogni partecipante,
insieme a un badge über-l33t personalizzato con il nostro nickname e l'hash
della chiave.
Essendo la mia prima esperienza a una conferenza di sicurezza internazionale
(sono stato solo al camp ccc2k+7), ed essendo un outsider di ph dato che non
avevo mai partecipato alle edizioni precedenti, il keynote di apertura tenuto da
FX, staffer e frontman, è stato
illuminante: “you ought to be here!”, ha urlato indicando il palco,
indossando una camicia bianca col logo Phenoelit stampato su entrambe le
maniche.
“Questa conferenza non è mai iniziata in orario”, ha continuato,
“quindi non c'era motivo di farlo per quest'ultima”. Il programma è
lineare: festa, il giorno dopo talk dalle 12:00 alle 19:30, poi festa, e
l'ultimo giorno talk dalle 12:00 alle 17:30. Decisamente un setup che si sposa
bene con l'alcol disponibile :-D.
Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
RVM esiste ancora ma la maggior parte dei Rubyisti è passata a rbenv, asdf o mise per la gestione delle versioni. I meetup del Ruby Social Club si sono spenti, ma la community Ruby italiana vive attraverso il RubyDay e vari gruppi locali.
Grazie agli sforzi di @jodosha e sulla scia del
vecchio evento Javaday, ora ribattezzato codemotion
che ha portato a Roma tanti sviluppatori Ruby da Milano, Padova e altre parti
d’Italia — il primo Ruby Social Club ufficiale a Roma è stato un gran
successo. Ovviamente, l’ufficialità si misura solo nella quantità di spam
su Twitter postato a riguardo! :-): i precedenti RSC a Roma risalgono al
2006
organizzati dagli attuali membri di mikamai e altri
meetup promossi da @jekonel
2007.
Quello che conta è che c’è una community, c’è passione, e c’è voglia di
condividere conoscenza — non importa chi organizza gli incontri, l’importante è
che si facciano :-).
L’evento è stato semplice e diretto — prima qualche birra, poi la mia
presentazione su RVM e gli interpreti Ruby, poi quella di Luca che ha annunciato
il suo progetto minege.ms e dopo il vero social
networking :-). Ho rivisto @gravityblast dopo
tanto che non ci vedevamo, ho conosciuto il gruppo
PIP e ho incontrato
@svarione,
@punkmanit,
@leonardoperna,
@riggasconi,
@ogeidix e altre persone in gamba. Inoltre,
abbiamo passato del gran bel tempo insieme, mettendo su un weekend davvero
sgangherato e divertente. Ovviamente, enormi kudos alla macchina di
@nhaima — che ci ha instancabilmente portato in
giro per Roma per due giorni :-)
Ora, in attesa del prossimo meetup, grazie a tutti quelli che hanno
partecipato, che mi hanno offerto birre e, ultimo ma non meno importante, grazie
a @etapeta per avermi portato in tempo
all’incontro — sei il vero eroe :-).
Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Buone notizie: FreeBSD supporta pienamente l’hardware del MacMini 4,1 (NV MCP89 SATA, BCM57762 NIC) da FreeBSD 9.x (2012). Anche NetBSD e OpenBSD hanno aggiunto il supporto. Il “neanche per sogno” nel titolo non è invecchiato bene — i BSD girano tranquillamente su questa macchina ormai.
Ho passato gli ultimi due giorni a cercare di configurare il Mac Mini in alluminio (rev. 4,1)
come NAS server casalingo con storage crittografato, e
volevo metterci un sistema BSD. C'è già un
OpenBSD embedded sul gateway soekris, e un compagno sarebbe stato
carino. :-)
FreeBSD 8.2-RC1 fa il boot ma, a causa dello stesso bug, non riconosce nessun
drive SATA né nessun dispositivo USB
umass;
NetBSD 5.1 fa il boot senza problemi, gestisce i
dischi SATA tramite il driver generico pciide (niente DMA, quindi piuttosto lento) ma, sfortunatamente, non gestisce
il controller ethernet BCM57762. Ho provato con
patch veloci e sporche per portare il
driver bge al livello di -current, ma niente da fare: il MII link detection funziona, la scheda trasmette ma
non riceve. Anche il controller sdmmc funziona con -current ma non
con la 5.1-RELEASE. L'ACPI funziona correttamente;
OpenBSD 4.8 fa il boot, accede ai drive SATA
senza DMA, e riconosce la scheda di rete bge, ma
mostra lo stesso identico comportamento di NetBSD 5.1 col driver di -current;
DragonFlyBSD 2.8.2 non entra nemmeno in kernel mode, sospetto
a causa di bug ACPI;
PureDarwin non mi ha
ispirato granché, a causa dei tanti problemi bloccanti.
Tutti supportano lo storage crittografato, ho tirato su un disco NetBSD CGD senza problemi su dk wedge; FreeBSD ha gli
interessanti strumenti gbde(8) e
geli(8) basati su GEOM che non ho potuto testare, mentre OpenBSD
supporta la crittografia tramite una personality
softraid. Purtroppo, il supporto per l'hardware Apple, ormai esotico, è
fuori discussione.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.
Questo è il terzo e ultimo post della serie Myousica. Il primo copriva la piattaforma Rails, il secondo l’editor multitraccia Flash. Questo copre come l’audio arriva effettivamente dal microfono dell’utente a un MP3 riproducibile — la pipeline che collega tutti i servizi insieme.
L’uploader è un’applicazione Rails 2.2 separata — headless, niente database, niente ActiveRecord. Solo controller, worker in background e strumenti di elaborazione audio. Andrea Franz ha costruito la versione iniziale ad aprile 2008, io ho preso in mano da maggio 2008 in poi. 120 commit, originariamente chiamato multitrack_server prima di essere rinominato in mewsic-uploader a marzo 2009.
Due punti di ingresso: l’utente può caricare un file MP3 direttamente, oppure registrare via microfono (che produce uno stream FLV attraverso Red5). Entrambi finiscono come un MP3 con un PNG della forma d’onda.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.
Questo è il secondo post della serie Myousica. Il primo copriva la piattaforma Rails. Questo si immerge nell’editor multitraccia — il componente Flash/Flex dove gli utenti mixano effettivamente la musica nel browser.
Il multitraccia è stato inizialmente sviluppato da Vaclav Vancura, che ha costruito l’architettura originale, la libreria di componenti UI e il motore di riproduzione audio. Poi ho preso in mano io e l’ho ricablato pesantemente — integrando la registrazione, l’upload, i servizi backend e la macchina a stati che tiene tutto insieme. 81 file ActionScript, ~7.300 righe di codice, 129 commit.
Ecco lo screenshot originale di Vaclav che mostra la vista remix — dove le canzoni si collegano e si ramificano in nuovi remix:
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.
Oggi rilasciamo il codice sorgente di Myousica — la piattaforma collaborativa per il remixaggio musicale che stiamo costruendo dalla fine del 2007. Abbiamo lanciato a settembre 2008 dopo 9 mesi di sviluppo, l’abbiamo tenuta in piedi per circa 5 mesi, e abbiamo messo il sito in pausa a febbraio 2009. Il progetto è stato ribattezzato Mewsic lungo il percorso, ma l’idea è la stessa. Piuttosto che lasciare il codice a marcire su un server privato, lo mettiamo tutto su GitHub. Cronologia completa, difetti inclusi.
Questo è il primo di tre post che esplorano il codice. Questo copre l’applicazione Rails principale — la piattaforma vera e propria. I prossimi due copriranno l’editor multitraccia Flash e la pipeline di elaborazione audio.
Il pitch è semplice: io carico una traccia di basso di Let It Be, tu carichi la tua voce, qualcun altro aggiunge chitarra e batteria. Attraverso Myousica, c’è un editor multitraccia che gira nel browser dove puoi mixare tutto insieme, regolare i volumi e pubblicare il risultato. Altre persone possono poi prendere il tuo remix, aggiungere le proprie tracce e remixare il remix.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
Per curiosità, stavo guardando come un browser interagisce col backend di Google
Instant. Mentre osservavo gli scambi HTTP con Firebug, prima mi sono chiesto
perché codificano HTML e JS con sequenze di escape \xYY, poi perché le
stessissime funzioni JS vengono mandate avanti e indietro ad ogni richiesta, e
poi mi sono imbattuto nel servizio JSONp google.com/s?q=QUERY.
Dagli una query, e ti restituirà le frasi suggerite correlate che vengono usate
per costruire il menu sotto la barra di ricerca quando usi i suggerimenti e/o
Instant (non ho scavato troppo in tutti gli altri parametri).
Ad ogni modo, la cosa interessante è che, ovviamente, i suggerimenti sono
personalizzati per paese. Per mostrare le differenze in modo esplicito,
chiediamo al servizio la query più semplice possibile, a:
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Panmind non esiste più. Le repo GitHub esistono ancora come reperti storici, ma l’ecosistema di plugin Rails descritto qui è stato sostituito da gem e engine da un pezzo. Per la storia più profonda dell’architettura — il framework SPA, la pipeline di analytics, la condivisione di sessioni cross-linguaggio — vedi la retrospettiva del 2026.
Il 22 luglio 2010, Mikamai ha ospitato un Ruby Social
Club a Milano,
dove circa 50 persone hanno assistito a cinque talk su Ruby, sviluppo web e
startup. Sono stato contento di essere uno degli speaker, e ho presentato un
insieme di plugin Rails che noi abbiamo estratto dal
nostro ultimo (e più grande) progetto:
Panmind (leggi di più nella pagina
about), rilasciati come Open Source su
GitHub.
La presentazione è divisa in due parti: la prima spiega perché dovresti
seguire il sano principio di ingegneria del software di scrivere codice modulare
e a responsabilità separate, e poi come potresti (e dovresti) estrarlo dalla
tua applicazione Rails disaccoppiando la configurazione e preparando il rilascio
Open Source, scrivendo documentazione E presentando a un evento Ruby così,
si spera, qualcun altro scriverà i test unitari! :-)
Abbiamo rilasciato un plugin SSL helper
che implementa dei filtri (come ssl_requirement di Rails) ma anche degli
helper per le named route: basta con <%= url_for :protocol => 'https' %>!
Avrai qualcosa come plain_root_url e ssl_login_url — come se fossero
integrati nel framework.
Poi, un plugin semplicissimo per Google
Analytics, con supporto <noscript>, un
paio di helper per i test e un
embrione
di framework JS per Analytics — si spera che evolva in un plugin jQuery
completo. Poi, un’interfaccia
ReCaptcha, con supporto alla validazione
AJAX, e infine un’interfaccia Zendesk
per Rails.