Feeds:
Posts
Comments

Edit: too much rush, looks like the code may need a slight addition, I will update it later…

So, after Martin Odersky’s lesson and its example of phone mnemonics (inspired by this article), I spent a little time and wrote an implementation in Erlang.

It may not be the best one, but it seems to work; you can find it here, for using it you need to fill in the WORDS constant with the strings which you can translate from numbers and call the translate method passing a number as string (i.e., mnemonics:translate(“5828”)).

The code follows the solution provided by Martin in his slides, maybe the code could be even more compact by using a different workflow, but I’m not sure.

Kindle & slides

Slides on Kindle

Slides on Kindle

Non avevo mai provato a visualizzare slides sul Kindle, e devo ammettere che il risultato non è affatto malvagio.

Se si tratta di leggere un articolo in pdf, infatti, il dispositivo è assolutamente inadatto, richiedendo continui zoom e spostamenti con un refresh dello schermo piuttosto lento (adatto se state sfogliando un libro, ma solo in quel caso); con un pdf di slides, invece, in modalità landscape è piuttosto comodo, almeno con un paio di presentazioni che sto seguendo in questi giorni (ed un esempio è quello mostrato nello screenshot qui sopra). Potrebbe non essere eccezionale con presentazioni molto fitte di testo, formule et al. (e bisogna ricordarsi che il tutto è in bianco e nero), ma se qualcuno è interessato a seguire una lezione o a studiare su un set di slides (idea discutibile, ma questa è un’altra storia), senza dover avere un computer sempre acceso (e senza avere un tablet), allora direi che il Kindle potrebbe essere abbastanza adatto.

Fuzz Face Silicon

This slideshow requires JavaScript.

Oggi ho finalmente dato gli ultimi ritocchi al nuovo pedale – effetto per chitarra: un Fuzz Face con transistor al silicio DIY!

Qualche mese fa, durante un periodo di esplorazione elettronica, ho infatti scoperto questo sito: vendono diversi componenti per costruire effetti per chitarra, e nel caso non si abbiano idee in proprio, si possono comprare kit già pronti. In particolare, quello in questione si trova qui. L’ho ordinato a suo tempo, facendo l’errore (se di errore si può parlare) di comprare l’enclosure intatta, con i buchi da fare; questo ha comportato il fatto che il circuito sia stato saldato qualcosa come quattro mesi fa, ma ho potuto provarlo solo ieri sera. Per una serie di vicende sparse, infatti, solo questa settimana ho fatto preparare i buchi per le manopole, gli ingressi e le uscite (thanks dad!), e ieri pomeriggio ho saldato l’insieme e tra ieri ed oggi ho provato qualche settaggio.

Premetto che io sono un amante di questo effetto, che è giusto il passettino successivo rispetto all’overdrive, che in generale è il mio effetto preferito (assieme al riverbero, tanto per dare a Cesare quel che è di Cesare); ora, per quanto riguarda il pedale in questione, già il fatto che funzioni è un piccolo successo; il suono non è male (anche se quando si parla di Fuzz tutti noi abbiamo in mente Gilmour, che sfodera il suono perfetto che una chitarra elettrica possa mai avere), anche se sto ancora cercando un’impostazione ottimale per il trimmer interno (che si regola a mano e non tramite manopola). Settimana prossima avrò la possibilità di provarlo sulla Fender (qui a casa ho infatti la Danelectro), e per allora registrerò un campione sonoro.

Unico difetto, se vogliamo: la scatola consigliata è veramente piccola; per dire, non ho montato la clip per la pila da 9V, dato che secondo me non ci sarebbe mai stata al suo interno. D’altro canto, senza pila utilizzo un alimentatore, con il quale ho dei problemi di ground loop ancora irrisolti (e che mi sfugge da dove saltino fuori, peraltro, ma questa è un’altra storia).

Ebbene sì: il titolo che vedete non è per nulla inventato. Ma andiamo con ordine.

