sindro.me

feeling bold
on the internet

info 🇬🇧🇮🇹

Quando installi la beta per sviluppatori di Windows 7, dopo il solito ciclo di 3 riavvii, vieni accolto dalla seguente immagine:

The Betta Siamese Fighting Fish

È 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!

au lab pwnz

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]

AGGIORNAMENTO 19-12-2008

au lab pwnz again

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!

Inoltre, nota il nuovo bus: è necessario perché l’effetto AUMatrixReverb aggiunto al canale centrale per migliorare la stereofonia dell’audio in realtà occupa due canali, e quindi si sovrappone a quello successivo (il LFE). Ma applicare l’effetto a un bus non presenta questo effetto collaterale.

Risultato: eccellente 7.1

La fine dell'anonimato online

- 1 min di lettura

Esattamente le parole che mi girano per la testa in questi giorni:

http://www.readwriteweb.com/archives/the_end_of_online_anonymity.php

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

Voi che ne pensate?

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.

Devi semplicemente commentare queste due righe:

<key>LimitLoadToSessionType</key>
<string>Background</string>

E poi o fai

launchctl load /System/Library/LaunchAgents/edu.mit.kerberos.CCacheServer.plist

oppure riavvii il sistema ;).

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!

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:

#!/bin/bash
git lh && git push

salvato come git-lh-push ti risparmia di digitare due comandi quando vuoi fare push :).

Buon divertimento!

Riferimenti:

lo script git-lh su GitHub

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.

Il miglior post che abbia mai scritto

- 1 min di lettura
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.

Cosa dice la tua .bash_history?

- 2 min di lettura

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