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 Settembre, 2007

Maledetta la coppia d’assi

Bicchiere mezzo pieno e mezzo vuoto dopo il mio esordio nella Poker Society dell’Università di Plymouth.

Mezzo pieno se guardiamo al piazzamento finale. Sedicesimo su più di 120 iscritti (ignorato il limite dei 100 iscritti, per quello che gli organizzatori hanno dichiarato essere il torneo più frequentato sin dalla costituzione di questa society), a conti fatti, è un signor risultato. Tanto più lusinghiero se consideriamo il fatto che era la mia prima in un torneo serio (e, per quanto sia una cosa stupida, alle prime mani ero nervoso come mille…), che le carte non giravano neanche a prenderle a mazzate e che non ho fatto nessun errore grave (solo una volta sono caduto in un check/raise di un avversario che mi ha fatto perdere una discreta percentuale delle mie fiches, niente di più…). Sono stato sempre all’inseguimento, sempre con l’acqua alla gola, ma per fortuna poi il punto mi arrivava in mano poco prima di affogare, dandomi una dose extra di ossigeno.

Pair of aces

Bicchiere mezzo vuoto perchè alla fine sono sopravvissuto fino al secondo break, dopo quasi quattro ore di gioco. Poi, al ritorno al tavolo, mi trovo serviti asso e re di cuori. Serie di puntate forti prima del flop e quindi decido di chiamare l’all-in. Circa 16000 chips, contro le 2000 di partenza. In tre, a sopresa, rispondono presente. Solo uno di questi ha più chips di me. Si girano le carte e mi trovo davanti, nell’ordine: coppia di 10, jack e donna di cuori, coppia d’assi. Ahia. Tra l’altro, l’American Airlines è proprio nelle mani del chip leader. La prima carta del flop, però, è un re. Si riaccendono le speranze. Presto sopite, però, perchè le altre carte girate sono tutte insignificatamente basse.

E così, tra strette di mano e pacche sulle spalle, e soprattutto con un po’ di bestemmie tirate tra i denti, me ne torno verso casa. Senza Wii. Peccato. Se avessi imbroccato quella mano, non voglio dire che avrei vinto il torneo, ma di sicuro mi sarei trovato ad essere di gran lunga il chip leader assoluto del momento. Molto probabilmente sarei arrivato al tavolo finale (bastavano altre due/tre defezioni), lasciando semplicemente morire gli avversari di bui e controbui (che avevano ormai raggiunto la cifra esorbitante di 1300/2600). Ma se mio nonno avesse avuto le ruote sarebbe stato una carriola. Ergo, parlare di situazioni ipotetiche non serve. L’importante è che mi sono sverginato. Perchè da domenica inizia il campionato. E prometto battaglia.

Welcome to the UPSS

Giornata che inizia proprio con il piede giusto quella di oggi. Innanzitutto svegliato a mezzogiorno. In punto. Senza aver avuto bisogno di sveglie o altre amenità tecnologiche di alcun tipo. Toilet, toast, succo di frutta, cioccolata, caffè, sigaretta. Dopodichè mi stravacco su uno dei divani in pelle umana del salotto, dove il buon Joseph (uno dei miei coinquilini, mi sa che non ve li ho ancora presentati, ma lo farò…) stava “brunchando” guardandosi il rugby. Si chiacchiera un po’ e mi invita a seguirlo verso l’università, dove le varie “societies” presentano oggi la loro attività. Lui cercava il modo di giocare a calcio e a rugby. E siccome anche a me non dispiacerebbe troppo l’idea di rimettermi a far finta di giocare a pallone qui nelle umide e fredde lande inglesi decido di aggregarmi.

Arrivati là, il mio disappunto per vedere l’università anche di sabato (questa settimana ho fatto una media, certificata, di 10 ore al giorno là dentro) svanisce nel giro di un istante. Dentro ai locali della Student Union, belli grandini, una distesa infinita di tavolini e di gente che pubblicizzava le proprie societies. 101 per l’esattezza. Dagli scacchi al cheerleading, passando per il surfing, il badminton e tutti gli sport più tradizionali (calcio, rugby, cricket, basket, pallavolo, ecc…). Ci avviamo verso il calcio quando entro in crisi mistica. Su un muro, infatti, leggo neintepopodimento che “University of Plymouth Poker Society”. Fanculo lo sport. I miei soldi oggi li investo lì. Tanto più, dopo aver letto come inizia il loro flyier:

