Home    About me    Publications    Blog    Undergrad memories

Fabio Ruini's blog

'cause Italians blog better

Archivio per novembre, 2009

Le migliori app per iPhone (inverno 2009) e guida per gli acquisti Mac

Macity ha pubblicato oggi un articolo dove si segnala la disponibilita’, a partire da domattina, della nuova edizione di Juice 2, un simpatico e-book che avevo molto apprezzato nella sua ultima incarnazione, dove tra le altre cose elencava 50 curiosita’ legate a Snow Leopard. La nuova versione dell’e-book e’ preparata in vista dell’imminente periodo natalizio e promette di essere una lettura interessante.

PC vs Mac (car drivers)

Domani ne sapremo di piu’. Spero soltanto che tutto questo non finisca per accentuare ulteriormente il mio prurito relativo all’iMac 27″. Per ora mi frena il fatto di non avere a casa una scrivania sufficientemente capiente (gia’ occupata per piu’ di meta’ dal mio Dell 23″). Ma trasformarla in una sorta di monitor unico, corredato da tastiera e mouse wireless non sarebbe un’idea cosi’ malsana come potrebbe sembrare. Per motivi veramente scientifici, naturalmente.

Share

Resistenza psicologica

Direi che se non sono tiltato durante questo weekend, in vita mia non tiltero’ mai piu’. E sono pure riuscito a venirne fuori con un minimo di profitto (grazie al solito blackjack joker). Si parte ieri sera, con il tradizionale torneo da £20+5.5 triple-chance del sabato. Assolutamente cards dead, finisco la prima ora sotto di 1k rispetto alla partenza. Non ricordo una volta in cui non sono riuscito a raddoppiare la prima puglia di chips. Al rientro dal break, con 8k chips, perdo qualche buio e mi ritrovo a 7.2k. Ed arriva la mano. Tavolo 8-handed abbastanza sensato. UTG raisa a 800 su bui 100/200; il chip leader alla sua sinistra re-raisa a 4k, il giocatore dopo, con 6.5k va all-in. Due fold ed e’ il mio turno. Guardo le mie carte giusto per curiosita’, gia’ pronto a foldarle, quando trovo due assi. Non un gran spot, ma mi tocca. Pusho a mia volta. I bui ed il raiser originario foldano, mentre il chip leader deve aggiungere relativamente poco per chiamare e lo fa. Giriamo AA, KK (quello con 6.5k chips) e QQ (il chip leader), mentre il raiser originario dichiara a sua volta una coppia. Al flop subito un K e la mia avventura al torneo si chiude qui.

Poker player on tilt

E’ ancora presto e decido quindi di spostarmi al tavolo cash, al quale mancavo da tempi immemori. Una disperazione anche qui. Mai una mano giocabile. Pesco una volta QQ, raiso da UTG ed un tizio re-raisa all-in da middle. Tutti fold, lui ha solo £60 dietro e pur non contento chiamo. Un K al board mi fa preoccupare, ma quando mostro QQ lui mucka. La fortuna torna comunque indietro poco piu’ tardi, quando mi trovo ancora in una situazione simile. UTG+1 raisa a £8, UTG+2 pusha per £25 totali, io mi trovo con QQ e vado di isolamento re-raisando a £60 totali. Tutti fold incluso il raiser originario (AK), sono contro una coppia di 4 ed il 4 cade puntuale al flop. Per il resto passo le ore a foldare. Unico sussulto quando ho in mano AK da UTG+1, raiso a £4 e trovo 2 callers. Flop K94 con due fiori. Il SB pusha per circa £30, il BB re-pusha per £70 ed io devo lasciare andare la mano. Nel grigiore assoluto delle mie carte (che quando le vedo devo pure foldarle, come capitato con un paio di coppie, rigorosamente non settate, e con un AJ su flop A-high dove trovo raise e re-raise), riesco comunque a vincere un paio di piatti (ovviamente in bluff totale). Spettacolo solo alla mia penultima mano, quando hitto un poker di 4 runner runner, dal quale comunque ricavo solo pochi spiccioli. Dopo una sessione da 6 ore abbondanti chiudo con un +£50.50. Ancora mi chiedo come sia stato possibile, data la robaccia che ho visto, ai limiti dell’impossibile.