Esiste un sistema operativo: TinyOS. E’ pensato per reti di sensori, le quali sono costituite da devices che si interfacciano con i computer tramite porta seriale (travestita da USB, ma poco importa in questo contesto). Di conseguenza, tale OS viene distribuito con un set di librerie in alcuni linguaggi per leggere e deserializzare il più comodamente possibile i messaggi trattati all’interno del sistema stesso, così da poter ricevere i dati ed elaborarli in qualche modo. La struttura standard di una WSN, infatti, prevede che uno dei devices funga da sink e riceva le comunicazioni dell’intera rete, per poi trasferire queste informazioni in un computer (che le salverà in qualche formato). I linguaggi di questo piccolo SDK sono C, C++, Java e Python.

Per poter interfacciare un device di una WSN con un computer a bassa potenza come una Carambola, è necessario utilizzare le versioni C o C++, dato che sia Python che Java non sono tendenzialmente supportati su quel tipo di schede. Ora, mentre sfogliate i sorgenti che leggono le porte seriali, potreste imbattervi nella seguente riga:

#include “../../java/net/tinyos/packet/BaudRate.java”

Tah-da! Un file sorgente C include un file Java al suo interno! Vi lascio qualche momento per rabbrividire adeguatamente della cosa…

Ok, l’idea di fondo è la seguente: esiste una lista riempita in un file Java strutturata come segue:

package net.tinyos.packet;

class BaudRate {
static void init() throws Exception {
Platform.add(Platform.x, “mica”, 19200);
Platform.add(Platform.x, “mica2”, 57600);

}
}

Il problema è che tale lista è necessaria anche nella versione C (che deduco essere arrivata dopo quella Java), e anzichè replicare le informazioni, gli sviluppatori hanno deciso di includere il file Java dentro quello C.

La sintassi è adeguatamente simile, e per far funzionare il giochino (come spiegano alcuni commenti del file C) è necessario:

  1. definire alcune define (perdonate il gioco di parole), affinchè la dichiarazione di package, di classe e di metodo non interferiscano in alcun modo con il codice C; tali definizioni si trovano in fondo al file C, dato che (mi è stato fatto notare) probabilmente scrivere qualcosa come “#define void” e ridefinire parole chiave che esistono in C creerebbe troppi problemi in altri punti del codice (ma non sono certo di questo)
  2. definire alcune struct con puntatori a tipi e funzioni, così che le chiamate del tipo “Platform.add” vengano interpretate correttamente e, come conseguenza, la variabile “args” alla fine contenga esattamente il secondo e terzo parametro della linea corretta tra le varie “add” (il secondo parametro è riempito dai sorgenti, tutto questo sistema serve per fare una sorta di lookup tra le linee “add” e ricavare il numero che indica il baudrate da utilizzare nella comunicazione con la seriale).

Chiaro, no? Non sono sicuro di riuscire a scendere ulteriormente nel dettaglio delle struct stesse, dato che sono un tantino convolute ed io non scrivo codice C da un po’, ma sono certo che un’occhiata ai sorgenti permetterà ai nerdoni tra voi di capire al volo come funziona il meccanismo!

This slideshow requires JavaScript.

Farò un post rapido e senza estratti di codice, dato che al momento tutta l’applicazione è un po’ messy: questo weekend ho installato una piccola Wireless Sensor Network a casa, così da avere (finalmente!) una misurazione delle temperature presenti sul soppalco e nel soggiorno del posto dove abito, ed allo stesso tempo per testare il software che stiamo per usare in un’installazione per un progetto che sto seguendo in università.

Il giro software ammetto che è lievemente complicato, e sarebbe stato più semplice usare un servizio tipo Cosm per risolverlo in parte, ma dove sarebbe il divertimento? I due nodi della WSN che fungono da sensori rilevano una volta al minuto la temperatura e l’umidità dell’ambiente dove si trovano, utilizzando un piccolo programma TinyOS che utilizza un protocollo di disseminazione sviluppato da alcuni colleghi; un terzo nodo funge da sink e riceve i dati dai primi due, ed è collegato alla porta USB di una Carambola; un secondo programma viene eseguito in quest’ultima, appoggiandosi ad una libreria C già presente in TinyOS, e da un lato riceve i messaggi e li inoltra al server che raccoglie i dati, dall’altro lato permette di modificare alcuni parametri dell’applicazione situata nei sensori.

