📜

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.

AGGIORNAMENTO: Un semplice script bash tipo:

Il barattolo di maionese e due bicchieri di vino

Il barattolo di maionese e due bicchieri di vino

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

myousica.com è nato oggi

📜

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.

myousica — play and share

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.


Myousica nel tempo: Annuncio lancio (2008)Open-source dell’app Rails (2010) • Editor multitraccia (2010) • Pipeline audio (2010) • Diciotto anni dopo (2026)

Il miglior post che abbia mai scritto

javascript, klingon, javascript, javascript, IE, IE, IE, sucks, optimize, optimize,
user experience, web2.0, harnessing collective intelligence, love, hate, sex, ruby,
rails, rails, rails, admin, REST, javascript, javascript, IE IE IE SUCKS, premature
optimization, assets, google API, love, love, hate, hate, air, trips, hide, toggle,
show, ryan, twenty-three times the pain, javascript, IE, ruby, rails, CSS, spacing,
position:absolute, love, love, love, love, too much, too much, too much.

number 42.

Chuck Norris in Ruby

🔍
Retrospettiva 2026
Contesto per i lettori più giovani: a metà anni 2000, i “fatti su Chuck Norris” erano un meme internet assurdamente popolare — una lista infinita di battute iperboliche sull’invincibilità dell’attore (“Chuck Norris può dividere per zero”). Naturalmente qualcuno doveva implementarli in Ruby. Il blog di intinig è sparito, ma il repo GitHub è ancora online — una classe ChuckNorris che rifiuta di essere istanziata (“No one initializes Chuck Norris”) o ereditata. Il bello: se ci provi, percorre ObjectSpace e annulla ogni istanza della tua classe. Calcio rotante all’intero runtime Ruby.

intinig ha portato il potere del calcio rotante di Chuck in Ruby! Dategli un’occhiata…

https://github.com/intinig/chuck_norris/tree/master/chuck_norris.rb

E’ un proof-of-concept, ovviamente :).

Ho già Mac OS Snow Leopard 10.6

🔍
Retrospettiva 2026
La battuta: Apple aveva appena annunciato Snow Leopard (Mac OS X 10.6) al WWDC 2008, più di un anno prima della sua uscita effettiva nell’agosto 2009. Su un Mac, la stringa di versione di “Informazioni su questo Mac” è salvata in un file plist in chiaro (/System/Library/CoreServices/SystemVersion.plist). Modificalo, riapri “Informazioni su questo Mac”, e congratulazioni — stai usando un OS che non esiste ancora. Apple da allora ha reso questo file in sola lettura sul macOS moderno tramite System Integrity Protection.

E questa è la prova:

Snow Leopard

(Ovviamente, se conosci SystemVersion.plist, salta pure questo post ;)

Cosa dice la tua .bash_history?

Un mio amico mi ha detto che sui blog tecnici gira un nuovo meme: mostrare i comandi più usati, partendo dalla history della shell:

history | \
awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | \
sort -rn | head -15

Io ho 20 volte la dimensione di default della bash history (10k righe), quindi i risultati saranno interessanti. Uso anche la funzione di timestamp della history, quindi ho aggiunto un piccolo sed al codice per eliminare i timestamp.

Vediamo un po':

vjt@voyager:~/code*$* history | 
 sed 's#^[ 0-9\[\/\:]*\]\([^ ]*\).*#\1#' |  
 awk '{a[$1]++}END{for(i in a){print a[i] " " i}}' | 
 sort -rn | head -15
928 l
577 ssh
389 ping
381 cd
300 dig
259 telnet
153 sudo
126 ifconfig
125 whois
113 ps
96 svn
91 cat
73 fg
68 vi
61 ..

Già, faccio un SACCO di ls, l in realtà è ls -alFGs (sono su Darwin). Questa lista rivela le mie abitudini recenti, perché sto scrivendo meno codice e gestendo di più (niente gcc, niente irb, un sacco di dig & whois). svn è ancora lì, ovviamente ;). ssh significa che questi risultati andrebbero aggregati con le history delle altre macchine su cui mi loggo… ma quello è argomento per un altro post ;).

