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.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
L’exploit di jailbreakme.com è stato patchato in iOS 4.0.2 nell’agosto 2010. Da allora Apple ha aggiunto ASLR, PAC, PPL e Lockdown Mode — la superficie d’attacco “visiti un sito, ti bucano il telefono” è drasticamente più difficile da sfruttare oggi, anche se non impossibile (vedi gli zero-click di NSO Group). Il punto più ampio sui walled garden e gli incentivi alla disclosure resta attuale.
Come la maggior parte di voi già sa, ci sono due vulnerabilità aperte e
critiche nelle versioni di
iPhone OS dalla 3.x in su. La prima risiede nel componente Compact Font Format
del renderer PDF, la seconda è un errore nel kernel che permette agli attaccanti
di bypassare la sandbox (SeatBelt) dentro cui le applicazioni vengono eseguite
sull’iPhone.
Le due vulnerabilità sono state scoperte da @comex,
@chpwn e altre persone.
Solo poche settimane dopo il difetto di design
.lnk su Windows (ragazzi, usate
LoadLibraryW per caricare una dannata icona!), queste vulnerabilità di iPhone
OS sono ancora più interessanti, per il modo in cui il rilascio viene gestito
dalla community e dal vendor.
Ho passato 3 ore ieri notte a cercare informazioni dettagliate sul bug, e a
parte confusi (e propagandistici) blog post, le uniche briciole di
informazione sono in questo
tweet e nell’exploit PDF vero
e proprio su jailbreakme.com. Dove sono i post
sulle security mailing list? Dov’è il CVE? Persino il CERT ancora non dice
niente su questa vulnerabilità.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Ruby 1.9 ha raggiunto la fine del ciclo di vita nel 2015 e Ruby 3.x ha ulteriormente cambiato il formato marshal. La repo erlang-ruby-marshal su GitHub è archiviata e non mantenuta. Se oggi hai bisogno di interoperabilità Erlang-Ruby, meglio usare JSON, MessagePack o Protocol Buffers.
In sintesi, aggiunge il supporto per l’unmarshaling delle stringhe 1.9, e
implementa l’ultimo tipo mancante (TYPE_LINK) che mancava dal codice. I test
ancora latitano, qualcuno vuole dare una mano? :-)
Added TYPE_LINK, needed because of how ruby 1.9 marshals strings.
In 1.9, Ruby marshals the string encoding in the binary output, and
uses an Ivar construct (TYPE_IVAR) to wrap the string and adds an
"encoding" instance variable (notice: without a leading @) whose
value is the encoding itself.
While the Ivar code worked correctly, the values of the encodings
are actually *strings*, that are being reused via the TYPE_LINK
construct, that wasn't implemented.
So, the get() and put() primitives are being used to store not
only tuples {id, sym} for symbols, but now store either
{{symbol, ID}, sym}
OR
{{value, ID}, val}
for the other types that use TYPE_LINK.
By reading the ruby marshal.c source code, it looks like that MANY
data types save their values in the arg->data hashtable, but by
inspecting the binary marshal output of, e.g, an array of floats,
links aren't used.
Thus, in this unmarshaler, links are considered, for now, only for
strings and regexes.