Il server è un free tier su Amazon, ed un terzo programma, scritto in Erlang, riceve i messaggi tramite la rete, li deserializza (operazione estremamente semplice data la bit syntax del linguaggio) e li salva in un database Mnesia; un Web server poi pubblica tali dati tramite JSON verso una pagina Web estremamente semplice (presente in una delle figure), scritta utilizzando Highcharts, la quale mostra i grafici (con tanto di possibilità di zoom e cose simili).

Tutto questo ha permesso di sperimentare tutta una serie di tecnologie, dall’applicazione TinyOS (che riutilizzeremo altrove) alla libreria C, dalla bit syntax in un contesto reale all’utilizzo di Mnesia come database; ammetto inizialmente di aver pensato ad un NoSQL serio, mentre Mnesia è più una sorta di via di mezzo tra SQL e NoSQL, nel senso che non supporta questo linguaggio ma allo stesso tempo richiede uno schema dei dati (a differenza di altri tipo CouchDB).

La parte messy sta in realtà nell’applicazione Erlang, che è mescolata con una versione precedente che avevo usato accoppiata con un Arduino per raccogliere dati da un accelerometro; tra l’altro, ho anche sperimentato la generazione (semi-)automatica di releases di un programma con Erlang, e l’installazione a caldo degli aggiornamenti: spettacolare!

Mac: una recensione

Due premesse sono necessarie a questa review: la prima è che sono lievemente biased dal fatto che l’hardware che ho nel Mac è il più potente tra i miei computer, quindi per alcune cose probabilmente quoto questo computer più di quanto valga veramente (rispetto ad un PC equivalente); la seconda è che l’esperienza d’uso non è e non può essere generica, ma deve per forza essere legata a quanto faccio nel mio dottorato (dettagli a seguire).

Ormai da alcuni mesi sono utilizzatore full-time (cioè almeno 5 giorni a settimana) di un MacBook Pro 15″ i7 cazzi e mazzi, che è capitato più o meno per caso nel mio ufficio e che sto quindi usando principalmente per lavoro. Ora, essendo io hard-core Linux, si potrebbe supporre che ci abbia installato subito una distribuzione a caso e non abbia fatto altro che riconfigurare il tutto con l’amato pinguino. Ebbene, la risposta è: no (e so che a qualcuno piange il cuore per questo…). Sinceramente, era diverso tempo che volevo testare Mac OS X, e quale migliore occasione di usarlo sul serio in un contesto lavorativo, per verificarne pregi e difetti rispetto a Linux ed a Windows… quello che segue è un resoconto di quest’esperienza (non in ordine temporale, non ho preso appunti in merito).

L’hardware

Devo per forza spendere due righe per dire che questo Mac è il mio computer più potente, come anticipato: ha un i7 4 core (8 con la virtualizzazione/hyper threading/whatever) ed una Nvidia come scheda video; l’hard disk è normale (non SSD, purtroppo) con 750 GB di spazio, in sostanza veramente un saaaacco di spazio (non sto cancellando praticamente nulla da 4 mesi…). Lo schermo va a 1680×1050, una discreta esagerazione dato che la prima manovra che ho fatto è stata aumentare la dimensione dei caratteri; per questo, nota a margine, trovo piuttosto inutile che i nuovi Mac abbiano risoluzioni assurde: se siete fotografi probabilmente vi piaceranno tanto, per qualunque altro uso non servono assolutamente a niente.

L’hardware, in sostanza, mi piace come potenza: poter lanciare make -j 8 ha il suo fascino, così come giocare a Urban Terror a 1680×1050 (inutile, ovviamente, su un motore grafico che ha 14 anni); il primo The Witcher gira ovviamente meglio qui che sul mio Dell, ma questo era prevedibile.

