Home    About me    Publications    Blog    Photo gallery
Some other old good stuff

Fabio Ruini’s blog

Because Italians do it better! What the f**k? Ehm… the blogs, I mean… obviously! :-/

Archivio per Luglio, 2009

Sony MDR-EX500LP (and fake Sennheiser CX300)

Con un po’ di anticipo rispetto ai tempi previsti, mi sono fatto il regalo di compleanno. Anzi, no. Chiamiamolo regalo di ferie, visto che lunedi’ rimpatrio per due settimane che spero siano le piu’ calde della storia (sento davvero il bisogno di asciugare le ossa!) e cosi’ posso tenermi buono qualche altro sfizio da togliermi verso fine agosto. Cosa mi sono regalato. Un rimpiazzo alle mie (presumibilmente farlocche, vista la modica cifra alla quale le avevo comprate da eBay ed il fatto che non concepissero il concetto di basso) Sennheiser CX300 (recentemente rimpiazzate dalle CX-300 II): un paio di spettacolari Sony MDR-EX500LP.

Sony MDR-500LP

La prima impressione e’ ottima. Ottimo isolamento, bassi belli potenti ma non invadenti ed una nitidezza del suono che da tanto non sentivo. E, almeno stando ad alcune recensioni (vedi ad esempio qui e qui), pare che il bello debba ancora arrivare. Diverse persone dicono infatti che la qualita’ di queste cuffie migliori drasticamente dopo alcune ore di utilizzo, per via di alcuni materiali che impiegano un po’ di tempo per “mollarci” (volgarmente tradotto da “loose down”).

L’obiettivo, ora, e’ quello di non farsi investire da macchine/ciclisti/pedoni veloci mentre cammino insonorizzato da quel che succede nel mondo la’ fuori. Coltivando al tempo stesso un po’ di sano autismo. Il che, di questi tempi, non guasta mai

PS: si’, se per caso ve lo stavate chiedendo, sappiate che ho comprato queste cuffie espressamente per poter ascoltare nel migliore dei modi questo sicuro capolavoro.

L’Holy Grail della programmazione C++

Stavo leggendo un nuovo tutorial pubblicato in questi giorni sul forum di Irrlicht. Il titolo, invero un po’ pretenzioso, e’ Smart tutorial. Al suo interno, l’autore mette insieme un po’ di codice che permette di svolgere varie operazioni con l’engine grafico in questione. Si spazia dal salvare un’immagine su file al gestire gli eventi generati dalla GUI, passando per movimenti dei nodi, collision detection, ecc. Tutto bene, tutto bello. Se non che l’autore ha avuto la spregiudicatezza di scrivere la codesta funzione:

void showCaptionVar(std::string txt)
{
std::string gio1=txt;
char gio2[512];
strcpy_s(gio2, gio1.c_str());
core::stringw gio3 = gio2;
device->setWindowCaption(gio3.c_str());
}

Ed e’ stato prontamente cazziato da tale RandomMesh, che non credendo ai suoi occhi sbotta furioso: Please use a constant reference for heaven’s sake! This will speed things up! A me scappa da ridere. Non tanto per il consiglio che, per quanto estremamente geek e del tutto irrilevante nella maggior parte delle applicazioni reali, ha il suo senso. Passare un parametro ad una funzione per indirizzo invece che per valore, quando si puo’, e’ sempre cosa buona e giusta. Ma la vera chicca e’ il fatto di dichiarare la variabile passata come una costante (con un procedimento spiegato ad esempio a questo link). Quanti milionesimi di secondo all’ora questa terrificante modifica permettera’ di risparmiare? Uno? Nessuno? Centomila? Ai posteri l’ardua sentenza. Nel frattempo mi adeguo e provvedo a modificare tutte le funzioni scritte in vita mia e che avevano l’ardore di non utilizzare la parola chiave const. La quale, a quanto pare, nel 2009 e’ ancora l’Holy Grail della programmazione.

Comic - Leonardo, the Holy Grail and the Da Vinci postcode