What we are all about
We like to play quality poker with good tables, good chips and of course good people; but we also make sure the games are about socialising as much as improving your skills and feeding your wallet. Beginners are more than welcome. People who take it too seroiusly are not welcome!
We hold weekly, multi table no limit Texas hold’em tournaments with good cash prizes. The buy in is kept small because we don’t want you to gamble your student loan away, but because we have lots of players the average weekly prize pot last year was £250. Then there is the league… each week you will accumulate points towards the league, and in march the top players get to go to the student nationals and represent! We will also be holding a qualifier to the student poker cup.

10 sterline per la membership annuale. Tre pounds e mezzo per la partecipazione ad ogni torneo (organizzati settimanalmente) con montepremi medio, come ricordato qui sopra, di 250. E, nella borsina di benvenuto, un sacco di figate.

Plymouth Poker Society welcome pack

Nell’ordine: una t-shirt di VCpoker, un libro (”The complete guide to poker”), un portachiavi/penna USB da 128MB (contenente il client per giocare on line ed un codice per ottenere un regalo iniziale di 35$) nonchè un mazzo di carte da Texas Hold’em. Domani pomeriggio si parte. C’è un freeroll, limitato ai primi 100 iscritti, con in palio per i primi tre classificati un Nintendo Wii, una non meglio identificata Flat screen TV ed un Ipod Nano.

Corro ad allenarmi… :-D

Compilare applicazioni Universal Binaries con XCode

Alla fine ho scoperto che basta veramente poco per compilare un’applicazione Universal Binary (in grado cioè di girare sia su architetture PPC che Intel) attraverso XCdode. Bastano giusto un paio di clic, come illustra la procedura scovata nei meandri della documentazione ufficiale:

Xcode can create universal binaries, which are executable files that can contain code and data for more than one architecture. You can create a single binary file that runs on both PowerPC-based and Intel-based Macintosh computers. The Architectures (ARCHS) build setting lets you specify which architectures Xcode builds for. You can edit this build setting in the target inspector. In the Build pane, select the Architectures build setting and click Edit. Xcode displays a dialog that lets you choose which architectures to build for: PowerPC or Intel. Select the checkbox next to the architectures for which you want to build.

Xcode compiles for each architecture individually and creates a single file from these input files. For more information on building universal binaries, see Universal Binary Programming Guidelines, Second Edition.

A number of the build settings defined by Xcode have different per-architecture variants to support building for multiple architectures. The name of these build settings follows the form NAME_architecture, where architecture is ppc, ppc64, or i386. To access the values of these build settings during a build, use the appropriate build setting name or an expression in the form NAME_$(arch). For example, to use the Mac OS X 10.3 SDK for PowerPC code and the Mac OS X 10.4u SDK for Intel code, set separate values for the SDKROOT_ppc and SDKROOT_i386 build setting variants. To access the value of the SDKROOT build setting for the architecture being built, use the expression SDKROOT_$(arch). (Note that the expressions SDKROOT and SDKROOT_ppc evaluate to different values during a build.)

Note: You can also use the Architectures build setting to create PPC/PPC64 binaries, which contain object files for both 32-bit PowerPC and 64-bit PowerPC architectures. To create a binary file that targets both 32-bit PowerPC and 64-bit PowerPC architectures, add ppc and ppc64 to the Architectures build setting. To do so, double-click in the Value setting.

E questo, per la cronaca, uno screenshot preso dal mio Mac che dovrebbe rendere ulteriormente più chiaro il tutto (clic sull’immagine per ingrandire):

Screenshot Universal Binary

Sorvoliamo sul fatto che la mia simulazione, al momento, sembri non girare su computer diversi dal mio…

PS: a grande richiesta, ho aggiunto nella barra di sinistra del blog un aggregatore RSS per seguire in maniera più comoda le discussioni (o presunte tali), che avvengono qua dentro. Approfitto anche per ricordare che qualche mese fa, pur senza pubblicizzarlo, ho aggiunto nella stessa barra laterale il link per seguire questo blog dalla propria home page personalizzata di Google.

Un coglione…

Autoscatto con PhotoBooth

(autoscatto)

