Feeds:
Posts
Comments

Archive for the ‘Virtual world’ Category

Nexus 7

Nexus 7

VM

VM

As you know, for my Ph.D. I’m developing a specialized version of Erlang for IoT scenarios, called ELIoT (ErLang for the Internet of Things); we had it running on some known (or less known) devices, such as the Raspberry Pi or the Carambola, and in the last few days I decided it was time for Android to enter the scene.

So I ported the framework forward a couple of minor versions (from Erlang 15B to 15B03.1), and used the existing patches to cross-compile it on Android. The screenshots show it running on my Nexus 7, pinging a Linux VM running on my computer. Unfortunately, for now it has to be run as root, so the next step is to try this SL4A stuff (which was in the original patch set, but as of now it simply crashes, so being root was the easiest way to try everything).

P.S.: don’t worry about the debugging prints on the VM side, they were there simply to check that no strange bytes were passing as messages on the network.

Read Full Post »

This slideshow requires JavaScript.

Read Full Post »

Just a little wrapper around the SPIdev userspace kernel module; it works brilliantly on the Raspberry Pi, but before trying it you need to load the SPI module and chown the devices as follows:

sudo modprobe spi_bcm2708
sudo chown `id -u`.`id -g` /dev/spidev0.*

You can find the code here.

Read Full Post »

This slideshow requires JavaScript.

Piccolo esperimento con il Raspberry Pi (semplice, anche se preludio di qualcosa di più ampio, posto che io trovi il tempo di farlo…): ho collegato uno degli LCD 16×2 che avevo in giro per casa, ed ho eseguito gli esempi mostrati nel tutorial di Ladyada (ed uno sguardo al pinout, naturalmente)… nel complesso direi soddisfacente (è stato necessario più tempo per scaricare un mese di update…).

Read Full Post »

My social network

My social network

Ecco uno snapshot dei collegamenti nella mia rete sociale su Facebook… (la dimensione dei nodi rispecchia l’”in-degree”, quindi il numero di connessioni in ingresso per ciascuna persona)

Read Full Post »

Flow Zone

Flow Zone

Questo è un grafico che ho recuperato dal libro “Gamification by Design” di O’Reilly (link), che rappresenta la “flow zone”, ovvero la zona tra noia ed ansia dove si vorrebbe cercare di mantenere il “player” del proprio gioco (quale che sia) il più a lungo possibile; ora, l’idea è chiara ed intuitiva (e tutti bene o male la conosciamo, almeno inconsciamente), la cosa che mi ha colpito è che il fatto che la zona sottostante sia etichettata come “noia” è piuttosto ovvio, ed è una ragione per cui ad esempio si smette di giocare ad un certo videogioco dopo un po’ di tempo, mentre il fatto che la zona sovrastante sia “ansia” è una cosa a cui non avevo mai pensato, ma è decisamente vera: sempre rimanendo in ambito di videogiochi (quindi puramente ludico), trovo che ad esempio

  • giochi di simulazione in genere mi portano rapidamente dalla flow zone alla boredom area, e quindi smetto di giocare abbastanza presto
  • alcuni sparatutto sono troppo ansiogeni, e questo grafico conferma le mie sensazioni, quindi non riesco a giocarci per più di un paio d’ore di seguito (mi viene in mente “Crysis” in questa definizione)
  • alcuni (pochi) giochi ti mantengono esattamente in quella zona, e quando alzi lo sguardo ti accorgi che sono già le 2 di notte ed avevi iniziato alle 9 di sera; mi vengono in mente i giochi di ruolo o alcuni sparatutto che bilanciano meglio la parte di ansia (“Deus Ex”, anyone?)

Interessante.

Read Full Post »

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.

Read Full Post »

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!

Read Full Post »

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!

Read Full Post »

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à…

Read Full Post »

Older Posts »

Follow

Get every new post delivered to your Inbox.

Join 116 other followers