Si’, come avrete potuto facilmente intuire da questo post, il mio bisogno di ferie inizia ad assumere contorni quantomeno drammatici…

MAVs 3D evolutionary engine (& updated viewer)

Visto l’inaspettato successo ottenuto dal mio post di lunedi’ scorso, torno alla carica con un altro po’ di software. In questo post potete trovare infatti i link dai quali scaricare sia una versione leggermente piu’ aggiornata del mio viewer, sia l’engine che utilizzo per l’evoluzione dei controllers.

MAVs 3D simulator for evolutionary robotics experiments (screenshot)
(lo screenshot e’ tratto da una versione precedente del software, la quale ancora non prevedeva una separazione tra engine evolutivo e viewer)

Simulatore e visualizzatore possono ora utilizzare un range molto piu’ ampio di architetture neurali, ben 18. La tabella qui sotto (grazie a Quackit per il simpatico on line tool che mi ha permesso di crearla alla svelta senza dover lanciare Dreamweaver) cerca di riepilogare le maggiori differenze tra di esse:

NN architecture Inputs Hidden layer Roll Memory
1 Discrete No No No
2 Continuous No No No
3 Discrete No Bound to yaw No
4 Continuous No Bound to yaw No
5 Discrete No Independent No
6 Continuous No Independent No
7 Discrete Yes Bound to yaw No
8 Continuous Yes Bound to yaw No
9 Discrete Yes Independent No
10 Continuous Yes Independent No
11 Discrete No Bound to yaw Jordan network
12 Continuous No Bound to yaw Jordan network
13 Discrete Yes Bound to yaw Elman network
14 Continuous Yes Bound to yaw Elman network
15 Discrete No Independent Jordan network
16 Continuous No Independent Jordan network
17 Discrete Yes Independent Elman network
18 Continuous Yes Independent Elman network

In questo file PDF le architetture neurali di cui sopra sono riepilogate in maniera grafica. Ma bando alle ciance. Ecco a voi il codice. Duro e puro. E spero anche privo di bug.

Buon divertimento a tutti. O, meglio, in bocca al lupo… ;)

Sempre meno guerra fredda

Peccato. Un altro pezzo di storia che se ne va. Storia recente, per carita’, ma che riportava alla mente tanti ricordi legati alle guerra fredda. L’amministrazione Obama ha deciso infatti di disattivare il billboard elettronico che dalle vetrate dell’ambasciata svizzera a Cuba (gli USA non hanno infatti una vera e propria residenza diplomatica in territorio cubano) trasmetteva alla popolazione locale propaganda a stelle e strisce.

Electronic billboard installed on the windows of the American mission in Cuba

Installato durante la seconda amministrazione Bush, il billboard aveva dato via ad una serie di reciproche punzecchiature che tanto ricordavano i bei vecchi tempi. La dinastia Castro non aveva infatti mai negato di essere profondamente infastidita dall’iniziativa yankee. Ed aveva reagito, seppur nei limiti di quanto le era possibile fare. Dapprima installando una serie di alti pennoni con annesse enormi bandiere nere atte a coprire quanto visualizzato sul display. Poi passando al contrattacco e lanciando una guerra sui muri. Con poster del tenore di quello che potete vedere qui sotto, dove ad essere ritratti in un’ironica pseudo-locandina sono George W. Bush Jr. ed il terrorista Luis Posada Carriles .

Cuban propaganda - poster against Bush: "El asesino"

Che stiamo davvero entrando nell’era del volemose bene che gli obamiani sognavano? O semplicemente di Cuba non gliene puo’ piu’ fregar de meno manco agli americani?

MAVs 3D viewer

Dopo una lunga latitanza in merito, approfitto di questo post per pubblicare un po’ di software scritto dal sottoscritto. Si tratta del visualizzatore 3D che permette di analizzare visivamente il comportamento degli aeroplanini evoluti nelle mie simulazioni. Il task di riferimento e’ per ora molto semplice. Team formati da un certo numero di MAVs devono navigare autonomamente all’interno di un ambiente tridimensionale (sgombro da ostacoli ed abbastanza ampio in termini di dimensioni), approcciare una certa area target (rappresentata in questo caso da una sfera) e, una volta raggiunta, “suicidarsi” esplodendovi all’interno.