Ok, la premessa l’ho fatta nel titolo del post. Sono un coglione. Ma certo è che chi progetta sportelli ATM per l’HSBC è coglione almeno quanto me. I fatti. Ero in fila ad uno dei bancomat dell’università, stamattina, verso mezzogiorno. Fila lunghissima, per ingannare l’attesa mi metto avanti e tiro fuori dal portafogli la mia tesserina, mentre controllo sul cellulare il PIN. Arriva finalmente il mio turno. La ragazza di fronte a me estrae la tessera ed io prontamente infilo nella macchinetta la mia. Esattamente laddove l’ha sfilata lei. Guardo il display e non succede niente. Che c’è? Risposto lo sguardo verso la fessura della tessera ed immediatamente capisco. Porca puttana. Quel maledetto ingegnere che ha progettato ’sto coso ha fatto due slot per le tessere, uno sopra all’altro. Da una parte si infila, dall’altra viene restituita. E’ superfluo a questo punto dire dove abbia messo la mia.

Parlo con un ragazzo in fila dietro di me. “Ci vorranno un paio di giorni che la riprendono e la fanno arrivare in banca”. Va beh, comunque sempre meglio andare alla filiale locale per sentire che mi dicono. Spiego il problema al primo tizio libero e lui mi dirotta verso una certa zona della banca. Maledette filiali leggere. Non si può far niente lì dentro, viene tutto in qualche modo dirottato altrove. In quella zona ci sono due poltrone e altrettanti telefoni. Aspetto il mio turno e prendo in mano la cornetta. Sto semplicemente chiamando l’help desk dell’HSBC. Seguo la voce guida, premo qualche pulsante e va tutto bene. Ma i problemi sorgono quando la mia chiamata viene presa dalla centralinista. Io esaurisco subito il mio poco-fluente inglese spiegandole il problema. Lei poi mi tempesta di domande. Di cui io ne capisco approssimativamente la metà. Tanto per dire, le rispondo quattro volte col mio indirizzo di casa, ma credo volesse sapere quattro cose diverse. Imbarazzo fantozziano. Inizio a soffiare nel telefono fingendo di essere in un locale molto rumoroso, giusto per avere la scusa con cui chiederle di ripetere quello che sta dicendo. Va beh, alla fine ne veniamo fuori. La nuova carta (non recuperano quella vecchia, me ne danno proprio un’altra nuova) arriverà nel giro di 5 giorni lavorativi.

Nel frattempo, il mio portafoglio dice 0. Le mie tasche, perlustrate attentamente, rispondono invece 1 pound e 85. Fortuna che avevo fatto spesa da poco…

Maccisti di tutto il mondo…

… a me gli occhi!

Hypnosis for breasts

No dai, scherzi a parte… c’è nessuno lì fuori che abbia voglia di provare la mia simulazione per dirmi se funziona o meno? Quello che ho provato a fare è stato creare la classica applicazione ridistribuibile per Mac. Ossia file .dmg da scaricare, montare ed al cui interno si trova l’eseguibile (anche se non credo che questo sia il termine giusto in gergo maccista) da spostare nella cartella Applicazioni per poi, da lì, essere usato a piacimento. Il dubbio che ho è relativo alle Qt: spero che il file che voglio distribuire contenga al suo interno tutte le librerie necessarie, in maniera tale che anche chi non ha le Qt installate sulla sua macchina sia in grado di eseguirlo. Ma siccome non ho un Mac “pulito” sottomano (l’iBook l’ho lasciato nelle grinfie di mia sorella ed il Mac Pro ancora non è arrivato), mi rivolgo a voi tutti.

Premetto che ho paura che il tutto non funzioni su architetture PPC. Così come è bene sottolineare che per visualizzare correttamente l’applicazione servirebbe una risoluzione verticale de monitor di almeno 800 pixels. Comunque, bando alle ciance, qui sotto c’è tutto quello che bisogna scaricare.

Certo, se poi qualcuno avesse anche voglia di farmi girare una decina di seeds con i parametri di default, mentre finisco di capire come fare a compilare la simulazione sul cluster dell’ISTC-CNR, gliene sarei tanto tanto grato. Come ricompensa offro questa paginetta, la cui lettura dovrebbe (il condizionale è d’obbligo dato il mio anglo-italiano) farvi capire che state combinando…

UPDATE del 28 settembre: ho aggiornato l’applicazione che è possibile scaricare ancora al link qui sopra. Se qualche maccista (Intel-only) volesse ripetere la prova, gli vorrei tanto tanto bene.

Il calcio è uno sport pericoloso…

Guardate cosa può succedere durante una partita di pallone…