Agigungo, infine, che il touchpad di questo computer è semplicemente perfetto: mi scoccia un po’ il modo di fare click destro, che ogni tanto non mi riesce al primo colpo, ma per il resto è assolutamente ottimo e dopo un po’ che si utilizzano le gesture, vi verrà da farle anche sul vostro PC; lo scrolling “al contrario” di Mac OS X Lion è, per quanto mi riguarda, decisamente più intuitivo di quello standard (nota che criticavo da fuori, ma fino a che non lo provi non lo puoi giudicare), tant’è che dopo una giornata di utilizzo ho convertito a questa modalità tutti i miei PC. Forse questo scrolling è lievemente strano in un mouse esterno con la rotellina, ma se mi sono abituato così bene e così facilmente, pur dopo tanti anni di utilizzo dell’altra modalità, mi vien da dire che forse gli ingegneri di Apple avevano ragione (almeno in questo caso).

La batteria mi delude: non credo vada oltre le due ore e mezzo circa, che è quanto mi dura sul Dell con Linux, e sinceramente speravo in molto di più; in compenso, il Mac ha la ripresa dalla sospensione più rapida che la storia ricordi, e questo non è affatto male (vero, Linux?).

Il software

La summa, che anticipo subito, è che se Windows è praticamente inutilizzabile da informatico (a meno che non sviluppiate solo ed esclusivamente per Windows stesso, leggi: .NET), e Linux è invece perfetto da informatico, visto che avete il pieno controllo del mezzo, Mac OS X è esattamente la via di mezzo: è uno unix, quindi le cose che contano funzionano (i.e., killall), se volete fare operazioni “domestiche” non dovete fare salti mortali carpiati (ad esempio, guardare rai.tv, usare il microfono integrato senza impazzire con pulseaudio), se invece dovete lavorare a livello “più basso”, diventa un inferno.

Ma andiamo con ordine: le operazioni “domestiche”, quindi dal semplice browsing (ovviamente dopo aver installato un browser serio(TM)) all’ascolto di musica, alla visualizzazione di documenti et similia, funzionano direi in modo seamless, con le applicazioni correttamente integrate tra loro e con tutto l’insieme discretamente curato; i programmi che contano qualcosa in questo scenario funzionano out-of-the-box (vedi Skype, con webcam, microfono etc). Ciò che spesso mi lascia interdetto sono alcune piccole rifiniture, che trovo piuttosto silly:

  • non c’è taglia ma solo copia, se volete muovere le cose dovete trascinarle di cartella in cartella, con ogni tanto Finder che decide di aprire una nuova finestra senza motivo
  • Finder non ha i tab (!!!), come si possa oggi come oggi pensare ad un programma senza tab, francamente non lo capisco (perfino Filezilla ha i tab, e non dico altro…)
  • iTunes decide di ordinare le cartelle come vuole lui e non come voglio io, ad esempio creando 12 cartelle diverse per lo stesso album, se ci sono collaborazioni tra l’artista principale ed altri secondari (come in Thriller); forse c’è un’opzione per impedirglielo, ma vabbè… preferisco un approccio alla Amarok sinceramente
  • lo scroll non funziona in vim/less nella shell, o meglio lo scroll “scrolla” la finestra della shell e non il documento che avete aperto ad esempio in vim; non esistono il tasto pagsu, paggiù, inizio e fine riga, che rendono un incubo il navigare nella shell stessa (salvo usare combinazioni strambe, tipo ctrl+f per simulare paggiù)
  • il f***uto tasto Cmd: non ha alcun senso usare quello invece di Ctrl, come fanno tutti gli altri, ed oltretutto è in una posizione diversa, dove in genere nelle tastiere normali c’è Alt; morale: ogni volta che usate un PC, tenterete una scorciatoia con Cmd + qualcosa, che inevitabilmente diverrà Alt + qualcosa, e farà tutt’altro
  • se installate X (essenziale per cose come Matlab, Inkscape, Gimp), le scorciatoie tornano normali. Questo vuol dire che in una finestra dovete usare Ctrl, in un’altra Cmd, a seconda dell’applicazione del momento
  • sento parecchio la mancanza del solo tastiera di Linux: in Linux, infatti, riesco a fare tutto da tastiera; qui ogni tanto bisogna andare al mouse piuttosto che al touchpad, il che è chiaramente scomodo; ammetto di non conoscere tutte le scorciatoie da tastiera, ma temo avrebbero il solito Cmd di mezzo (sì lo so, questo punto sa più di scusa, eh purtroppo…)
  • esiste questo fantomatico inglese internazionale, che decide di accoppiare gli apostrofi con le vocali che seguono e transformarvele in accenti (se avete una tastiera non italiana), questo più o meno in tutte le applicazioni, e l’unico modo di disattivarlo (grazie Domenico!) pare sia passare ad inglese uk (o usa), dato che questa sostituzione automatica di fatto rende inusabile il computer (forse viene eseguita anche nella shell, ma dovrei controllare per esserne certo, e nel caso sarebbe veramente un’assurdità d’altri tempi, come se qualcuno dovesse scrivere accenti nella shell)
  • Office ha una versione a parte, quindi la mia licenza originale di Office Student edition è carta straccia.