mavs-viewer-application-screenshot-1

I controller degli aerei (identici per tutti i membri di un certo team) sono semplici reti neurali embedded il cui funzionamento e’ regolato sia da informazioni locali (raccolte attraverso i sensori dei MAVs), sia da informazioni globali (si ipotizza una sorta di sistema satellitare in grado di comunicare in real-time con gli aeroplanini). Sto ancora testando diverse architetture in maniera tale da capire quale sia la migliore.

mavs-viewer-application-screenshot-3

Detto cio’, qui sotto e’ possibile scaricare i sorgenti necessari per compilare il viewer. Tenete presente che non ho provato a compilarlo su alcuna macchina che non fosse il mio desktop del laboratorio o il mio portatile. Queste, ad ogni modo, le caratteristiche che dovrebbero essere maggiormente rilevanti: Mac OS X 10.5.7, XCode 3.1.3, Qt 4.5.1, Irrlicht 1.4.2, NNFW 1.1.5. Se qualcuno di voi avesse voglia di provare la compilazione su Windows ed eventualmente raccontarmi come e’ riuscito ad ottenerla, di sicuro non mi offenderei (all’interno del pacchetto e’ presente un file .pro di QMake che dovrebbe rendere relativamente agevole il tutto).

MAVs 3D viewer (version A) (src) Downloads: 245 times

Nell’archivio trovate anche una directory chiamata individuals, che contiene al suo interno i files XML relativi a 7 tipi di architetture diverse gia’ evolute (Individual_00.xml e’ legato all’architettura 0, Individual_01.xml all’architettura 1, ecc…). Una rappresentazione grafica delle 7 architetture neurali testate e’ contenuta in questo file.

Per chi fosse curioso, i risultati preliminari del test tra questi controllers sono riassunti nella tabella qui sotto (i valori rappresentati sono calcolati come medie di 10 run da 5,000 generazioni ciascuno).

3d-architectures-for-mavs-comparison

Il viewer crea automaticamente uno script Matlab il quale permette di visualizzare le traiettorie dei singoli MAVs (massimo 4) durante ciascuno dei test effettuati. Funzionalita’ che mi piace un sacco, devo ammetterlo! Nell’immagine qui sotto trovate un esempio, decisamente meglio riuscito rispetto a quello che avevo presentato qualche giorno fa.

flightpath7

Il software non e’ sicuramente immune da bug, imprecisioni, non-ottimizzazioni, ecc. Chiunque volesse spulciare il codice e segnalarmi quelle che e’ riuscito a trovare, ancora una volta, sarebbe il benvenuto.

La dura realta’ del blackjack

Poker e blackjack sono due giochi da casino’. Qualcuno magari obiettera’ su questa definizione. Io in primis. Se infatti classifichiamo i “giochi da casino’” come quelli nei quali e’ il banco ad avere un edge sul giocatore, il poker non rientra nella categoria. Il banco, se vogliamo, vince sempre in quanto si intasca una quota dall’iscrizione dei giocatori ai tornei, oppure una percentuale su ogni piatto per quanto riguarda il cash. Ma i giocatori giocano contro altri giocatori, nei confronti dei quali possono avere o non avere un edge, anche piuttosto significativo. Il blackjack e’ invece un gioco da casino’ in tutto e per tutto. Si gioca contro il banco ed il banco ha un edge rispetto al giocatore. Molto ridotto, ma presente. Questo sembra essere un grosso punto a favore del poker. E probabilmente lo e’. Potremmo poi infine aggiungere che il poker da’ la speranza di sognare. Si indovina il torneo della vita e si fanno i milioni. Nel blackjack no. Occorre trovare il gioco giusto (alias quello battibile), bisogna lavorare sodo ed i risultati che e’ lecito attendersi sono assai modesti. Ma battere un gioco del genere puo’ essere a tratti perfino piu’ stimolante del battere pokeristi umani.

