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.
Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
CouchDB 0.11 è preistoria — CouchDB 3.x è la linea corrente dal 2020, e il layout delle librerie Erlang è cambiato completamente. Questa fix specifica difficilmente si applica a qualsiasi installazione moderna.
Se il tuo CouchDB 0.11 ti spara l’errore “Invalid UTF-8 JSON” ad ogni POST
o PUT che gli mandi, assicurati che nella tua
$prefix/usr/lib/couchdb/erlang/lib non ci siano residui di installazioni
precedenti.
Sul server di sviluppo nostro, ho trovato due directory
(“couch-0.10” e “mochiweb-r97”) dalla vecchia installazione 0.10 che causavano
il problema.
Questo vale se hai aggiornato da sorgenti, come probabilmente hai fatto, perché
ad aprile 2010 non è che ci fossero tutti questi pacchetti di CouchDB 0.11 :-).
Questo articolo è stato scritto nel 2009. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
HTML5 Canvas ha vinto. Flash è stato ufficialmente ucciso da Adobe a dicembre 2020. Questo tachimetrino si renderizza ancora perfettamente su qualsiasi browser moderno — ma nessuno si mette più a disegnare widget gauge a mano. D3.js, Chart.js, o anche solo CSS possono farlo con una frazione dello sforzo. Eppure, 52 stelle e 17 fork su GitHub: niente male per un progetto da weekend del 2009. E il mio amico che ha scritto il codice originale? Era praticamente Claude prima che Claude esistesse — sfornava codice di produzione a velocità macchina mentre il resto di noi stava ancora leggendo la documentazione.
L’elemento <canvas> è la novità del momento. Safari e Firefox lo supportano, Chrome è appena uscito, e Internet Explorer… vabbè, di Internet Explorer non parliamo. Flash è lo standard de facto per qualsiasi cosa grafica sul web. Un mio amico — uno degli ingegneri più brillanti che conosca, il tipo che implementa un filesystem in una notte e un kernel in una settimana — mi passa un widget tachimetro che ha scritto come codice di pubblico dominio. Figo, ma un po’ grezzo. Quindi lo prendo, rifattorizzo tutto in JavaScript object-oriented come si deve, aggiungo il supporto ai temi, risolvo i quirk di Firefox, e scrivo la documentazione.
Questo articolo è stato scritto nel 2009. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
Dal palco del Web 2.0 Expo 2008 a San Francisco, Clay
Shirky parla della rivoluzione sociale portata dal
web 2.0 nella società contemporanea, dalla TV a Wikipedia e World of Warcraft.
E Twitter doveva ancora essere riconosciuto a livello globale, nel 2008.
Questo articolo è stato scritto nel 2009. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Rails 3.0 è uscito nel 2010 e il merge con Merb è stato un successo. Oggi Rails è alla versione 8.x, ha integrato tutto quello che qui si auspicava (modularità, API stabili, engines come cittadini di prima classe) e molto di più. Lighthouse è stato dismesso, therubymine.com non esiste più, e molti dei link in questo articolo sono morti — ma le idee di fondo restano valide.
Tutti (o quasi) gli sviluppatori web conoscono o hanno sentito almeno parlare di Ruby on Rails, un framework full-stack per la creazione di applicazioni web utilizzando il linguaggio di programmazione Ruby.
La conclusione triste: “gli esseri umani sono animali da branco”
La conclusione buona: “la viralita’ e’ sempre esistita, non e'
un’invenzione del Web2.0. Il social networking e’ semplicemente uno strumento
potente per chiunque voglia cambiare il mondo”
La conclusione cattiva: “quanto ci vuole per portare la gente dai propri
computer al mondo reale dopo un avviso virtuale da qualche ‘uomo che balla’?”
Altre conclusioni: leggete i commenti su questo video su
reddit
e su youtube.