Le cose serie

Quando poi si deve lavorare, iniziano le bestemmie: io per il mio lavoro ho bisogno di cross-compilare parecchio, per installare varie e variegate micro-distribuzioni di sistemi operativi su dispositivi “piccoli” (OpenWRT, piuttosto che TinyOS); nel fare questo, Mac OS X sembra quasi andare contro la sua natura di unix e complica immensamente le cose.

Tanto per cominciare, la struttura delle directory lascia il tempo che trova, e fa sì che trovare ad esempio la directory di installazione di Java non sia affatto banale (e vi serve per compilare librerie con JNI); come se non bastasse, il fatto che il sistema operativo sia a 64 bit non è così chiaro come sembra (emblematico che uname -p ritorni i386…), e spesso alcune cose vengono riconosciute con il numero sbagliato di bit quando le compilate… ah, 32 bit in Mac si chiamano universal, non 32 bit.

Progetti come MacPorts o altri (che non ho mai usato) permettono di compilarvi il solito software di cui avete bisogno, mettendolo in una cartella a parte nel sistema ed automatizzando un po’ parte del lavoro; quando però vi scaricate OpenWRT ed iniziate la compilazione della toolchain, emergono tutta una serie di complicazioni più o meno insulse: alcuni Makefile non trovano le librerie di base, perchè per qualche oscuro motivo non includono /usr/include, o in altri casi non includono la directory giusta di MacPorts, o si basano su uname per capire in che sistema si trovano, e come detto alcune opzioni falliscono… per non parlare di quando alcuni software si compilano a 32 bit ma non a 64 (o viceversa), e lì è necessario reinstallare alcune dipendenze nella versione giusta.

Ogni tanto scoprite che il gcc installato da MacPorts non compila certe cose, e dovete usare quello installato da XCode, o viceversa, e naturalmente il messaggio di errore che ottenete in compilazione è più o meno random e di certo non vi spiega cosa ci sia che non va realmente.

TinyOS, per fare un ultimo esempio, non va proprio: la versione ultima di nesc è esplicitamente riconosciuta come non compatibile con il Mac, quindi bisogna andare di macchina virtuale.

Tirando le somme

Al momento non mi vengono in mente altri esempi da fare, perciò tirerò le somme: al momento sono ancora con Mac OS X in questo computer (anche se un paio di volte sono stato molto vicino a mettere Linux (ovviamente ripartizionare è un incubo, e per farlo avete bisogno di un disco con Windows, e non dico altro…)), e dopo essermi abituato a quasi tutte le sue idiosincrasie, penso lo lascerò (ma potrebbe succedere qualcosa ad agosto… non ho ancora deciso del tutto…); se ad oggi dovessi comprarmi un computer mio (quindi non pagato da terzi), comprerei un PC e metterei Linux, per me non credo prenderei un Mac: mi mancano la libertà totale di installare cose dove dico io e come dico io, mentre apprezzo la possibilità di usare facilmente altre cose senza dover cercare configurazioni esoteriche, ma il primo aspetto batte il secondo nel guidare un’eventuale scelta.

Per quanto riguarda il futuro, sono livemente preoccupato dal fatto che Apple cerchi di avvicinare sempre di più Mac OS X ad iOS: temo che se la gabbia dorata del Mac cominci ad assomigliare a quella di iOS, bisognerà abbandonare la nave, e con una certa rapidità…

Alan Turing plaque