Tutta questa lunga premessa per dire che sto approfondendo lo studio di uno dei libri di blackjack finalmente arrivati da Amazon. Lo sto trovando interessante, seppur non sconvolgente. Il blackjack e’ infatti un gioco semplice. Esiste la basic strategy che, per ciascuna combinazione di carte di partenza proprie e del dealer, suggerisce la mossa statisticamente migliore. Anche giocando alla perfezione, pero’, a lungo andare si perde. Davvero si perde pur giocando in maniera perfetta? Si’, si perde. Se si e’ buoni giocatori, si possono passare tante ore al tavolo da blackjack rimanendo attorno allo stack di partenza. Si possono anche vincere belle cifre in una serata particolarmente fortunata. Ma alla lunga si perde. Quanto? Beh, per saperlo con un po’ piu’ di precisione ho quasi ultimato il mio piccolo simulatore del quale parlavo qualche post fa. Qui sotto un grafico generato dal software stesso che riepiloga l’andamento dello stack del giocatore (1,500$ di partenza) durante 10,000 mani giocate (ciascuna delle quali con puntata fissa di 5$) in accordo alla basic strategy in una situazione tuttavia un po’ particolare (6 mazzi, stand del dealer sul soft 17, niente insurance, niente early o late surrender, penetrazione all’80%, ma soprattutto niente split).

Blackjack (basic strategy with no split allowed)

Dai pochi esperimenti fatti finora si nota che, secondo le regole di cui sopra ed utilizzando un’approssimazione molto rozza della basic strategy (la quale manca dello split, volgarmente sostituito dall’hit), su 10,000 mani giocate e’ lecito aspettarsi di vincerne 4,200/4,300 contro le 4,800/4,900 del dealer. 800/900 sono invece i push. Come puo’ un gioco del genere essere battibile? Semplice: essendo minore il numero di mani che si vincono rispetto a quelle che si perdono, bisogna cercare di estrarre il massimo valore da esse. E per farlo occorre “contare”, capire quando il mazzo ci e’ favorevole (ovvere quando contiene una maggior proporzione di carte alte rispetto a quelle basse) ed in quei casi aumentare, anche in maniera massiccia, l’importo delle proprie puntate. Il gioco diventa pericoloso e per praticarlo occorre avere un ottimo bankroll alle spalle. Ma funziona. Ammesso e non concesso di limitare al massimo i propri errori nel conteggio, nel calcolo delle puntate e nell’applicazione della basic strategy. Qui sotto l’esempio di un run di 10,000 mani, giocate variando le puntate in accordo al conteggio Hi/Lo, particolarmente fortunato.

Blackjack (basic strategy with no split allowed, bets varying according to the Hi/Lo count)

Tutte queste cose, ad ogni modo, fino a ieri sera non le sapevo. Se non vagamente per via di quello che stavo leggiucchiando in giro. E cosi’, in un’escursione al casino in compagnia del buon Joachim, ho giocato un altro po’ a blackjack. E mi sono messo in tasca altri £40, chiudendo cosi’ in attivo la terza sessione sulle tre giocate fino ad ora. Alla faccia della statistica e del lungo termine.

PhD studentships in Robotics at the University of Plymouth

Non so bene dove tutta questa gente verra’ sistemata. Fatto sta che il dubbio lo ci si porra’ piu’ avanti. Nel frattempo condivido con chiunque potesse essere interessato il fatto che il nostro centro di ricerca intra-universitario ha lanciato il bando per assegnare due nuove borse di dottorato nell’ambito del progetto RobotDoc. Qui sotto la presentazione delle due posizioni (che potete trovare anche a questo link).

University of Plymouth logo

Studentship Ph.D. Opportunities
Marie Curie Early-Stage Researchers (Two posts; Fixed-term)
Cognitive Modelling in Developmental Robotics
(RobotDoc)

To start 1st January 2010

