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 Maggio, 2009

Bing! I’ve seen Wolfram|Alpha

Visto che il mio weekend di geekament informatico non sta procedendo esattamente nel migliore dei modi (vedi i ravanamenti improduttivi per poter controllare il Wiimote da una mia applicazione C++ di cui parlavo un paio di giorni addietro) (mitigati in parte dall’essere riuscito, grazie alla lettura di questo thread, a superare il cronico “decoder error” che il mio Media Centre mi presentava ogni qualvolta avessi la malsana idea di volermi guardare un DVD), parliamo oggi di cose che funzionano. Ovvero di cose in merito alle quali il sottoscritto non c’entra nulla.

Qualcosa si sta muovendo nel campo dei motori di ricerca. Dopo svariati anni di sostanziale stallo, in cui quello che cambiava, raffinandosi sempre di piu’, erano semplicemente gli algoritmi di ricerca situati sotto al cofano dei vari search engines, pare che i tempi siano finalmente maturi per un fondamentale campio di paradigma. Niente piu’ ricerche basate su parole chiave da individuare all’interno di database testuali, in sostanza, ma veri e propri sistemi di text mining che siano il piu’ semplici possibile per l’utente ed altrettanto efficaci nel restituire esattamente l’informazione di cui si ha bisogno.

Dopo l’annuncio a sorpresa (almeno per me) di Wolfram|Alpha, adesso arriva anche Microsoft, con il suo nuovo Bing, erede piu’ avanzato dello sconclusionatissimo sistema Live Search e gia’ noto con il nome in codice Kumo. I punti in comune tra i due nuovi motori di ricerca (per carita’, pero’, non chiamateli cosi’! Microsoft spaccia Bing come un “decision engine”, mentre Wolfram|Alpha e’ definito dagli autori un “computational knowledge engine”), almeno all’apparenza, sono svariati. Ma solo qualche settimana di prove permettera’ di chiarire un po’ le idee. Nel frattempo ci si puo’ informare a riguardo andando a zonzo per la rete. A questo link trovate una breve introduzione al nuovo search engine sviluppato dai creatori di Mathematica che lo stesso padre-padrone Stephen Wolfram a fatto a suo tempo sul suo blog. A quest’altro indirizzo e’ pubblicata invece una (oltremodo?) entusiastica recensione operata dallo staff di cnet.com e relativa all’ultima creazione di mamma Microsoft.

Per concludere, un paio di video. Il primo qui sotto e’ tratto da un talk tenuto da Wolfram al Berkmam Centre for Internet & Society di Harvard, dove racconta con abbondanza di dettagli il progetto Wolfram|Alpha. Il secondo e’ invece un video realizzato da Microsoft e che tesse le lodi del buon Bing.

Riuscira’ Google a restare al passo e resistere a questa ondata di nuovi competitors? Come diceva un celebre telefilm della mia infanzia, lo scopriremo nella prossima bat-puntata…

Alle urne, alle urne!

Devo ammettere che non ho ben chiaro come funzioni il sistema delle elezioni per noi poveri italiani residenti all’estero. A mia parziale discolpa devo anche ammettere di non essermene mai interessato seriamente prima d’oggi. Questa mattina mi e’ infatti arrivata un sacco di roba per posta, proveniente dal consolato italiano a Londra, che mi ha fatto sorgere il sospetto che dovrei iniziare ad informarmi un pochetto. In una di queste buste, le schede elettorali. Ma non quelle per le europee (i tempi, in effetti, sarebbero stati oltremodo ristretti), bensi’ quelle per i referendum. Se sapessi cosa votare ai tre quesiti referendari, in sostanza, lo avrei gia’ potuto fare, rispedendo le schede via posta. Alla facciazza di voi italiani in Italia, che per esprimere la vostra preferenza dovrete aspettare il prossimo 13 giugno. Sono piccole soddisfazioni anche queste. Molto meno soddisfacente, invece, la modalita’ che dovrei seguire per poter votare alle europee del 4 giugno. Trafila che prevederebbe un mio apposito viaggio a Bristol. Il che mi pare francamente un po’ eccessivo, pur non sminuendo ovviamente l’importanza del diritto di poter esprimere la mia preferenza.

Visto che siamo in tema elettorale, impossibile non sorridere di fronte ad un flyier che mi e’ arrivato sempre per posta qualche giorno fa. Pare che lo slogan che i conservatori abbiano scelto per questa campagna elettorale sia “vote for change”. Il che non e’ male. D’altronde loro si propongono come alternativa al governo laburista di Brown e, una loro vittoria (per quanto alle europee e non alle nazionali), implicherebbe in effetti un cambiamento di rotta dell’elettorato inglese. Peccato soltanto che vedere l’associazione sulla prima pagina del flyier, dove il logo “voto for change” e’ accompagnato, poco piu’ sotto, dalla scritta “vote conservatives”, faccia inevitabilmente scappar da ridere.

Conservative's logo for 2009 European elections: "vote for change"

Mettono invece una tristezza infinita gli spot elettorali del PD sui quali mi sono imbattuto per caso qualche giorno fa. Simpatica, se volete, l’idea di replicare la saga Apple del Mac vs PC applicandola alla politica, ma semplicemente indecente la realizzazione. Qui sotto uno di quelli a mio avviso usciti in maniera peggiore, dove ad una brutta idea si aggiunge anche la cronica imbecillita’ politica della sinistra italiana in materia economica. Anzi, visto che oggi mi sento buono, diciamo che sono populisti, piuttosto che imbecilli. Suona meglio, no?

Ad ogni modo, se volete guardarvi i vari filmati ed elaborare cosi’ un vostro giudizio personale, li trovate raccolti sul canale Youtube di YouDem.it. Buona visione…

Wiimote in Windows via Bluetooth

Che bello programmare sotto Windows. Proprio bello, divertente e rilassante. Ho speso non so quante ore su Visual Studio e non sono riuscito a compilare un benemerito nulla. Quello che sto provando a fare, per la cronaca, e’ interfacciare uno dei miei Wiimote al computer via Bluetooth. Dove, con il termine “computer”, intendo questa volta una macchina Windows. Scelta quantomai infelice, che avevo fatto nell’ingenua convinzione che fosse piu’ semplice che non su Mac/Linux.

Wiimote (with connected Nunchuk) and Bluetooth(nt) logo