Convinto che ormai i dei del poker si siano sfogati a sufficienza, oggi pomeriggio me ne vado in universita’ per il torneo della UPPS. Avendo mancato l’appuntamento la scorsa settimana, ho perso la vetta della classifica scivolando addirittura in quinta piazza. Peccato che perdo mezzo stack contro una bella scala ad incastro che si chiude al river, in una mano decisamente comica. Tutti fold a me, che ancora dovevo giocare una mano, da middle. Opto per un raise di 3BB con Q3-o in mano. Chiama soltanto il giocatore subito dopo di me. Al flop QAT con due quadri. Punto tre quarti di piatto e lui mi manda la vasca. Sono gia’ pronto a passare, quando lui, per sbaglio, pensando che avessi chiamato, mi mostra il suo TJ. A questo punto non posso foldare. Call. Ottima Q al turn che mi da’ il set. Pessimo K al river che mi manda sul lastrico. Passa un giro di bui, e rimango con 900 chips su bui 100/200. Spillo AQ dopo un raise, vasco e vengo chiamato da BB e raiser originario, rispettivamente con A2 ed AK. A2 vince la mano ed io vado a casa.

E’ ancora presto. Sono in tempo per il torneo della domenica al casino. Un £35+5 deep-stack. Raccatto un amico e andiamo. Manco clamorosamente i primi due flop che gioco, poi vinco un paio di piatti e salgo di circa 1k sopra la partenza. Quando arriva la mano che mi fa meditare l’omicidio. Pot non aperto, sono sul bottone con 67-s e limpo dentro. Siamo in 5. Il flop esce 892 rainbow. Tutti check a me che decido di giocarmi il bet in maniera aggressiva e betto 2/3 pot. Trovo due caller. Al flop cade un 4 e ancora tutti checkano a me. Aumento l’intensita’ e betto piatto. Trovo stavolta solo un cliente. Al river arriva il T che mi da’ la scala. Ottima carta, dato che una delle mani sulle quali mettevo l’oppo rimasto era 9T. Punto forte e l’avversario mi raisa ancora piu’ forte. In fondo alla mia mente c’e’ JQ nella sua mano. Solo, penso, non puo’ essere cosi’ idiota da avermi chiamato a tutte le strada con JQ in mano. Chiamo. Mi gira JQ e mi dimezza lo stack di partenza. Senza parole. Sono in uno stato mentale che definire “depresso” sarebbe riduttivo. Corto tutto il torneo arrivo non si sa come al tavolo finale. Qui, grazie al cielo, la prima mano della sera (o, meglio, la seconda… la prima e’ stato un AA al quale tutti hanno foldato pre-flop): KK dal bottone dopo 4 limp su bui alti. Io, corto, non posso far altro che pushare. Per fortuna trovo quello che non mi crede e mi calla con 77. I miei caproni miracolosamente reggono. Diminuiscono i players e rimaniamo in 5, con tre a premio. Sono il piu’ short, ma con un double-up tornerei in partita. Tutti fold a me nello SB, dove spillo A9 a fiori. I bui sono 400/800 ed io ho circa 8.5k chips. Nel BB ho il chip leader. Vado per un raise committante a 3k, pronto a chiamare un re-raise all-in. Il BB flat calla. Flop K84 con due fiori. Ci penso un po’ e mando la vasca per i miei 5.5k rimasti. Il BB ci pensa e mi calla con Q8-o. Ho una tonnellata abbondante di outs (sono circa al 53%), ma naturalmente li manco tutti. E me ne vado a casa in quasi-bolla.

Share

Full Tilt Poker cards & CImg Library

Non avevo ancora menzionato qui sul blog il fatto che, durante la trasferta in terra napoletana, ho finalmente trovato un collega disposto a cimentarsi nell’apparentemente titanica impresa di creare un software capace di giocare un buon poker. Stiamo ora discutendo via email come procedere. L’idea, ad ogni modo, e’ quella di provare prima di tutto a sviluppare un HUD specifico per non piu’ di una o due room. Poi, una volta in possesso di questo strumento, iniziare a ragionare su tematiche di piu’ alto livello.

Va da se’ che per un po’ di tempo ci sara’ da rognare in C++. Sviluppare un HUD non e’ uno dei compiti in assoluto piu’ ardui a cui un programmatore possa dedicarsi, ma si tratta di qualcosa di sicuramente tedioso. Uno dei primi problemi da risolvere consiste nel riconoscere le carte presenti sullo schermo. Per fortuna (almeno in tutte le poker room di mia conoscenza) le carte occupano sempre la medesima posizione all’interno della finestra/tavolo di gioco. Le carte tipicamente utilizzate per l’Hold’Em, poi, tendono ad avere un sorta di “riassunto” negli angoli. Cosa che agevola il compito di riconoscimento, dato che non vi e’ la necessita’ di leggere l’intera carta, ma solo un subset di pixels.