Supervised by Professor Angelo Cangelosi
http://www.tech.plym.ac.uk/soc/staff/angelo/
http://www.tech.plym.ac.uk/Research/computer_science_and_informatics/
Centre for Robotics and Neural Systems
School of Computing and Mathematics, University of Plymouth, PL4 8AA
External collaboration with RobotDoc partners in EU, USA, Japan and Taiwan

RobotDoc (Robotics for Development of Cognition) is a multi-national doctoral training network for the interdisciplinary training on developmental cognitive robotics. The PhD students will develop advanced expertise of domain-specific cognitive robotics research skills and of complementary transferrable skills for careers in academia and industry. They will acquire hands-on experience through experiments with the open-source humanoid robot iCub, complemented by other existing robots available in the network’s laboratories.

The two PhD studentships at the University of Plymouth will be in the following topics: (1) The emergence of symbol composition capabilities, and (2) The grounding of abstract categories.

For further information contact Professor Angelo Cangelosi (acangelosi@plymouth.ac.uk). Background information on the supervisors’ research profiles can be found on the University of Plymouth website.

Applicants for the post should have a very good first degree in a computer science, or robotics, or in a cognitive science discipline. Applicants with a relevant Masters degree would be particularly welcome. The scholarship is for 3 years and the candidate will receive an annual salary starting from £19,645 per annum. A mobility, travel and career exploratory allowance will also be available.

The following conditions apply:

Applicants must be nationals of any country other than the UK.

Applicants must not have resided or carried out their main activity (work, studies, etc.) in the UK for longer than 12 months in the 3 years immediately prior to their recruitment.

Early-stage researchers are defined as those who are, at the time of selection, in the first four years (full-time equivalent) of their research careers. This is measured from the date when they obtained the degree which would formally entitle them to embark on a doctorate, either in the country in which the degree was obtained or in the country in which the research training is provided, irrespective of whether or not a doctorate is envisaged.

Applicants should send a CV, a letter of application and contact details of two academic referees to carole.watson@plymouth.ac.uk, Faculty of Science and Technology Research Office, Portland Square, Plymouth, Devon, PL4 8AA.

The closing date for applications is 12 noon on 21st September 2009.

Robotics at the University of Plymouth

Sono finalmente entrato in possesso di un filmato che avevo visto per la prima volta alcune settimane fa durante il famoso meeting congiunto ESA/NASA che si era tenuto qui a Plymouth. Neppure il tempo di finire di copiarlo sul mio computer che il buon Martin gia’ l’aveva caricato su Youtube. A questo punto non posso fare altro che riprenderlo qui dentro.

WIVACE 2009

Arriva, puntuale come sempre, l’edizione 2009 di WIVACE, Workshop Italiano di Vita Artificiale e Computazione Evolutiva. L’organizzazione dell’evento e’ toccata questa volta al Laboratorio per lo studio dei Sistemi Cognitivi Naturali ed Artificiali (i.e., Orazio Miglino e colleghi) della Federico II di Napoli. La conferenza si terra’ dal 23 al 25 novembre, mentre i contributi sono attesi da qui fino al 10 agosto (deadline che presumo/spero sara’ estesa).

logo-wivace-09

La call for papers (della quale trovate sul sito una versione ridotta rispetto a quella circolata via email), potete scaricarla anche a questo link.

Ci si vede laggiu’… :)

Coldplay – LeftRightLeftRightLeft

Arrivo un po’ in ritardo con questa segnalazione, che credo sara’ tuttavia apprezzata dai piu’. Il 15 maggio scorso i Coldplay hanno reso il loro ultimo album, LeftRightLeftRightLeft, completamente e gratuitamente scaricabile da Internet.

Coldplay - LeftRightLeftRightLeft

Per effettuare il download dell’album, e’ sufficiente inserire il proprio indirizzo e-mail a questo link e cliccare sul pulsante per il download che comparira’ subito dopo.

Qui sotto un assaggio del loro lavoro, tratto da YouTube. Buon ascolto.

Pagina Successiva »