Gia’. Come avrete notato sono nel bel mezzo di una violenta fase di regressione geek. Dopo aver visto l’ultimo filmato pubblicato nel post di ieri ho deciso che devo provare a mettere in piedi un sistema altrettanto fico. Magari utilizzando prima il mio Lego Mindstorms NXT e, poi, eventualmente muovermi applicando il tutto al Super Cub. Fatto sta che, per fare qualche esperimento, un Wiimote va benissimo in alternativa ad un volante/cloche. Vi sono varie librerie C++ disponibili sulla rete per collegare il remote della Wii ad un PC e leggerne i valori prodotti. Ma non sono riuscito a compilarne neanche una. Mi sono sbattuto in particolare su due di queste, Wiimote for C++ di CyberGarage e OIS (Object Oriented Input System). La prima (per la quale l’esempio incluso, pre-compilato, funziona alla perfezione permettendomi di leggere ogni valore emesso dal telecomando) richiede il misteriosissimo DDK di Microsoft, che a quanto pare non esiste piu’ essendo stato rimpiazzato dal Windows Driver Kit (WDK). Fatto sta che dopo una lunga odissea attraverso l’odioso Microsoft Connect (download bloccato piu’ e piu’ volte e sottoscritto costretto a riprendere da capo l’intera operazione), sono riuscito a scaricare il pacchettone. Una sbaraccata di MB per giusto un header, hidsdi.h, che alla fine non c’era. Amen. Fanculizzata la prima libreria, ho optato per la seconda. Ancora una volta qualche dipendenza mancante. Stavolta relativa alle DirectX ed al suo dinput.h header mancante. Ancora una volta scarico l’intero SDK delle DirectX, ma dell’header cercato nessuna traccia. Poi, di tanto in tanto, capita che qualcuno mi chieda come mai, anni fa, abbia deciso di passare a Mac OS.

In compenso ho rimesso a nuovo il mio media centre (un Elonex Artisan LX), riuscendo anche a risolvere finalmente l’annoso problema con il pannello frontale che non voleva saperne di visualizzare alcunche’ sull’LCD cosi’ come di rispondere alle variazioni applicate attraverso la manopola del volume (ringrazio sentitamente il creatore di questa paginetta web). Ora si’ che e’ veramente tamarro come piace a me.