Armato di certosina pazienza, ho scattato una raffica di screenshot da un po’ di sessioni di gioco random di Full Tilt Poker e poi mi sono ritagliato (manualmente) le singole 52 carte. Siccome sono buono, le metto pure a disposizione di chiunque potesse averne bisogno. Preciso che il formato in cui sono salvate e’ il PNG.

Full Tilt Poker - cards database (screenshot of a subset)

Per quanto riguarda poter riconoscere le carte via software, occorre appoggiarsi ad una libreria di image processing. Girovagando per la rete mi sono imbattuto in qualcosa che potrebbe fare al caso mio, vale a dire The CImg Library, dove CImg e’ un acronimo per C++ Template Image Processing Toolkit.

CImg logo

A questo indirizzo e’ possibile trovare una breve overview relativa a CImg, comprensiva della classica applicazione “Hello World!”, il
cui sorgente, come potete vedere, e’ davvero breve, semplice e pulito.

Per quanto riguarda la compilazione su Mac OS, occorre tenere presente che CImg si appoggia sulla infrastruttura X11. Per questo motivo, nel momento in cui si richiama g++ e’ necessario istruirlo a riguardo. La sintassi per farlo e’ simile a quella qui sotto.

$g++ -o hello_world hello_world.cpp -O2 -lm -lpthread -L/usr/X11R6/lib -lm -lpthread -lX11

Di seguito, il risultato finale. Venuto fuori al primissimo tentativo.

CImg "Hello World!" application running on Mac OS X Snow Leopard through X11

Le premesse sono senz’altro buone. Ora vediamo un po’ come si comporta la libreria quando si importano e si leggono immagini.

Share

CRNS Poster Session, reti bayesiane ed altri dettagli sul Sun Grid Engine

Dopo essermi perso ieri, causa indisposizione, la giornata inaugurale del workshop inaugurale del CRNS, recupero oggi in tempo per la poster session. Pronti via ed alle 8.30 ero gia’ in universita’, alla ricerca di un posto dove appendere il mio poster. Ho pescato una posizione buona in quanto a visibilita’, ma purtroppo non avevo valutato un altro aspetto. Il fatto che fossi a grandi linee tra due porte e che quando queste si aprivano insieme entravano ventate di aria gelida, che oltre a rischiare di buttare giu’ tutto penetravano come ridere fin alle mie ossa. Decisamente quello che ci voleva dopo cio’ che ho passato negli ultimi due giorni.

Poster session during CRNS inaugural meeting (Ruini, UAVs, University of Plymouth, November 2009)

Interessante una chiacchierata che ho fatto con il buon Simon Oliver, il quale ha deciso che devo finalmente addentrarmi nel campo delle reti bayesiane. Condividendo entrambi nozioni matematiche che per non chiamare limitate potremmo comunque definire “creative”, ha saputo indicarmi a due articoli che a suo dire dovrebbero fare al caso mio. Trattasi di Bayesian Networks without Tears, di Eugene Charniak, e A Tutorial on Learning with Bayesian Networks, un technical report interno a Microsoft scritto da David Heckerman. Nel weekend spero di riuscire a dare un’occhiata ad entrambi.

Example sketch of a Bayesian Network

Nel pomeriggio si torna alla vita normale, con un po’ di burocrazia ed un po’ di lavoro. Da quest’ultimo punto di vista mi concentro di nuovo sul Sun Grid Engine e riesco, nonostante qualche rogna che non manca mai, a configurare come execution hosts anche i nodi 3 e 4 di P-ARTS. Tutte e 4 le macchine, oltre all’iMac che assolve le funzioni di controller, sono ora connesse in una grid fatta come si deve. Ora bisogna capire un attimo come fare a creare le varie code necessarie e soprattutto studiare un metodo ottimale, ma oserei dire che il piu’ e’ fatto. Ah, anche come compilare le applicazioni e renderle eseguibili su tutte le macchine (che pure possono accedere ad un file system NFS condiviso) senza incorrere in problemi di linkaggio/librerie mancanti e’ un problema non banalissimo che affrontero’ nel dettaglio la settimana prossima.