Mi prendo la briga (e di certo il gusto) di scrivere due righe su quello che penso della musica rockettara dei decenni passati, ispirato da due chiacchiere fatte via chat col buon Ale. Se non siete d’accordo, eh purtroppo… commenti antipatici verranno censurati senza preavviso (se volete la libertà d’opinione, non cercatela su questo blog!) 😉

Ora, non è che a me non piaccia la musica degli anni ’80, o che non ascolti metal o rock di quel decennio (vedi Metallica o Bryan Adams, per citare un esponente di ciascuno dei due generi); semplicemente, gli anni ’70 erano un altro mondo, la chitarra elettrica era un altro mondo, gli effetti erano un altro mondo. Devo premettere che sono un convinto worshipper dell’overdrive invece della distorsione, e che per quanto mi riguarda il primo effetto accoppiato ad un riverbero è tutto ciò di cui c’è bisogno per fare un adeguato casino; la distorsione spinta di un gruppo heavy metal è semplicemente troppo: certo, di tanto in tanto si sente il bisogno di spararsi violenza gratuita nelle orecchie (io in genere festeggio la scrittura di buon codice con Eruption, e le incazzature con St. Anger), ma la classe con cui i chitarristi degli anni ’70 trattavano il proprio strumento e le note che ne cavavano, è tutta un’altra cosa.

Altrimenti, come si spiega il fatto che dagli anni ’80 in poi gli assoli live sono assolutamente identici a quelli fatti in studio? Identici nota per nota… un Jimmy Page o un Ritchie Blackmore non hanno mai fatto due assoli uguali in tutta la loro carriera, e solo così puoi prendere un Dazed & confused da 6:26 minuti e tirarne fuori un’esibizione da 27:59 minuti (live in The song remains the same), o prendere uno Space Truckin’ da 4:33 minuti e transformarla in 19:54 minuti (live in Made in Japan) – ovviamente devi avere una band adeguata che ti supporta, il chitarrista non è tutto in una canzone di mezz’ora.

Per non parlare dei virtuosi metallari che ci sono in giro: certo, anch’io ascolto qualche canzone di Malmsteen, ma sinceramente dopo qualche minuto un po’ la voglia ti passa, dato che per il 90% delle canzoni ti mostra quanto è bravo a correre su e giù per la tastiera della sua Fender (e tanto di cappello, intendiamoci), ma vogliamo mettere con un Child in time, che ti mostra quanto tu possa comunque fare un assolo veloce ma significativo? Per non parlare di quest’assolo, assolutamente improvvisato (pur sulla base della versione studio), e che per quanto mi riguarda ad oggi è il miglior assolo che io abbia mai sentito (con il miglior suono che io abbia mai sentito)…

P.S.: non so se definire quasi poetico il fatto che questo post sia scritto mentre ascolto Enya…

P.P.S.: in questo post ignoro il punk, perchè pur essendo fenomeno pre-anni 80, sopprime del tutto gli assoli di chitarra, e per quanto mi riguarda una canzone senza un’assolo di chitarra è come una scopata senza l’orgasmo.

La crisi è la più grande benedizione per le persone e le nazioni, perché la crisi porta progressi. La creatività nasce dall’angoscia come il giorno nasce dalla notte oscura. E’ nella crisi che sorge l’inventiva, le scoperte e le grandi strategie. Chi supera la crisi supera sé stesso senza essere ‘superato’. Chi attribuisce alla crisi i suoi fallimenti e difficoltà, violenta il suo stesso talento e dà più valore ai problemi che alle soluzioni. La vera crisi, è la crisi dell’incompetenza. L’ inconveniente delle persone e delle nazioni è la pigrizia nel cercare soluzioni e vie di uscita. Senza crisi non ci sono sfide, senza sfide la vita è una routine, una lenta agonia. Senza crisi non c’è merito. E’ nella crisi che emerge il meglio di ognuno, perché senza crisi tutti i venti sono solo lievi brezze. Parlare di crisi significa incrementarla, e tacere nella crisi è esaltare il conformismo. Invece, lavoriamo duro. Finiamola una volta per tutte con l’unica crisi pericolosa, che è la tragedia di non voler lottare per superarla.

Leonard Cohen

If it is self-respect that you are looking for in your work, you just keep uncovering your own art until you can find something in which you can locate your self-respect.