Chiedo venia per questa specie di video-post, ma oggi sono totalmente assorbito dai ritocchi alla mia simulazione. Che sto cercando di rendere, da un punto di vista di codice, il più pulita possibile. Così come sto rifinendo alcune cose relative all’analisi dei dati (voglio che alla fine di ogni simulazione venga creata anche una serie di file Matlab in grado di calcolare le statistiche aggregate per i vari seeds e stampare i grafici risultanti), unitamente ad altre faccenduole più futili. Quali, ad esempio, l’icona del dock per l’applicazione.

A neural network-based controller for MAVs swarms: screenshot

E’ o non è una delle icone più belle che abbiate mai visto in tutta la vostra vita? :-D

The Gray Code

Non credo sia diventato famoso quanto il codice Da Vinci e non credo neppure che mai lo sarà. Ma sempre di un codice si tratta. E pure furbo. Il Gray Code, che prende il nome dal suo inventore Frank Gray, non è altro che una versione alternativa della codifica booleana tradizionale, aggiustata in maniera tale da far sì che due valori tra loro successivi possano variare al massimo di un bit.

Frank Gray

Il tutto è più semplice da capire vedendo un esempio, piuttosto che cercando uno pseudo-formalismo matematico che notoriamente non è mai stato il mio forte. Ad esempio, per 3 bit succede questo:

Gray Code (example with 3 bits)

Qual è il vantaggio di utilizzare una codifica di questo tipo al posto di quella booleana tradizionale? Beh, in ambito di Artificial Life questi vantaggi sono evidentissimi. Spesso, infatti, quando vi è la necessità di campionare lo spazio percettivo, possono sorgere problemi di vario genere.

Una rete neurale deve imparare a discriminare tra le varie possibili percezioni sensoriali ed adottare la risposta più appropriata in ciascuna circostanza. Immaginiamo ad esempio i miei aeroplanini, in grado di percepire in ogni momento l’angolo che li separa dal target. Se non si adottasse nessuna codifica particolare, ma ci si limitasse a normalizzare l’angolo (compreso tra 0 e 360°) in un intervallo più ristretto e quindi più adatto a fungere da input per un neurone artificiale (mettiamo ad esempio [0->1°]), succederebbe una cosa strana. Due angoli tecnicamente molto vicini tra loro, come potrebbero essere 359° e 2°, verrebbero codificati in maniera diametralmente opposta. Creando alla rete neurale notevoli difficoltà di apprendimento. Il comportamento, infatti, nei due casi dovrebbe essere del tutto simile (gli aeroplanini dovrebbero, in entrambi i casi, andare tendenzialmente dritti, virando di pochissimo in una direzione o nell’altra), ma l’input sarebbe rappresentato in maniera estremamente diversa. Le reti neurali sono solitamente in grado di riuscire a discriminare tra input non-perfetti come potrebbero essere questi, ma non si tratta di un compito semplice. Tra gli effetti collaterlai, il più rischioso è un notevole “raffreddamento” dell’efficacia training (o, in caso di evoluzione genetica, un più ampio numero di generazioni richieste).

L’alternativa è quella di utilizzare una codifica più intelligente. Nel mio caso, ho segmentato l’angolo in 8 intervalli di 45° ciascuno. Al primo, ]337.5;22.5°], ho assegnato la codifica 000; al secondo, ]22.5;67.5°], la codifica 001 e via di seguito, in senso orario, utilizzando la Gray Code di cui sopra. Ed i risultati sono, al momento, estremamente incorraggianti.

Born to Kill

E porca puttana. Era poi anche ora. I miei aeroplanini sono diventati grandi. E ora riescono a volare. Di più. Raggiungono il target e lo fanno saltare allegramente per aria. Senza tanti complimenti e con una facilità sconcertante. Ancora una volta, l’errore che mi ha fatto dannare l’anima dallo scorso inizio d’agosto era un qualcosa di stupido, che più stupido non si potrebbe. Dimenticavo di aggiornare l’hidden layer delle mie reti neurali. E così il comportamento dei MAV era sempre lo stesso, dall’inizio alla fine dei vari test. In un attimo imparavano a farsi detonare non appena iniziato il test, perchè questa era l’unica cosa sensata da fare. E gli aeroplanini così adattati si riproducevano e colonizzavano la popolazione, in quanto l’alternativa era schiantarsi contro i bordi dell’ambiente e ricevere per questo una punizione in termini di fitness. Ma ora tutti questi sono soltanto brutti ricordi. Finalmente, i miei maledetti cosi volanti sono diventati dei killer. Nati.