QMON, l’interfaccia grafica per il controllo della grid che la scorsa settimana non voleva saperne di avviarsi se lanciata da root (rendendola di fatto inutilizzabile) e’ rientrata nei ranghi. Per convincerla e’ stato sufficiente aggiornare X11 e poi modificare il file .profile dell’utente root, definendo la variabile d’ambiente DISPLAY=:0.0.

Rimane un grosso problema con l’installer, che non permette di installare nuovi execution hosts se non contestualmente all’installazione del master host. Problema che dovra’ essere risolto, ma per il quale temo non ci siano grossi margini di intervento. Scrivere a Sun sarebbe pero’ una bella cosa e dovrei farla al piu’ presto.

Share

Staples e PDF-X

Quindici poster stampati su sedici consegnati. Secondo voi quale poteva mai essere l’unico del lotto a restituire errori? Risposta esatta. Il mio. Nonostante una condizione fisica precaria (dopo le vicissitudini di ieri sera, oggi mi sono svegliato con un cerchio alla testa che vi lascio immaginare) che mi ha costretto a boicottare il primo giorno del meeting inaugurale del CRNS, nel pomeriggio ho raccattato i miei resti e me ne sono andato al negozio Staples di Plymouth per cercare di risolvere l’inghippo. Il poster, durante i due tentativi fatti dal personale la scorsa settimana, veniva sempre e soltanto stampato fino a meta’.

PDF logo

Senza accennare al problema, chiedo di stampare il tutto. Ancora una volta la stampa arriva fino a meta’ e poi si blocca. Viene chiamato un tecnico, che in un attimo ha pronta la sua soluzione: “e’ il buffer della stampante”. Io rimango un po’ perplesso (il file e’ di 2MB e sicuramente non il piu’ pesante del lotto), ma sto al gioco. Altro tentativo, ma stavolta la stampa non parte proprio. Prova e riprova, la stampante non vuole piu’ saperne. La commessa (chissa’ com’e’ che per certe cose mandano sempre avanti le donne) viene da me e con aria sconsolata mi chiede (nonostante gia’ lo sapesse, per via di una conversazione avuta in precedenza): “Purtroppo non riusciamo a stamparlo. L’hai creato con Mac, vero?”. Rispondo affermativamente e lei, che non attendeva altro, replica “Purtroppo quello e’ il problema, non riusciamo a stampare files Mac”. Provo a convincerla del fatto che, si’, l’ho creato con Mac, ma trattasi di un file PDF. Niente da fare. Riesco perlomeno a concordare qualche tentativo extra. Torno a casa e provo a convertire il file originale (in Pages) in ogni formato possibile. Non molti a dire il vero. E manca anche la possibilita’ di esportare in JPEG come mi era stato richiesto (per quanto anche questa richiesta avesse suscitato in me una qualche perplessita’). Di fatto me ne torno in negozio dopo una mezz’oretta con un file PostScript ed un fantomatico PDF-X, che non ho la benche’ minima idea di cosa sia. Dal canto suo, il commesso che mi tocca non sapeva manco cosa fosse un .ps. Fatto sta che lo mandiamo in stampa, ma gia’ dai primi centimetri di carta che escono dalla stampante ci accorgiamo che c’e’ qualcosa di quantomeno sbagliato. Altro tentativo fallito. Non rimane che provare quei simpatici 15MB di file PDF-X. Che a sorpresa si caricano. La stampa parte. Si grida al miracolo, ma arrivati a meta’ poster ancora una volta stampante ferma. Dopo aver imprecato, in coro con l’intero negozio, buona parte dei fautori delle principali religioni monoteiste mondiali, sto per rassegnarmi. Quando uno del commesso si accorge dell’inghippo. “Cazzo, e’ finita la carta”. Proprio cosi’, la carta nella stampante era finita’ a meta’ esatta del mio poster. Rotolo nuovo (non glossy, perche’ quello gliel’ho finito) e via di nuovo con la stampa, che questa volta va a buon fine. Habemus un poster, signori. Ci e’ voluto quasi piu’ tempo che non a portare a termini la ricerca sottostante, ma ce l’abbiamo fatto.

Ora mi rimane solo un dubbio. Che stracazzo e’ quel formato PDF-X? Un documento recuperato sul supporto Apple dichiara che PDF-X is a subset of PDF that’s used in the printing industry and contains the minimum information needed to print the document. Wikipedia conferma la tesi. Ma allora, se si tratta di un subset dello standard, perche’ il PDF originario era di 2MB e quello nuovo di 15? Misteri dell’informatica.

Share

Pagina successiva »