Questo articolo è stato scritto nel 2009. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Il plugin permalink_fu è stato abbandonato da oltre un decennio. Rails ha eliminato l’intero sistema di plugin in Rails 4 (2013) – la gem friendly_id è diventata il sostituto standard per gli URL slug.
Un altro spin-off dal sito www.visitacsa.it: un
miglioramento a
permalink_fu che
permette permalink dinamici. Lo so che è un
ossimoro, perché i permalink dovrebbero
essere… beh… permanenti! E siccome i motori di
ricerca li indicizzano, non dovrebbero
mai cambiare. Ma cosa succede quando pubblichi qualcosa, il tuo permalink
viene generato con permalink_fu usando il titolo del tuo post, e dopo un
paio di giorni vuoi cambiare il titolo, e anche il permalink sotto il quale il
post è accessibile?
Seguendo la
specifica, la tua
applicazione dovrebbe inviare uno status HTTP 301 moved permanently quando si
accede al vecchio permalink e fare redirect del client verso il nuovo Uniform
Resource Locator. Questo è più o meno quello che fa la mia modifica a
permalink_fu: ogni volta che gli attributi del tuo post vengono modificati, il
permalink precedente e quello nuovo vengono salvati nel database, e puoi
abilitare il tuo controller a generare redirect 302 moved temporarily quando
necessario. In altre parole, controlla se l’URL richiesto è un vecchio
permalink e reindirizza automagicamente il client verso quello nuovo.
Tutto avviene dietro le quinte, e il plugin ha anche dei comodi task rake per
impostare il model Redirect e le migration associate. E puoi anche cambiarne
il nome, ovviamente! :)
Questo articolo è stato scritto nel 2009. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Questo plugin si basava su $.browser (rimosso in jQuery 1.9) e sul trucco dell’era Prototype di nascondere un file input sotto il cursore. I browser moderni supportano la File API, l’upload drag-and-drop, e input.click() funziona ovunque ormai – niente più inseguimento del mouse.
Di recente ho scritto un plug-in jQuery che
permette l’upload di file via AJAX senza usare un pulsante file input
fisso. Raggiunge il suo scopo installando un handler OnMouseMove sugli elementi
selezionati e spostando il pulsante input sotto il cursore del mouse.
La citazione che ha ispirato questo codice e’: “Se Maometto non va alla
montagna, la montagna va da Maometto”, il contrario del proverbio piu'
noto :).
// ~ JavaScript Kung-FU, with an excess chunky bacon dose! ~
// This plugin allows seamless ajax file uploads without having
// a fixed file input button. It achieves this by installing an
// OnMouseMove handler over the interested elements, and moving
// the input button under the cursor. <<If Muhammad won't go to
// the the mountain, the mountain will come to Muhammad.>> :-).
//
// This approach is needed on the majority of browser, except
// Safari, on which the coder is allowed to trigger a "click"
// event onto an input type=file element. On other browsers,
// you can not, that's why the complicated mousemove approach
// was chosen.
//
// Either way, when the value of the input type=file changes,
// handlers are disabled, and a user-provided callback is then
// called (passed via the "upload" option). Handlers are then
// re-enabled again when the upload succeeds or fails.
//
// IE has additional problems, because, quite unexplicably,
// when submitting a form that causes a page load, the change
// event on the file input is triggered AGAIN, thus triggering
// a new file upload. To circumvent this, you can pass a "linked"
// option, that contains the jQuery selector of the form, and
// whenever an input under this form is hovered, ajax upload
// handlers are temporarily cleared and thus the spurious form
// submission.
//
// The jquery Form plugin is a perfect companion of this one,
// because of its .ajaxSubmit method. Have a look at its home
// page: http://malsup.com/jquery/form/.
//
// Have fun!
// - vjt@openssl.it
//
$.fn.ajaxFormUpload=function(options){varpositioning={top:0,left:0,position:'absolute',cursor:'pointer','z-index':2};varform=$(options.form||'#ajax_upload');form.css(positioning)varinput=form.find('input[type=file]');input.css($.extend(positioning,{width:'10px',opacity:0,'font-size':'0px'}));varhovering_element=null;varelements=$(this);varhandler,event_;if($.browser.safari){event_='click',handler=function(){hovering_element=$(this);input.click();};}else{event_='mousemove',handler=function(event){hovering_element=$(this);form.css({left:event.pageX-10,top:event.pageY-5});};}functionenable(){$(elements).bind(event_,handler);}functiondisable(){$(elements).unbind(event_,handler);}input.change(function(){varelement=hovering_element;if(!element)return;disable();options.upload(element,form);enable();});enable();if(options.linked){$(document).ready(function(){$(options.linked).find('input').mouseover(function(){hovering_element=null;});});}};
È il pesce combattente del Siam, un
bellissimo pesce tropicale, ma con una caratteristica interessante: è
estremamente aggressivo. La credenza popolare vuole che due maschi si combattano
anche in natura, ma non è proprio vero. Questa credenza deriva dal comportamento
del pesce in acquario, dove il vincitore attacca continuamente il perdente,
causandone alla fine la morte.
Ora, pensate all’ecosistema software come a un acquario. E pensate a Microsoft
dentro questo acquario. L’ultima release del sistema operativo Microsoft ha un
pesce aggressivo come skin predefinita, ed è solo in questo acquario. E non c’è
posto per nessun altro: combatteranno qualsiasi avversario, anche se della
stessa specie.
Quel che è incerto è… ci riusciranno, o no? :). Staremo a vedere!
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Apple ha rimosso AU Lab dagli strumenti per sviluppatori Xcode intorno al 2019, e Soundflower è stato abbandonato da Cycling ‘74 (acquisita da Ableton). Il sostituto moderno è BlackHole – un driver audio virtuale che fa lo stesso lavoro.
La sessione a destra mostra un documento aperto su un dispositivo audio aggregato tra soundflower (2 canali) e una Creative SBLive con 6 canali: il flower riceve l’input audio da iTunes e lo indirizza ai canali della scheda, usando tutti e 6 gli speaker.
Sono stati aggiunti degli effetti per migliorare l’esperienza audio (dettagli qui: http://www.rottenbrains.com/?p=232). La sessione a destra usa anche AUNetSend per streamare l’audio verso la sessione a sinistra, connessa agli speaker integrati del MacBook.
Risultato: audio stereo riprodotto su otto canali. Le Audio Units sono uno strumento davvero potente, ben scritto e ben funzionante.
[grazie a nextie per avermi detto di AUNetSend e AUNetReceive]
Miglioramento: non c’è bisogno di usare NetSend e NetReceive per riprodurre su 8 speaker: un dispositivo aggregato composto da Soundflower 2ch, la SBLive USB a 6 canali e l’uscita Built-in è sufficiente!
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Si è rivelato terribilmente accurato. La “personalità leggermente alterata” ora si chiama “personal brand” ed è obbligatoria per la sopravvivenza professionale. Cambridge Analytica ha dimostrato che i dati degli utenti possono influenzare le elezioni. Instagram e TikTok hanno amplificato di ordini di grandezza l’effetto “essere osservati cambia il comportamento”. ReadWriteWeb stesso ha chiuso nel 2012 — il link ora punta alla Wayback Machine.
Esattamente le parole che mi girano per la testa in questi giorni:
Quando raggiungeremo il punto in cui l’anonimato online sarà finito, invece
di poter essere chi siamo davvero, il fatto di essere diventati così
consapevoli di essere sempre registrati, fotografati, tracciati e seguiti,
avrà in realtà creato una personalità leggermente alterata. Come i
concorrenti dei reality TV, l’atto di essere osservati cambierà il nostro
comportamento. L’immagine del nostro brand personale diventerà la nostra
identità pubblica e quindi la nostra identità.
Direi che queste parole descrivono perfettamente l’“effetto Facebook”.
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Apple ha sostituito l’implementazione MIT Kerberos con Heimdal in OS X 10.7 Lion (2011), rimuovendo completamente CCacheServer. Sui macOS moderni, la System Integrity Protection (SIP, da 10.11 El Capitan) impedisce comunque di modificare qualsiasi cosa sotto /System/Library/.
Se ti stai chiedendo perché il demone CCacheServer, che tiene in memoria
i ticket Kerberos ottenuti tramite kinit(1), NON parte… è a causa di un
bug strano riguardante il LimitLoadToSessionType specificato nel .plist
dell’agent, che si trova in
/System/Library/LaunchAgents/edu.mit.kerberos.CCacheServer.plist sui sistemi
OSX 10.5.
CCacheServer verrà poi istanziato quando fai un kinit:
$ kinit
Please enter the password for vjt@DOMAIN.LOCAL:
$ klist
Kerberos 5 ticket cache: 'API:Initial default ccache'
Default principal: vjt@DOMAIN.LOCAL
Valid Starting Expires Service Principal
11/12/08 20:59:35 11/13/08 06:59:14 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
renew until 11/19/08 20:59:35
Il bug è strano perché la chiave LimitLoadToSessionType dovrebbe in realtà
istruire launchd ad avviare automaticamente il demone e farlo girare una volta
per ogni utente
loggato,
quando kinit ne richiede i servizi. Ma se la chiave è impostata nel .plist,
un launchctl load su di esso fallisce con “nothing found to load”. Assurdo!
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Lighthouse (il project tracker di ENTP) ha chiuso nel 2012, e la sua integrazione con GitHub non esiste più. Se cerchi il collegamento automatico tra commit e issue, tutte le piattaforme moderne (GitHub Issues, GitLab, Jira, Linear) lo fanno nativamente.
Se usi l’integrazione con Lighthouse fornita da GitHub, dalle pagine “Admin”
del tuo repository git, potresti esserti imbattuto in un difetto: ogni
changeset su Lighthouse appare come se fosse stato fatto dall’utente Lighthouse
che ha configurato l’integrazione su GitHub.
Questo succede perché Lighthouse usa il token API per collegare gli autori dei
changeset agli utenti LH, e non va bene quando non sei l’unico a fare commit :-).
Una soluzione semplice è usare un hook post-commit, come descritto
qui,
ma non è soddisfacente perché significa che ogni volta che esegui git commit
dalla tua console, il messaggio del commit diventa pubblico, e se fai
--amend o reset --soft dell’index dovrai andare su Lighthouse a cancellare
il changeset.
Una soluzione molto più furba è pushare tutte le revisioni modificate quando
le si pusha su GitHub: ho modificato l’hook post-commit
originale e l’ho installato accanto al comando
git in $(dirname which git)/git-lh.
Questo mi dà un nuovo comando git lh che recupera la revisione HEAD corrente
da GitHub usando refs/heads/master e fa POST di ogni changeset tra quella
revisione e il tip corrente nel working tree verso Lighthouse.
Quindi, se esegui git lh prima di git push, ogni modifica che stai
pushando su GitHub andrà anche su Lighthouse.
“Quando ti sembra di avere troppe cose da gestire nella vita, quando 24 ore in
un giorno non sono abbastanza, ricordati del vaso della Maionese e dei due
bicchieri di vino…”
Un professore stava davanti alla sua classe di filosofia e aveva davanti alcuni
oggetti.
Quando la classe incominciò a zittirsi, prese un grande barattolo di maionese
vuoto e lo iniziò a riempire di palline da golf. Chiese poi agli studenti se il
barattolo fosse pieno e costoro risposero che lo fosse.
Il professore allora prese un barattolo di ghiaia e la rovesciò nel barattolo
di maionese. Lo scosse leggermente e i sassolini si posizionarono negli spazi
vuoti, tra le palline da golf. Chiese di nuovo agli studenti se il barattolo
fosse pieno e questi concordarono che lo fosse.
Il professore prese allora una scatola di sabbia e la rovesciò, aggiungendola
nel barattolo; ovviamente la sabbia si sparse ovunque all’interno. Chiese
ancora una volta se il barattolo fosse pieno e gli studenti risposero con un
unanime “Si!”.
Il professore estrasse quindi due bicchieri di vino da sotto la cattedra e
aggiunse il loro intero contenuto nel barattolo, andando cosi effettivamente a
riempire gli spazi vuoti nella sabbia. Gli studenti risero.
“Ora”, disse il professore non appena la risata si fu placata, “voglio che
consideriate questo barattolo come la vostra Vita. Le palle da golf sono le
cose importanti: la vostra famiglia, i vostri bambini, la vostra salute, i
vostri amici e le vostre Passioni; le cose per cui, se anche tutto il resto
andasse perduto e solo queste rimanessero, la vostra vita continuerebbe ad
essere piena. I sassolini sono le altre cose che hanno importanza, come il
vostro lavoro, la casa, la macchina… La sabbia è tutto il resto: le piccole
cose.
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Diciotto anni dopo, ho scritto una retrospettiva su cosa abbiamo costruito, perché eravamo troppo in anticipo sui tempi, e chi lo fa oggi. L’approfondimento tecnico è nella serie del 2010.
Oggi abbiamo rilasciato il risultato di 9 mesi di duro lavoro: myousica.com, un social network per musicisti. Date un’occhiata al video promozionale e provate il sito. Divertitevi! :)
UPDATE 2009/02/23: Il sito è ora in pausa.
UPDATE 2010/10: Il codice sorgente è stato rilasciato su GitHub con il nome Mewsic.