Feeds:
Posts
Comments

Archive for the ‘Virtual world’ Category

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 »

Netduino + Ethernet shield

Netduino + Ethernet shield

Due righe come scusa per pubblicare la foto qui sopra: sto lavorando su una sorta di porting del porting dell’interfaccia Erlang – Java per C# sul .NET Micro Framework, ed in particolare sul Netduino che posseggo; lungo la strada, sto anche debuggando il driver per l’Ethernet shield (questo perchè non ho comprato il Netduino Plus a suo tempo, grave errore)… vi farò sapere!

Read Full Post »

If, someday, your Intel-equipped computer should stop having OpenGL working in the X session, it may be due to the (completely useless) installation of NVidia/ATI drivers… so, open a shell and type in as follows:

sudo apt-get purge nvidia*
sudo apt-get purge fglrx*
sudo apt-get install –reinstall xserver-xorg-video-intel libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
sudo dpkg-reconfigure xserver-xorg
sudo update-alternatives –remove gl_conf /usr/lib/nvidia-current/ld.so.conf

Read Full Post »

Arduino + Ethernet Shield

Arduino + Ethernet Shield

Some context

So, as I was here today with some residual traces of flu and a cold, I watched a certain (undisclosed) quantity of episodes of TBBT (yeah, yeah, I know, just a couple years later than all the others), and all of a sudden I thought of a very nerdy way of solving a little problem I had here (an idea somewhat similar to this one, at least from a certain point of view).

The problem was the following: I have an Asus Eeebox (one of the first models) that is being used with XBMC as a HTPC, of course without a mouse or a keyboard; I have a little infrared remote for navigating through the menus and stuff. Now, the problem comes when one wants to write something, for example in the search box of the Youtube plugin: neither the smartphone remote controller for XBMC nor the Web page supported those interfaces (at least in pre-11 version of the application), so the only way (besides connecting a keyboard, which I don’t want to use because I don’t want to leave it there hanging around) was to navigate between each key of a virtual keyboard that pops up when going into any search field, using navigation keys or a little surface of the remote control that simulates a mouse. Neither a good solution, would you agree.

A few months back I played with the possibility of changing the firmware of the USB part of the Arduino Uno models, and as I had an Ethernet Shield lying there, along with the Uno already with the resistor in place for placing it in DFU mode, and I had the idea that I could use the Arduino as a remote keyboard… ready for the journey?

The journey

So, the first thing has been to search if someone already modified the LUFA project for allowing an Arduino board to be recognized as a generic keyboard… and (of course) it turned out someone already did it. I downloaded the code from that Web page, installed it and tried the examples: they just work™.

Next move: I put together some code for allowing the Arduino to act as a Web server, showing just a single page with a little form with a text line; each string insterted there is then sent back from the browser to the server, which gets the parameter and sends it through the serial port, using the protocol developed for the keyboard firmware linked above. With this, if the Arduino is connected to a local network and to a computer (through USB), it receives characters from the Web and sends them to the computer as they were typed into a (USB) keyboard. The only difficulty here was that the current binary version of the Arduino IDE seems not to work at all with DHCP, I don’t know for what reason (maybe some voodoo compatibility with my avr compiler), but the git version works just fine (for me, at least).

And, dulcis in fundo: using the Web page was fine, but of course I want to send commands from my Android smartphone, so I wrote some other code packed in a tiny Android application showing basically the same form and directly sending POST requests to the Web server. The entire application does not perform very accurate controls over inputs, it’s a little project in the end and it is supposedly used in a local network (your house’s), where no one should want to crash your Arduino…

Final thoughts

Next week I will get a little enclosure for the Arduino pictured at the beginning of this post; the sketch does not support all possible keybaord symbols, just letters, numbers and a couple of useful punctuation marks, because I think I will just use it for doing searches where I should not need strange things. I also want to add: screw the Eclipse update system, it never works.

As a side note, the Eeebox does not shut down the USB ports when shutted down, so the Arduino remains on and connected even if the computer is not running.

I also took the opportunity to put together some little projects I had on Github in one single repository instead of n repositories: it seems to make more sense.

Read Full Post »

This slideshow requires JavaScript.

Se non avete mai giocato a Dear Esther prima d’ora, vi consiglio di provarlo: non vi porterà via più di un paio d’ore, ma è veramente carino. Lo definiscono experimental fps, diciamo che è una sorta di avventura grafica ma senza interattività, è più una passeggiata all’interno di quel mondo, mentre vi viene raccontata una storia.

E’ nato come mod di Half Life 2, ma è stato successivamente ripubblicato come gioco a sè stante e lo potete trovare su Steam. Qui sopra riporto un po’ di screenshot presi durante il gioco…

Read Full Post »

Qualche giorno fa Repubblica titolava del boom della musica legale su Internet, e conseguente calo della pirateria, anche nel mercato italiano, essenzialmente grazie alla presenza di nuove offerte per gli utenti. E’ un’ovvietà, come noi sosteniamo da anni: nel momento in cui l’ascoltatore ha dei modi decenti e moderni per acquistare i brani dei propri artisti preferiti, li utilizzerà; ed ecco quindi l’impiego del digitale, i negozi online, l’acquisto della singola canzone, le offerte, ora anche la musica nella cloud e la possibilità di ascoltarla ovunque e da qualunque dispositivo.

Scrivo questo perchè in questi giorni, sarà un momento particolarmente sfortunato, continuo a cercare tablature su Internet e ad imbattermi in annunci di chiusura, ritiro della “merce” dal sito et al. per problemi legali etc etc etc. Ora, la questione qui non è che le case discografiche non vogliano che la gente sappia che note suonano i loro artisti, ma suppongo l’idea sia di acquistare i loro libri cartacei con le suddette note.

Ora, torniamo all’esempio di prima: vi sembra un quaderno cartaceo un metodo moderno di “scoperta” dei “segreti” di un brano? Probabilmente un libro del genere costa più del CD originario e non conterrà mai le tracce di tutti gli strumenti, per non parlare del fatto che quasi nessuno vende le basi delle proprie canzoni (così da permettere a gente come il sottoscritto di poter provare un brano assieme alla sua base); io non credo che manchi il mercato, manca la volontà di andare incontro al mercato. Ed allora un appassionato in giro per il mondo si sbatte notevolmente per trascrivere un brano (mi è capitato di farlo e volano via le ore), lo pubblica sul Web e magari riceve valutazioni positive dagli altri utenti, per poi vedere quella tablatura eliminata senza un motivo valido e decente (posso capire la pirateria, ma qui…).

Se una casa discografica mi permettesse di spendere qualcosina e di acquistare l’archivio ufficiale con i files di Guitar Pro (tanto per dirne uno) di tutte le canzoni di un CD, con tutte le tracce trascritte in modo decente, io sarei anche disposto a spendere; invece questa possibilità non mi viene data, ed allora devo rivolgermi al Web ed ai files preparati da altri, a volte precisi a volte meno precisi, e ritrovarmi di fronte a questi messaggi (stupefacenti? anacronistici?).

Read Full Post »

Carambola

Carambola

Habemus Carambola! Non ho ancora avuto tempo di metterci le mani dentro (salvo un boot di test), ma intanto è lì. Ricordo le specifiche:

  • processore MIPS @ 320 MHz (Ralink RT3050)
  • 32 MB RAM
  • 8 MB flash
  • 2 porte Ethernet
  • Wifi
  • 20 GPIO
  • USB host

Read Full Post »

« Newer Posts - Older Posts »