Quali sono i tuoi risultati?

Postali qui! :D

AGGIORNAMENTO 2008-06-03

Dato che le mie abitudini recenti sono più di coding che di scrittura di documentazione, ho rieseguito l’analisi della history… e questi sono i nuovi risultati:

1796 l
981 svn
705 ssh
693 cd
666 ping
402 vi
356 ifconfig
352 telnet
321 dig
315 sudo
283 fg
240 grep
188 ..
183 cat
157 ps

AGGIORNAMENTO 2009-02-20

5427 l
4379 git
3128 svn
2812 vi
2105 cd
1408 ping
1392 fg
1328 ssh
935 ifconfig
893 grep
890 sudo
733 rake
653 cat
554 ..
535 ruby

AGGIORNAMENTO 2009-05-24

7374 l
5041 git
3265 vi
3131 svn
2753 cd
1881 ssh
1763 ping
1618 fg
1101 sudo
1100 ifconfig
977 grep
867 cat
767 rake
721 telnet
671 ..

AGGIORNAMENTO 2010-06-01

20517 git
7794 l
1906 cd
1631 rg
1518 vi
1108 rake
1041 cat
1010 ruby
790 sudo
754 fg
676 make
670 script/console
626 rm
496 ping
474 ..

AGGIORNAMENTO 2012-07-23

3367 l
2685 ssh
1289 cd
1013 curl
976 git
857 sudo
815 ping
526 telnet
521 ps
497 cat
472 port
422 fg
400 vi
274 rm
259 dig
📜

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

🔍
Retrospettiva 2026
LightWindow è morto da un pezzo – era una libreria modale dell’era Prototype.js, scomparsa intorno al 2010. Se oggi ti servono le modali, l’elemento HTML <dialog> fa tutto nativamente.

Ecco, questo è il risultato di 2 giorni di testate contro il muro con lightwindow:

Index: public/javascripts/lightwindow.js, line 444

  _removeLink : function(removed) {
    // remove it from the links array
    //
    this.links = this.links.reject(function(link) {
      if (link == removed.href)
        return true;
    });
    // remove it from the gallery links array
    //
    if (gallery = this._getGalleryInfo(removed.rel)) {
      klass = gallery[0];
      name = gallery[1];
      if (this.galleries[klass] && this.galleries[klass][name]) {
        this.galleries[klass][name] = 
          this.galleries[klass][name].reject(function(link) {
            if (link == removed.href)
              return true;
          });
      }
    }
  },

Chiama questa funzione dal tuo template .rjs, qualcosa tipo:

page << "myLightWindow._removeLink($('element').down('a.lightwindow'));"

Più dettagli a seguire, quando questo lavoro sarà completo ;).

Sappiamo ancora farlo

Beh, a quanto pare non ho motivo di essere paranoico per la mia età: so ancora andare in inline come facevo (ogni giorno) quando ero un po’ più giovane :).

Il primo maggio, festa dei lavoratori, Sam mi ha letteralmente trascinato fuori di casa, lontano dal computer, e siamo andati a pattinare. È stata una giornata fantastica, abbiamo pattinato un sacco e scattato delle belle foto.

Ma quelle davvero belle sono state scattate quando ndstr ci ha beccati. È di gran lunga il miglior fotografo che tu possa incontrare, e ovviamente il mio preferito (dai un’occhiata al suo sito!).

Anche lui è stato un pattinatore, quindi sa benissimo come e quando scattare per tirare fuori il massimo dai tuoi trick :). Eccone due, che ritraggono me e Sam mentre diamo il meglio!

Foto di skating

È stato divertente. Davvero divertente. Grazie Sam per avermi portato fuori di casa :D.

Oh, e non dimenticare di visitare il mio deviantArt, e guarda questa qui :D


In questa pagina