Born to kill

La condizione sperimentale è una delle più semplici possibili: scenario sgombro da ostacoli e target che, durante ogni test, è posizionato in un diverso punto dello spazio. I MAV, che come amebe di parisiana memoria percepiscono il bersaglio in termini di angolo (fico, tra l’altro, come alla fine ho implementato la codifica…) e distanza, partono dai quattro angoli dell’ambiente, rivolti più o meno casualmente verso il centro dello stesso. L’output della loro rete neurale è costituito da due neuroni: uno booleano legato alla detonazione (0: nessun effetto, 1: saltiamo allegramente per aria) ed uno continuo dedicato allo sterzo (valori compresi tra -1 a +1, corrispondenti rispettivamente ad una sterzata di 10° a sinistra e di 10° a destra). Lo strato intermedio è formato da 10 neuroni con funzione di attivazione tan-sigmoidale (estremi -1.0 e +1.0, slope 1.0). Pesi delle connessioni e biases (questi ultimi solo per lo strato intermedio e quello di output) sono soggetti a mutazione puntuale nel passaggio da una generazione all’altra (probabilità 0.25, mutazione random tra -1.0 e +1.0). Infine, è utilizzato un operatore di elitismo per salvaguardare lo stormo con fitness più alta.

Ecco un po’ di grafici che testimoniano l’evento. Tutti i dati, ovviamente, sono medie per i 100 stormi posti sotto evoluzione.

Distanza media e minima dal punto dell’esplosione a quello in cui si trova il target:

Distanza media e minima tra il target ed il MAV detonato più vicino

Percentuale complessiva di test che si concludono con l’eliminazione del target:

Percentuale di test conclusi con l’eliminazione del target

Fitness media e massima (date semplicemente dall’inverso della distanza media e minima):

Fitness media e massima

Autonomia media rimasta al MAV di uno stormo ad esplodere più vicino (o distruggere) il target:

Autonomia rimasta ai MAV esploso più vicino al target in ogni stormo

Condizione dei MAV a fine simulazione:

Condizione dei MAV a fine simulazioni

PAGINA SOTTOPOSTA A SEQUESTRO PREVENTIVO

PAGINA SOTTOPOSTA A
SEQUESTRO PREVENTIVO
SU DISPOSIZIONE  DEL TRIBUNALE DI REGGIO EMILIA
IN RELAZIONE AL PROCEDIMENTO PENALE NR. 5312/2009

Obiettivo Venezia

Dopo che purtroppo è svanita, causa una deadline improponibile, la possibilità di andarsene a Berlino il prossimo dicembre per la 1st International Conference on Unmanned Aircraft Systems (UAS) – Paving the way for UAS Autonomy” (alla quale, tanto per dire, sarebbe stato presente anche il Ministro della Difesa francese), si cambia obiettivo. Il prossimo, in ordine temporale, diventa Venezia. 10 e 11 gennaio 2008. Per un qualcosa di diverso rispetto al solito. Non si tratta infatti della solita conferenza, ma di un qualcosa di un po’ più “intimo”.

euCognition - Venezia (Hilton)

L’evento è organizzato da euCognition, ovvero quel benevolo ente che sta finanziando la mia permanenza a Plymouth dallo scorso maggio. Suddiviso in due giornate (questa l’agenda ufficiale), durante la prima avrà luogo una “Student competition”. Dove tutti quelli come me (ma saremo davvero in tanti?) presenteranno i risultati dei loro lavori svolti con un grant di euCognition. Il vincitore della gara riceverà un piccolo premio (rimborso spese per la partecipazione ad un’altra conferenza) e soprattutto potrà partecipare in qualità di speaker anche alla seconda giornata del convegno. In mezzo a gente piuttosto seria: Steven Harnad, Luc Steels, Michael Arbib e Jordan Pollack (ammetto però di non avere la più pallida idea di chi sia quest’ultimo).

La mia partecipazione, chiaramente, è subordinata al fatto che i miei aeroplanini nel frattempo imparino a volare. Ho sistemato la faccenda degli angoli e si nota qualche miglioramento, ma il comportamento intelligente ancora non emerge. Per niente. Comunque ho trovato altre cartucce da sparare, riguardo alla discretizzazione dell’input sensoriale. Forse, dare angoli e distanze continui in input alla rete neurale non è proprio la maniera più intelligente per farle imparare a svolgere un certo compito. O almeno spero che il problema sia quello…

Pagina Successiva »