My home setup (Elonex Artisan LX Media Centre, with a 23" Dell monitor and Logitech MX keyboard/mouse)

Prima o poi riusciro’ a ottenere cio’ che voglio. Stay tuned…

Super Cub: first flight test and potential improvements

Ok. Il battesimo dell’aria e’ stato fatto. E non solo dell’aria, oserei dire, ma della maggior parte degli elementi naturali. Dopo un paio d’ore spese sul campo, con una decina scarsa di minuti di volo effettivo, la lista dei danni procurati non e’ troppo ingente. Per dirla alla Ziliani: 2 gli alberi colpiti (in entrambi i casi con il Super Cub rimasto impigliato in qualche brocca, il che ha richiesto un po’ di sano climbing per recuperarlo), 1 il treno della First Great Western evitato in extremis con una manovra degna del miglior Barone Rosso, 4 i bambini che giocavano a pallone nel parco usciti miracolosamente illesi dal test di volo, 1 l’atterraggio riuscito (quasi) come da manuale, n (con n >> 5) gli atterraggi dove qualcosa non ha funzionato propriamente per il verso giusto, 1 il ristorante cinese colpito (ma questo da Fred e non dal sottoscritto… lo menziono soltanto perche’ e’ stato il momento piu’ spettacolare dell’intero pomeriggio). Eppure, nonostante questa sorta di bollettino di guerra, l’aeroplanino (alla fine 1.20m di apertura alare, non proprio “ino”) ha riportato il minimo sindacale dei danni. Giusto due pezzetti di plastica, dove si fissano le “bacchette” che tengono equilibrata la mono-ala, si sono rotti, ma dovrebbero essere riparabili molto alla svelta con un pochino di colla apposita. Qui sotto potete vedere il Super Cub rientrato alla base. Grazie anche alla sfocatissima camera dell’iPhone, sembra davvero essere appena uscito dalla scatola.

Hobbyone's Super Cub (ugly photo)

Considerazioni a caldo. Far volare questi aggeggi non e’ affatto immediato. I concetti sono molto semplici, ma serve una buona sensibilita’ nelle dita. Sensibilita’ che, gioco forza, si puo’ acquisire soltanto con la pratica. E dopo un buon numero di incidenti. Fondamentale, ad ogni modo, trovare uno spazio un po’ piu’ grande dove far volare il Super Cub. Il parco dove sono stato ieri, a grandi linee un rettangolo di 70 x 40 metri, costeggiato dalla ferrovia su un lato e da strada+case sull’altro lato, nonche’ frequentato da un po’ di persone, non e’ esattamente il luogo ideale per far pratica.

Considerazioni di piu’ ampio respiro. Cosa si puo’ fare di bello (leggi “geek”) con un aeroplanino come questo? Prima di tutto vi si puo’ agevolmente installare una videocamera per effettuare riprese. In questo thread rintracciato su RCGroups.com sono descritte varie possibilita’. Il premio dell’originalita’ va senz’altro a 1320fastback, che per pochi spicci si e’ comprato su eBay una Sony Cybershot col display LCD rotto e l’ha installata, grazie giusto ad un paio di elastici ed un case self-made di cartone, sotto il muso del suo Super Cub. La qualita’ delle riprese e’ davvero spettacolare.

First flight with front mounted camera from Jason Edwards on Vimeo.

Alternative molto piu’ semplici per il recording possono essere dispositivi quali ad esempio la PI-SpyCamStick, avente pressapoco le dimensioni di un accendino e capace di registrare a 15fps su Micro SD. Date le dimensioni estremamente ridotte ed il peso piuma (circa 50 grammi), installarla su un aereo con un po’ di nastro adesivo o di velcro e’ un gioco da ragazzi. Allo stesso tempo, l’impatto sull’aerodinamica e’ minimo.

Ma, al di la’ del recording, puo’ essere molto piu’ interessante ricevere informazioni visive dall’aereo in real time. Per far questo si puo’ fare affidamento ad un micro camera wireless. Come la RC MiniCam che potete trovare su HeliHobby.com. Anche in questo caso le dimensioni sono ridotte all’osso. La foto qui sotto dovrebbe rendere bene l’idea.

Wireless micro camera suited for R/C vehicles (http://www.helihobby.com/html/micro_video_camera.html)

Le immagini trasmesse da una videocamera come questa (circa 300 metri il range dichiarato) vengono raccolte da un apposito ricevitore con uscite antenna ed RCA. Il che permette una connessione immediata a dispositivi quali camcorder o televisioni. Nel caso in cui si volesse invece visualizzare l’immagine a computer, nella maggior parte dei casi e’ necessaria una scheda di acquisizione video. Manco a dirlo, la Pinnacle ha a catalogo dozzine di dispositivi di questo tipo, tra i quali diversi di questi su USB e compatibili con Mac (vedi ad esempio Pinnacle Video Capture).

E per quanto riguarda il controllare l’aereo da un computer? La soluzione piu’ semplice consiste nel passare attraverso un’interfaccia PCTx. Vari telecomandi per modelli R/C dispongono infatti di una “trainer ports”, ideata per collegarvi un secondo telecomando. L’idea di fondo e’ la stessa delle macchine utilizzate a scuola guida. Chi deve imparare tiene in mano uno dei telecomandi, l’istruttore interviene quando necessario con il proprio telecomando. Il dispositivo di cui sopra, commercializzato dalla Endurance R/C permette di collegare un computer invece che un secondo telecomando. Delle semplici librerie C++ permettono quindi di inviare comandi al telecomando principale emulando il telecomando secondario (un esempio lo trovate a questo link). Uno scenario di questo tipo apre prospettive simpatiche. Guardate ad esempio, con un po’ di fantasia (ed un po’ di soldi da buttare via) cosa e’ possibile fare.

Si accettano scommesse su quanto tempo il mio spirito geek fara’ passare prima di cercare di riprodurre lo stesso set up con il mio Super Cub come modello.

A catcher in the rye

Ancora visite in quel di Plymouth. Non c’e’ che dire, stiamo diventando grandi ed iniziamo a comportarci come tali. A trovarci e’ arrivato questa volta il professor Chyi-Yeu Jerry Lin, della National Taiwan University of Science and Technology, con la quale avra’ inizio a breve una collaborazione nell’ambito del progetto RoboDoc.

One of the DOC-x robots developed at the Taiwan Tech

Nel corso dell’immancabile seminario, il buon Jerry ha illustrato con abbondanza di filmati le svariate cose delle quali si occupa. Il professore taiwanese ha lavorato e sta tuttora portando avanti numerosi progetti. Tra i principali, vi e’ la famiglia dei DOC: tre modelli di robot multi-purpose chiamati rispettivamente DOC-1, DOC-2 e DOC-3. Dotati di un vero e proprio notebook a fungere da cervello, questi robot sono stati testati su tasks di ogni tipo. Giocano a scacchi e ad altri giochi, fanno ritratti di persone, risolvono equazioni presentate loro su una lavagnetta o un PDA, eccetera eccetera. E, cosa interessante, si danno anche all’intrattenimento. Alcuni di questi sono in fatti in grado di leggere e riprodurre musica, altri di recitare (cose tranquille, come ad esempio Il Fantasma dell’Opera), altri ancora di muovere marionette.

Ingegnere robotico vecchio stampo, l’approccio di Lin e’ quanto di piu’ pragmatico possa esserci. Dato un problema, implementare la soluzione nella maniera piu’ semplice, lineare ed efficiente possibile. Che poi il robot in questione non assomigli se non da un punto di vista meramente estetico ad un essere umano non pare essere un problema particolare. O, almeno, non lo era fino ad oggi. Con estrema franchezza Lin ha spiegato come si sia ormai reso conto di persona che con l’approccio “tradizional ingegneristico” alla robotica non e’ possibile spingersi oltre ad un certo punto. Motivo per cui e’ ora alle prese con questo viaggio, che fa tappa a Plymouth, alla scoperta di nuove metodologie di sviluppo bio-inspirate.

Purtroppo su Internet non sono riuscito a recuperare molto materiale riguardo alle attivita’ di robotica portate avanti alla Taiwan Tech. Qualcosina da YouTube pero’ e’ venuto fuori, grazie al buon utente tsengstan, che immagino essere un qualche componente del gruppo di ricerca di Lin. Prima di tutto il video che segue, che mostra DOC-2 impegnato in una partita a scacchi, su scacchiera reale, contro un essere umano. Il video e’ davvero impressionante per quanto riguarda la precisione e la velocita’ di movimento del braccio robotico. C’e’ pero’ il trucco, del quale non mi ero personalmente accorto fino a quando Lin non l’ha rivelato. Il robot non afferra, di fatto, il pezzo che deve muovere, ma utilizza semplicemente un magnete installato sul pollice. E questo spiega il continuo tremolio dei pezzi non appena questi vengono sollevati. In piu’ il robot non utilizza neppure alcun algoritmo per la visione (che sarebbe necessario per riconoscere i diversi pezzi presenti sulla sacchiera). La decisione di cosa muovere e come e’ presa direttamente dal computer embedded, sulla base delle informazioni memorizzate al suo interno e quindi inviata al robot in maniera tale da fargli generare l’output motorio appropriato.

Il secondo video, che da’ anche il titolo a questo post, riguarda invece un altro tipo di robot in grado di afferrare una palla lanciata verso di lui ad una discreta velocita’. Da un punto di vista tecnico, la performance di questo catcher e’ davvero molto buona. Nulla da eccepire questa volta.

Peccato non essere riuscito a trovare la maggior parte dei filmati mostrati durante il talk di oggi. Quello sui due robot, deo gratias dalle sembianze rispettivamente maschili e femminili, che dopo lunghe simulazioni a computer finalmente riuscivano a coronare il loro sogno d’amore baciandosi teneramente era davvero da lacrimuccia…

Unendo l’utile al dilettevole

Come i lettori piu’ attenti sapranno, e’ da tempo che mi frulla per la testa l’idea di scrivere un software in grado di giocare un “buon” (aggettivo arduo da definire in un paper, figuriamoci in un blog…) poker. Ho tante idee che mi frullano per la testa e relative al come implementare i suoi vari elementi costitutivi. Tra l’altro proprio oggi ho trovato per caso un articoletto a riguardo che, per quanto non dica in assoluto niente di nuovo, risulta una lettura piacevole. Il mio problema, come sempre, e’ il tempo. Qualche mese fa avevo iniziato ad abbozzare un po’ di codice (pseudo e anche reale), ma poi non ho avuto modo di proseguire il discorso. Cosi’, come suggerisce il titolo di questo post, ora ho deciso di cercare un po’ di aiuto dagli studenti che seguono il mio (in realta’ non e’ “mio”, ma siccome preparo il materiale didattico, tengo le lezioni, preparo i testi degli esami e valuto gli studenti, credo di poter legittimamente usurpare il possessivo) corso di Laboratorio II ad UniMORE. Si’, in realta’ potrebbe configurarsi il reato di sfruttamento. O, meglio, abuso di posizione dominante. Fatto sta che per il primo appello di questo anno accademico (25 giugno 2009) ho deciso di preparare un testo d’esame tutto dedicato al poker. Scrivere il tutto mi e’ costato un pomeriggio abbondante di lavoro (ovviamente mi imbarco in queste cose quando e’ festa e io dovrei essere fuori casa a fare altro). Ma credo ne sia valsa la pena. Vedremo la risposta degli studenti. Sperando innanzitutto che risposta vi sia e che non decidano tutti (gia’ che sono pochini) di saltare pari pari questo appello.

Robots playing poker

Per coloro che fossero interessati propongo il testo dell’appello qui di seguito. La parte piu’ corposa, come potrete notare e’ quella relativa alla spiegazione delle regole del gioco (per facilita’ mi sono orientato sul Fixed-Limit Hold’Em giocato in HU). Che penso tuttavia sia venuta bene. A voi il giudizio.

Specifiche del progetto da realizzare

Come tema d’esame, si richiede allo studente di scrivere un programma, in linguaggio C, che permetta all’utente di disputare una partita di poker contro il computer.

La variante del poker adottata a questo fine e’ il Fixed-Limit Texas Hold’Em in modalita’ torneo. Il gioco si svolgera’ in Heads Up, ovvero con soltanto due giocatori attivi: l’utente e il computer. Internet abbonda di materiale riguardante le regole del gioco (vedi ad esempio http://it.wikipedia.org/wiki/Texas_Hold’em). Un breve riepilogo e’ comunque fornito in questo documento.

L’avvio del programma coincide con l’inizio di una nuova partita. Attraverso un menu a scelta rapida, visualizzato preferibilmente in forma semi-grafica (intesa semplicemente come utilizzo dei caratteri ‘-‘, ‘|’ e simili), l’utente dovra’ effettuare durante ogni mano di gioco la scelta tra una delle seguenti opzioni:

  1. Fold
  2. Check
  3. Call x (dove x sta per l’ammontare che deve essere chiamato)
  4. Bet (nel caso in cui il giocatore sia il primo a parlare al flop, al turn o al river, oppure dopo che in una di queste fasi l’avversario abbia fatto check)
  5. Raise (nel caso in cui l’avversario abbia effettuato per primo una puntata)
  6. Re-Raise (nel caso in cui il giocatore abbia effettuato una puntata e l’avversario abbia rilanciato)
  7. Termina la partita

L’utente dovra’ scegliere l’operazione da eseguire digitando il numero corrispondente e premendo il tasto INVIO. Si tenga presente che l’utente non dovra’ avere sempre accesso a tutte le funzionalità del programma. Il check, ad esempio, non e’ possibile pre-flop (se non dal grande buio ed in caso di semplice call del piccolo buio) e post-flop dopo che l’avversario ha effettuato una puntata.

Il software dovra’ costantemente visualizzare sullo schermo tutte le informazioni di cui l’utente necessita per poter prendere le proprie decisioni: stack suo e dell’avversario, eventuali carte presenti sul board, livello dei bui, posizione del bottone, ammontare del piatto, ultima azione intrapresa dall’avversario.

Fixed-limit Texas Hold’Em

Nel Texas Hold’Em in modalita’ torneo, ogni giocatore inizia la partita con un certo ammontare di chips, uguale per tutti i partecipanti. Le chips passano da un giocatore all’altro nel corso di ogni mano. La partita termina quando uno dei giocatori riesce a conquistare tutte le chips in gioco. Questa variante del poker si svolge utilizzando un mazzo composto da 52 carte francesi (54 meno i due jolly), di quattro semi diversi (cuori, quadri, fiori, picche). Alle singole carte e’ possibile fare riferimento utilizzando due caratteri: il primo ad indicare il valore della carta (da quella di valore minore a quella di valore maggiore la sequenza e’: 2, 3, 4, 5, 6, 7, 8, 9, T: 10/ten, J: fante/jack, Q: donna/queen, K: re/king, A: asso/ace), il secondo il suo seme (h: cuori/hearts, d: quadri/diamonds, c: fiori/clubs, s: picche/spades).

Il gioco si articola in un numero non predefinito di mani. All’inizio di ciascuna mano, uno dei giocatori riceve il bottone (dealer button), un disco che indica qual e’ il giocatore che deve occuparsi di distribuire le carte. Il bottone passa da un giocatore all’altro all’inizio di ciascuna nuova mano. Prima che le carte vengano distribuite, entrambi i giocatori devono effettuare una puntata obbligatoria (motivo per il quale queste vengono definite puntate effettuate “al buio”). In condizione di heads up, ovvero quando vi sono soltanto due giocatori attivi, il giocatore sul bottone deve effettuare una puntata pari al “piccolo buio” (small blind, SB), mentre l’altro giocatore deve puntare un importo pari al “grande buio” (big blind, BB, di ammontare doppio rispetto allo small blind). L’ammontare dei bui aumenta con il passare del tempo in maniera tale da velocizzare lo svolgimento della partita. Una volta “postati” i bui a ciascun giocatore vengono distribuite due carte (la prima e la terza vanno al giocatore di grande buio, la seconda e la quarta a quello sul bottone), le quali costituiscono le carte private (in gergo “hole cards”).

La mano puo’ quindi avere inizio. Essa consiste in un massimo di quattro fasi di gioco sequenziali, corrispondenti ad altrettanti turni (rounds) di puntate: pre-flop, flop, turn e river. Il primo giocatore ad agire (“parlare”) e’ quello di piccolo buio, che ha a disposizione diverse opzioni. Egli puo’ infatti: scartare la sua mano (fold), “chiamare”, ovvero pareggiare la puntata del grande buio (call, aggiungendo nel piatto la differenza tra grande e piccolo buio) oppure rilanciare la puntata (raise, ovvero coprendo la differenza tra grande e piccolo buio ed aggiungendo altre chips). A seconda dell’azione eseguita dal primo giocatore derivano le opzioni possibili per il suo avversario. In caso di call del giocatore sul bottone, quello di grande buio puo’ optare per: fold (opzione possibile, ma non particolarmente sensata, dato che regalerebbe il piatto all’avversario), check (la fase pre-flop termina senza nessun ulteriore investimento in termini di chips e si passa al turno di gioco successivo) o raise (nel piatto vengono puntate altre chips e l’avversario deve almeno chiamare questa puntata aggiuntiva per rimanere attivo nella mano in questione). In caso di raise del giocatore sul bottone le possibilita’ a disposizione del giocatore di grande buio sono il fold, il call o eventualmente un ulteriore rilancio (re-raise). Nel Fixed-Limit Hold’Em l’ammontare dei rilanci e’ fisso. Pre-flop e al flop e’ possibile rilanciare per un ammontare pari al grande buio, mentre al turn ed al river il rilancio ammonta a due volte il grande buio. Per quanto l’ammontare sia fisso, in condizione di heads up non vi e’ limite al numero di rilanci che e’ possibile effettuare. I due giocatori potrebbero quindi decidere di rilanciare reciprocamente le puntate dell’avversario fino a ritrovarsi con tutte le loro chips nel piatto.

Se le puntate effettuate durante la fase di pre-flop vengono pareggiate (ovvero se il bottone/SB chiama ed il BB sceglie di fare check, se il bottone rilancia ed il BB chiama questo rilancio, oppure se una serie di rilanci termina con uno dei due giocatori che si limita al call), le chips investite dai due giocatori vengono spostate all’interno del piatto, la prima fase di gioco si conclude e viene mostrato il flop. Il flop consiste di tre carte comuni che vengono distribuite a faccia in su sul tavolo e che entrambi i giocatori possono utilizzare per ottenere il loro punto migliore. I giocatori tornano di nuovo ad agire, partendo questa volta da colui che pre-flop era il grande buio. Le sue opzioni a questo punto sono tre: fold, check (il giocatore non aggiunge chips a quelle che sono gia’ all’interno del piatto, lasciando la parola al suo avversario) e bet (il giocatore effettua una puntata aggiungendo chips a quelle gia’ presenti all’interno del piatto). Le opzioni disponibili per il secondo giocatore, a questo punto, dipendono ancora una volta da quella che e’ stata l’azione intrapresa dal suo avversario. Nel caso in cui l’avversario abbia optato per il check, il giocatore sul bottone puo’ a sua volta decidere per il fold, il check (chiudendo in questo modo la fase di gioco al flop) oppure il bet. Nel caso in cui il giocatore che era di grande buio abbia puntato, il suo avversario puo’ invece scartare la sua mano (fold), chiamare la puntata (call), oppure rilanciarla (raise). Cosi’ come nella fase pre-flop il procedimento viene reiterato fino a quando le puntate sono pareggiate o uno dei due giocatori decide di scartare la sua mano. Nella prima di queste due ipotesi si procede alla fase di gioco successiva. Il turn, ovvero una quarta carta comune, viene distribuita a faccia in su sul tavolo. Un nuovo round di puntate ha quindi luogo secondo la stessa procedura valida per il gioco al flop. Nel caso in cui le puntate si pareggino nuovamente si arriva al river, ovvero la quinta ed ultima carta comune ad essere distribuita a faccia in su sul tavolo. Ancora una volta si ha un round di puntate che segue le identiche modalita’ delineate per il gioco al flop e al turn. Nel caso in cui le puntate siano pareggiate anche al river, si procede infine allo showdown: entrambi i giocatori rivelano le proprie carte private e colui che mostra la mano migliore si aggiudica il piatto.

La mano finale di un giocatore e’ composta dalle miglior combinazione di 5 carte realizzata prendendo un qualsiasi numero di carte tra quelle private e quelle comuni. Il valore di queste mani e’ ordinato come segue (dal minore al maggiore):

  1. carta alta (cinque carte di valore diverso, non dello stesso seme e non disposte a scala);
  2. coppia (due carte con lo stesso valore);
  3. doppia coppia (due coppie);
  4. tris (tre carte con lo stesso valore);
  5. scala (cinque carte con valori sequenziali);
  6. colore (cinque carte dello stesso seme);
  7. full house (un tris piu’ una coppia);
  8. poker (quattro carte con lo stesso valore);
  9. scala colore (cinque carte in sequenza, tutte dello stesso seme).

Sono di seguito riportati alcuni esempi utili per chiarire come vengano calcolate queste combinazioni di cinque carte.

Giocatore 1: As, 3c
Giocatore 2: Ks, Ts
Board: 4s, Jh, Qd, 7h, 6h
Risultato: Giocatore 1 si aggiudica il piatto in quanto la sua mano di cinque carte (As, Qd, Jh, 7h, 6h – 4s e 3c non vengono conteggiati) contiene un asso come carta piu’ alta, migliore rispetto al re carta alta di Giocatore 2 (Ks, Qd, Jh, Ts, 7h – 6h e 4s non vengono conteggiati).

Giocatore 1: As, Ks
Giocatore 2: Jh, Jd
Board: 4d, 3c, Kc, 2s, Js
Risultato: Giocatore 2 vince il piatto con un tris di J (Jh, Jd, Js, Kc, 4d – 3c e 2s non vengono conteggiati), contro la coppia di K di Giocatore 1 (Ks, Kc, As, Js, 4d – 3c e 2s non vengono conteggiati).

Giocatore 1: 4s, 4d
Giocatore 2: As, Ad
Board: 2h, 6h, Kh, Qh, Ah
Risultato: Giocatore 1 e Giocatore 2 pareggiano e si spartiscono il piatto in parti uguali. Entrambi hanno infatti colore (2h, 6h, Kh, Qh, Ah – le rispettive carte private non vengono conteggiate in quanto originerebbero punti minori rispetto al colore) con le sole cinque carte comuni.

In caso di due giocatori aventi una coppia, vince il piatto il giocatore in possesso della coppia piu’ alta. Stessa cosa vale per il tris e per il poker. Per il colore si prende in considerazione la carta piu’ alta tra le cinque aventi lo stesso seme, ed eventualmente la seconda, la terza, la quarta e la quinta (ad esempio: Ah, Jh, Th, 5h, 3h vince contro Ah, Th, 9h, 5h, 3h). Per quanto riguarda la scala e la scala colore, vince il giocatore che ha quella che termina con la carta piu’ alta (ad esempio: 5h, 6d, 7d, 8c, 9s perde contro 6d, 7d, 8c, 9s, Ts). Per quanto concerne infine il full house, vince chi ha il tris piu’ alto e, in caso questo sia uguale per tutti i giocatori, chi ha la coppia piu’ alta.

E’ molto importante tenere in considerazione il fatto che una mano puo’ terminare prima che si arrivi allo showdown, nel caso in cui uno dei due giocatori effettui una puntata (pre-flop, al flop, al turn o al river) ed il suo avversario decida di non chiamarla, scartando la sua mano (come accennato in precedenza, un giocatore puo’ scartare la sua mano anche in assenza di una puntata da parte dell’avversario, ma questo tipo di giocata non assume, de facto, alcun senso). In questo caso, chi ha effettuato la puntata risulta il vincitore della mano e si aggiudica il piatto. Nel gioco reale soltanto una percentuale relativamente bassa delle mani che vengono giocate durante una partita si conclude allo showdown, rendendo in questo modo il gioco molto interessante.

Un altro aspetto da considerare e’ che, nel caso in cui un giocatore effettui una puntata ed il suo avversario non abbia chips a sufficienza per pareggiarla, quest’ultimo puo’ comunque effettuare il call spostando nel piatto tutte le sue chips (condizione di “all in”). L’ammontare puntato e che non e’ stato “coperto” ritorna immediatamente a far parte dello stack del giocatore che ha effettuato la puntata, mentre il rimanente finisce nel piatto. Entrambi i giocatori si contendono quindi il piatto risultante secondo le normali regole di gioco. Se questa situazione si verifica prima del river, entrambi i giocatori devono mostrare le proprie carte nascoste girandole a faccia in su sul tavolo. Il dealer procede quindi a distribuire tutte le carte comuni ancora mancanti sul board ed il vincitore della mano e’ decretato una volta tutte queste diventano disponibili.

Ulteriori note

  • Il progetto dovra’ essere realizzato individualmente.
  • Il programma dovrà essere scritto in codice ANSI C standard, al fine di garantirne il più ampio livello di portabilità possibile. Non e’ ammesso, a meno che tale possibilità non sia esplicitata nel testo d’esame o nelle FAQ pubblicate su Dolly, l’utilizzo di comandi propri del sistema operativo in uso. Il programma dovra’ essere in grado di “girare” allo stesso modo su qualsiasi piattaforma.
  • Il programma dovra’ essere adeguatamente commentato. Non abbiate paura di essere eccessivamente prolissi nei vostri commenti.
  • Il programma dovra’ rispettare in maniera assolutamente rigorosa le specifiche illustrare in questo documento. Qualsiasi modifica rispetto allo schema ivi delineato ed apportata in maniera arbitraria verra’ considerata un errore. Per qualsiasi dubbio o chiarimento si prega di utilizzare il forum.
  • Il mazzo da gioco dovra’ essere implementato attraverso una pila (e’ indifferente se l’implementazione avviene attraverso array o lista lineare). Due apposite funzioni dovranno provvedere rispettivamente a mescolarlo (shuffling) ed a prendere una carta dalla testa (operazione di pop) ogni qualvolta cio’ sia necessario (ovvero quando vengono distribuite le starting hands o quando vengono girate sul board le carte comuni).
  • Ogni giocatore inizia la partita con uno stack di 1,500 chips.
  • Per rendere piu’ semplice il programma, i bui non verranno aumentati su base temporale (evitando cosi’ allo studente il compito di implementare un timer). I livelli cambieranno ogni 10 mani giocate, susseguendosi in accordo a questa sequenza (piccolo/grande buio): 10/20, 15/30, 20/40, 30/60, 40/80, 50/100, 75/150, 100/200, 150/300, 200/400, 300/600. Nel caso in cui la partita sia ancora in corso dopo dieci mani giocate con bui a 300/600, questi non incrementeranno piu’ ed il gioco proseguira’ fino ad avere un vincitore.
  • Ogni qualvolta un giocatore scegliesse di foldare la propria mano nonostante la possibilita’ di effetuare un check, un messaggio di avviso deve apparire chiedendo al giocatore conferma dell’azione intrapresa.
  • Al termine di ogni mano il programma deve mostrare un riepilogo che indichi le mani di cinque carte dei due giocatori (in caso di showdown) ed i rispettivi punti, con conseguente “dichiarazione” del vincitore e dell’importo vinto. Stessa cosa nel caso in cui la mano si concluda prima dello show down. In tal caso le carte private dei due giocatori non devono essere mostrate, ma il programma dovra’ comunque riportare chi e’ il vincitore e quale l’importo del piatto che si e’ aggiudicato.
  • Non tutte le mani di partenza hanno lo stesso valore. Seguendo ad esempio quanto riportato da Sklansky (Hold’Em Poker for Advanced Players, 1999) possiamo classificare le mani di partenza in 8 gruppi differenti, a partire dalle migliori per arrivare a quelle con minor potenziale (la dicitura “s” accanto ad una mano sta ad indicare che le due carte sono “suited”, ovvero dello stesso seme; x indica una carta qualsiasi minore del 9):

    gruppo 1: AA, KK, QQ, JJ, AKs;
    gruppo 2: TT, AQs, AJs, KQs, AK;
    gruppo 3: 99, JTs, QJs, KJ,s ATs, AQ;
    gruppo 4: T9s, KQ, 88, QTs, 98s, J9s, AJ, KTs;
    gruppo 5: 77, 87s, Q9s, T8s, KJ, QJ, JT, 76s, 97s, Axs, 65s;
    gruppo 6: 66, AT, 55, 86s, KT, QT, 54s, K9s, J8s, 75s;
    gruppo 7: 44, J9, 64s, T9, 53s, 33, 98, 43s, 22, Kxs, T7s, Q8s;
    gruppo 8: 87, A9, Q9, 76, 42s, 32s, 96s, 85s, J8, J7s, 65, 54, 74s, K9, T8.

    Sulla base di questa semplice classificazione e’ possibile elaborare una solida strategia di gioco pre-flop.

  • Non e’ richiesto che la strategia di gioco post-flop sia particolarmente elaborata. In linea di massima si puo’ far si’ che il computer segua un comportamento “a soglia”: punti o rilanci soltanto quando ha punti piu’ forti rispetto ad una certa misura di riferimento (es. coppia piu’ alta sul tavolo), faccia check o fold (a una puntata dell’avversario) quando non li ha.
  • Facoltativo: estremamente interessante sarebbe aggiustare dinamicamente questa soglia a seconda dell’aggressivita’ dimostrata fino a quel momento dall’avversario umano (ad esempio chiamando e rilanciando con un range di punti molto piu’ ampio contro un giocatore che punta spesso dopo il flop). Allo stesso modo, anche la strategia pre-flop potrebbe adattarsi all’avversario che si ha di fronte (ad esempio estendendo il range di mani con le quali rilanciare contro un giocatore molto chiuso e restringendo il range per chiamare un suo rilancio).
  • Il bluff e’ una componente importante del poker. Di tanto in tanto il software puo’ provare a rappresentare un punto che in realta’ non ha, puntando e/o rilanciando.
  • Fintanto che i bui sono ad un livello basso in confronto al proprio stack e’ possibile seguire una strategia conservativa, selezionando le migliori mani di partenza e scartando quelle piu’ problematiche. Man mano che i bui aumentano ed iniziano ad incidere in maniera significativa sul proprio stack diventa necessario prendersi qualche rischio in piu’ ed entrare in gioco con un range di mani piu’ ampio.
  • Un buon giocatore di poker deve essere imprevedibile. Per rendere tale il vostro software e’ possibile impostarlo per seguire una certa strategia, ma con l’introduzione di tanto in tanto di qualche variazione casuale sul tema (ad es., in una determinata situazione: esegui l’80% delle volte quello che suggerisce la strategia, fai qualcosa di diverso il restante 20% delle volte).
  • Il programma deve tenere uno storico di tutte le mani giocate, salvato in un file di testo. Il formato per descrivere ogni singola mano deve ricalcare il seguente schema (dove si ipotizzano bui a 10/20 e i due giocatori che iniziano la mano con l’identico stack di 1,500 chips):

    Poker Game, Hand #N – 10/20 – Fixed Limit Hold’em
    Seat 1: Human (1,500)
    Seat 2: Computer (1,500)
    Human posts the small blind of 10
    Computer posts the big blind of 20
    The button is in seat #1
    *** HOLE CARDS ***
    Dealt to Human [7h Ad]
    Human calls 10
    Computer checks
    *** FLOP *** [8c 4h Ah]
    Computer checks
    Human bets 20
    Computer calls 20
    *** TURN *** [8c 4h Ah] [4c]
    Computer checks
    Human bets 40
    Computer raises to 80
    Human calls 40
    *** RIVER *** [8c 4h Ah 4c] [6d]
    Computer bets 40
    Human calls 40
    Computer shows [8s 8d]
    Human shows [7h Ad]
    Computer shows a full house, Eights full of Fours
    Human shows two pair, Aces and Fours
    Computer wins the pot (320) with a full house, Eights full of Fours
    *** SUMMARY ***
    Total pot 320
    Board: [8c 4h Ah 4c 6d]
    Seat 1: Human (button) showed [7h Ad] and lost with two pair, Aces and Fours
    Seat 2: Computer showed [8s 8d] and won (320) with a full house, Eights full of Fours

Tentazioni…

Per favore, qualcuno che mi sequestri la carta di credito. Ora, subito. Immediatamente. Altrimenti va a finire che entro fine settimana l’HobbyZone Super Cub RTF – HBZ7100 mi arriva dritto in ufficio.

HobbyZone Super Cub

HobbyZone Super Cub (during flight)

Se fosse stato solo per me avrei potuto resistere (piu’ o meno) tranquillamente. Ma quel maledetto di xFred (mio collega, ndr) si e’ appena preso un Aerobird Swift RTF – HBZ7200 e non ha perso occasione di mostrarmelo in tutto il suo splendore ieri sera, prima di un barbeque. Facendo si’ che dalla mia bocca scendesse piu’ bava di quanta non se ne sarebbe creata da li’ a poco nel vedere pezzi di sua maesta’ il maiale (inteso come cibo e non come libro) ardere sui carboni. Il colpo di grazia quando mi ha illustrato le meraviglie della X-Port, una porta presente sulla maggior parte dei modelli RC della HobbyZone e che permette il collegamento di devices aggiuntivi. Tra questi, un modulo per pilotare al buio ed un altro che permette di ingaggiare veri e propri dogfight contro aerei dotati dello stesso modulo.

Ok, troppo tardi.

Double or Nothing S&Gs strategy for dummies

Oggi si ritorna a parlare di poker. E non tanto per le mie performance (iera sera mi sono concesso una sana uscita al casino per giocare il £20+5.5 triple chance del sabato, chiuso pero’ malamente al 22esimo posto su 46 partecipanti, complici un paio di flip importanti persi che mi avrebbero fatto volare dritto verso il final table… niente da rimproverarmi, insomma, e questo e’ l’importante), quanto piuttosto perche’ scuriosando un po’ sulla rete mi sono imbattuto in alcune interessanti guide strategiche per i Sit&Go Double or Nothing.

Per chi non la conoscessa, questa tipologia di sit prevede 6, 8 o 10 giocatori seduti al tavolo. Meta’ di questi giocatori va ITM, mentre l’altra meta’ non vince niente. La vincita e’ uguale per tutti e consiste esattamente nel doppio del buy-in (al netto del rake). D’istinto verrebbe da pensare che, soprattutto ai livelli bassi, la chiave del gioco sia giocare iper-tight, spingendo solo con le mani buone ed aspettando che qualche giocatore decida amabilmente di suicidarsi. Il problema e’ che questa strategia l’hanno ormai capita anche i giocatori piu’ donk. Motivo per cui, dopo una fase iniziale in cui giocare questi tipi di S&G era incredibilmente profittevole (a suo tempo ne ho vinti diversi senza neppure entrare in una mano…), ora questi continuano ad essere potenzialmente molto interessanti, ma per giocarli serve qualche accortezza in piu’. In nostro aiuto vengono le guide che ho menzionato qui sopra. Tra tutte vi consiglio in particolare quelle pubblicate su SitAndGoPlanet.com e FeltPoker.com rispettivamente. Se poi davvero volete mettervici seriamente, allora c’e’ anche un libro, Double or Nothing Sit & Go Strategy to Crush the Competition. Sulla bonta’ di quest’ultimo non ci metterei la mano sul fuoco, ma nella peggiore delle ipotesi, cosi’ come ogni buon libro, fara’ sempre arradamento. Vista la relativa facilita’ con la quale e’ possibile ottenere un profitto, su vari forum e’ possibile trovare discussioni di ogni genere aventi questa tipologia di gioco come topic principale. Immancabile, sull’ormai mitico forum di 2+2, un thread “ufficiale” a riguardo.

Se vi ho incuriosito e volete provare anche voi i Double or Nothing, non posso che consigliarvi di farlo su LuckyAcePoker.com, skin del circuito 888. Recentemente questi tornei sono stati introdotti anche su PokerStars, ma purtroppo solo in formato turbo (cosi’ come accade sulle room di Ipoker). Per giocarli bene, pero’, e’ a mio avviso necessario che questi tornei abbiano una struttura non-turbo. Cosa che e’ possibile trovare su LAP.

LuckyAcePoker.com logo

Tra parentesi, il software in questione, leggero e ben fatto, gira indifferentemente su PC, Mac OS e Linux. Il che non e’ un male, anzi. In piu’, se vi registrate ora, avete anche l’opportunita’ di acquisire gratuitamente una licenza per Pokerbility, un interessante calcolatore di odds in grado di interfacciarsi automaticamente al tavolo sul quale si sta giocando.

Pokerbility screenshot

E in piu’ ci dovrebbe pure un freeroll per nuovi depositors con $5,000 garantiti. Come a dire… che volete di piu’?

LuckyAcePoker.com banner $5,000 new depositors freeroll

Ci si vede sui tavoli…

Che cos’e’ la robotica autonoma?

Come può un robot riuscire a portare a termine un compito in modo autonomo, senza l’intervento dell’uomo? Quale tipo di capacità deve possedere? Può sviluppare tali competenze attraverso un processo di apprendimento? Che relazione c’è tra un robot autonomo e un organismo naturale? Quali sono le nuove frontiere della robotica?

Sono queste le domande che si pone Che cos’e’ la robotica autonoma, ultima fatica di Stefano Nolfi, direttore del Laboratory of Autonomous Robotics and Artificial Life presso l’Istituto di Scienze e Tecnologie della Cognizione del CNR e, insieme a Dario Floreano, lider maximo nel campo della Evolutionary Robotics.

Stefano Nolfi, "Che cos'e' la robotica autonoma" (cover/copertina)

Il formato del libro in questione e’ un po’ inusuale. Tascabile, con soft cover, e molto molto limitato in quanto a lunghezza (poco piu’ di un centinaio di pagine). Che sia pensato per studenti ai quali serve un volume come introduzione al campo, piu’ aggiornata e meno tecnica rispetto ad Evolutionary Robotics? Puo’ essere. Non per questo, comunque, i contenuti sono frivoli o superficiali. Al contrario. I primi due capitoli, in particolare, mi hanno veramente impressionato in maniera positiva. Al loro interno un’ottima panoramica della robotica autonoma, con delineate le tappe fondamentali che hanno portato la disciplina ad evolversi cosi’ come la conosciamo noi oggi. Veramente ben fatti quei paragrafi che, appoggiandosi ai concetti di embodiment e situatedness, descrivono il comportamento di un robot autonomo come un fenomeno complesso. Fenomeno complesso inteso nel senso piu’ puro della teoria della complessita’, ovvero come proprieta’ emergente di alto livello derivante da un numero elevato di interazioni fine-grained che hanno luogo ai livelli piu’ bassi. In generale si tratta di un libro che non puo’ mancare nel bagaglio di chi lavora nel campo o anche ne e’ un semplice appassionato sprovvisto di conoscenze tecniche, non fondamentali per una buona comprensione del testo.

Che cos’e’ la robotica autonoma e’ in vendita su tutti i principali canali on line. Tra questi vi segnalo in particolare LiberOnWeb, dove il volume e’ acquistabile con il 15% di sconto sul prezzo di copertina.

Navigare all’interno di un ambiente sconosciuto? Semplice, basta chiedere…

L’idea e’ al tempo stesso stupida quanto geniale. Cosa fa tipicamente un qualunque essere umano (a maggior ragione se di sesso femminile: noi ometti, si sa, abbiamo qualche problemino a riguardo…) che deve attraversare un ambiente a lui ignoto cercando di raggiungere un certo luogo? Semplice. Chiede informazioni a chi incontra lungo il suo cammino. Perche’ dunque un robot dovrebbe essere in grado di fare il tutto in maniera completamente autonoma, senza avvalersi dell’aiuto di qualcuno piu’ esperto? Domanda legittima. A partire dalla quale un gruppo di ricerca della TUM di Monaco, guidato da Kolja Kühnlenz e Dirk Wollherr, ha fatto nascere il progetto ACE (The Autonomous City Explorer Project). Un paper a riguardo e’ stato presentato recentemente nel corso di ICRA2009 e deve essere stato notato da qualche agenzia, dato che negli ultimi giorni esplodono le segnalazioni riguardanti questo robot sparse in giro per la rete.

ACE robot (evolution)

Manifesto del progetto e’ il seguente (copio/incollo dal sito di ACE linkato qui sopra):

As robots are gradually leaving highly structured factory environments and moving into human populated environments, they need to possess more complex cognitive abilities. Not only do they have to operate efficiently and safely in natural populated environments, but also be able to achieve higher levels of cooperation and interaction with humans. The Autonomous City Explorer (ACE) project envisions to create a robot that will autonomously navigate in an unstructured urban environment and find its way through interaction with humans. To achieve this, research results from the fields of autonomous navigation, path planning, environment modeling, and human-robot interaction are combined.

Non si sa se volontariamente o meno, ma l’idea alla base di ACE assomiglia molto a quella del progetto tweenbots. Ad ogni modo, per saperne di piu’ e senza tuttavia entrare eccessivamente nel dettaglio, sappiate che anche sul sempre autorevole New Scientist e’ comparso un articolo sull’argomento, con tanto di video del robot in azione. Il progetto e’ ancora agli albori e vedremo nei prossimi anni dove ci portera’. Nel frattempo io proseguo per la mia strada e cerco di costruire robot che non abbiano bisogno di esseri umani, se non eventualmente come bersagli. Prospettiva che, per altro, si sposa benissimo con quello che recentemente e’ lo stato d’animo del sottoscritto quando pensa ai suoi conspecifici.

Pagina Successiva »