dic 11

Che vuol dire “viaggiare tecnologici“? Per chi se lo stesse chiedendo mi sto riferendo ad una tipologia d viaggio “aiutata” da strumenti tecnologici… nel mio particolare caso l’iPod Touch!

Come sapete dal mio post precedente sono andato in vacanza a New York… ciò che non sapete invece è che per coordinare i miei spostamenti in quella città ho deciso di utilizzare unicamente il mio iPod Touch!

Se vi steste chidendo come… presto detto, tramite due utilissime applicazioni: la guida Frommer di NYC ed iTrans NYC.

Ma approfondiamo meglio che cosa fanno queste due indispensabili applicazioni per il viaggiatore che si reca nella grande mela:

Frommer’s New York è una guida della grande mela completa di cartina della città, ristoranti con giudizio e costo medio, negozi, alberghi e attrazioni turistiche (con dati, oltre alla descrizione, su orari di apertura e costi dei biglietti) e svariate informazioni generali sulla città e il modo di comportarsi. Volendo anche ci sono itinerari consigliati a seconda del periodo di permanenza. Per i possessori di iPhone è anche disponibile la rilevazione della propria posizione tramite GPS cosicché si possa essere sicuri della propria posizione ed avere le varie distanze relative di attrazioni, negozi, ecc.

frommer1frommer2frommer3

Sopra potete vedere degli screenshot dell’applicazione. Se foste interessati a maggiori dettagli il sito ufficiale dell’App è: http://www.modalitylearning.com/frommers-new-york.asp

iTrans NYC invece è un’utilissima applicazione che permette di districarsi nella complicatissima metropolitana di New York. Il programma offre, oltre ad una visione completa della mappa della metro, un sistema di path finding che calcola i percorsi per andare da una stazione ad un altra, fornisce gli orari dei treni ed eventualmente una visione in-line della linea su cui si sta viaggiando… davvero indispensabile!

itrain1itrain2itrain3

Sopra vedete vedere degli screenshot dell’applicazione. Per maggiori informazioni vi rimando al sito ufficiale che è: http://itrans.info/

Che dire… grazie a queste due applicazioni mi sono mosso rapidamente e comodamente. Ho trovato tutto molto velocemente riuscendo a pianificare al meglio gli spostamenti e le attività della vacanza!

Credo che sia un must per tutti i possessori di iPhone od iPod Touch che vogliano recarsi a New York!

dic 02

mac-powerUltimamente c’è stato un gran parlare riguardo al fatto che nei modelli più recenti della serie di portatili di Apple (MacBook a MacBook Pro) il sistema funzioni a “regime limitato” nel caso si utilizzino con la batteria rimossa. Poco dopo la diffusione della notizia tutti si sono lanciati in mille speculazioni senza avere nella maggior parte dei casi dati o specifiche oggettivi a supporto di quanto affermato.

La più popolare, ma a mio avviso anche la più improbabile, delle speculazioni è che l’alimentatore dei MacBook fosse sottodimensionato (non in grado di fornire alla macchina tutta la potenza di cui ha bisogno) rispetto alle reali esigenze di queste macchine. 

Perché la ritengo improbabile? Semplicemente perché, se effettivamente l’alimentatore fosse sottodimensionato, in caso di utilizzo “pesante” della macchina, con batteria inserita ed attaccata alla corrente, la batteria dovrebbe cessare di caricarsi ed anzi cominciare a scaricarsi, cosa che non accade (ho fatto delle prove a riguardo).

Perché quindi limitare la potenza della macchina con la batteria disinserita? Le mie ipotesi sono 2: la prima è che lo slew rate dell’alimentatore potrebbe non essere in grado, da solo, di soddisfare improvvisi picchi di consumo e, nel caso avvenissero, la batteria farebbe da tampone fino a quando l’alimentatore non fosse arrivato a regime. La seconda è che in caso di improvvisi cali di tensioni della rete elettrica l’alimentatore sarebbe in grado di “mascherarli“, se sufficientemente brevi, ma solo a patto che le richieste di potenza siano inferiori ad un determinato valore (si evita quindi lo spegnimento improvviso della macchina… cosa che ad esempio accadeva ad un mio vecchio notebook dopo che la batteria ci aveva “lasciato“).

Resta comunque che in assenza di maggiori dati tecnici tutte queste affermazioni restano mere speculazioni!

nov 26

Siamo dunque giunti al secondo appuntamento delle cronache dello sviluppo della nostra applicazione per giocare a Forza 4 e…

Annuntio vobis gaudium magnum: habemus AI” (in soldoni… abbiamo un’intelligenza artificiale)!

Inizialmente avevo pensato di sviluppare l’intelligenza artificiale del gioco seguendo rigidamente l’algoritmo MinMax con potatura Alfa-Beta ma appena cominciato ho incontrato subito un problema: la funzione di utilità!

MinMax utilizza una funzione di utilità per valutare uno stato terminale all’interno dell’albero di ricerca assegnandoli un valore numerico che ne rappresenta la “bontà“… il problema è come decidere se uno stato è migliore di un altro (ovvero con che criterio la funzione utilità ritorna un determinato numero ricevendo come argomento un determinato stato). Alla fine ho deciso di optare per una valutazione basata sulla profondità!

Nell’attuale implementazione dell’AI un a soluzione è preferibile ad un’altra principalmente se è a profondità inferiore (ma anche rispetto ad altri fattori). Non essendo però del tutto ancora convinti di come gestire la componente “avversaria” all’interno della ricerca della strategia giusta (la componente Min dell’algoritmo MinMax) abbiamo deciso di usare l’idea di fondo di MinMax per costruire un nuovo algoritmo che avremo patchato “on the way” che ci avrebbe aiutato a comprendere quali fattori sono veramente importanti nella ricerca della soluzione ideale in Forza 4 (per poi, in una fase successiva dello sviluppo, usarli per la costruzione della funzione utilità dell’algoritmo MinMax della versione finale).

L’attuale algoritmo procede nel seguente modo:

  1. Prendeo stato attuale del gioco e per ognuna delle sue 7 (o meno se alcune colonne sono piene) possibili mosse inizia un iter di valutazione per scegliere la migliore. Innanzitutto si sincera che facendo quella mossa l’avversario non possa vincere al turno immediatamente successivo oppure che non possa creare una composizione a tris inbloccabile che porterebbe l’avversario a vincere il turno successivo ancora ( _XXX_ ad esempio è una configurazione a tris inbloccablie perche indipendentemente dal bloccare a destra o a sinistra l’avversario farà comunque 4 al turno dopo)
  2. Se le condizioni sopracitate sono rispettate dalla mossa allora l’algoritmo genera 2 alberi di ricerca: uno che cerca la vittoria a profondità minima per l’AI (quando trova una vittoria ad una determinata profondità nel continuare a cercare altre soluzioni migliori non scenderà mai a profondità superiori di quelle della soluzione già trovata “potando” così l’albero) ed uno che cerca la vittoria a profondità minima per l’avversario.
  3. Una volta calcolata la profondità minima della vittoria grazie agli alberi di ricerca controlla se la propria è minore di quella dell’avversario… l’algoritmo predilige scegliere mosse che abbiano profondità di vittoria inferiori a quelle dell’avversario. Non sempre però questo è possibile… in ogni caso a questo tipo di mosse viene data una priorità più alta.
  4. A questo punto si controlla se questa mossa ha una profondità minore rispetto alla mossa selezionata come migliore precedentemente, la profondità è inferiore la mossa da effettuare viene aggiornata selezionando quella attuale altrimenti se ha profondità uguale si continua la valutazione.
  5. Se la valutazione continua si controllerà se la vittoria avversaria è più lontana in questo caso che nella mossa già selezionata… in caso affermativo la mossa da fare viene aggiornata con la corrente, se invece la profondità è uguale si continua la valutazione.
  6. Se la valutazione continua si controlla se questa mossa è più centrale rispetto alla precedente. Questa decisione si basa più su un’impressione empirica che ho del forza 4, cioè che una mossa centrale è preferibile ad una laterale (non sempre ma in generale); Se anche in questo caso la centralità è identica (per centralità si intende la vicinanza alla colonna centrale) si tira a caso (tramite funzione random) se aggiornare o no la mossa.
  7. Se nell’iter precedente non si è riusciti a trovare una mossa significa che si sta per perdere (a meno di una grave disattenzione dell’avversario) e quindi si cercherà di giocare una mossa che per lo meno non ci faccia perdere al turno successivo… sia mai che l’avversario sia poco scaltro e non riesca a vincere nonostante il vantaggio!

L’AI sviluppata è passabilmente brava (ma potrebbe essere molto meglio) e stiamo lavorando ad ulteriori metodi che le permettano una maggiore attenzione alle mosse avversarie ed una migliore valutazione delle mosse (ad esempio preferire una mossa che porta ad un tris con possibilità di evolvere in un 4 o mosse che portano ad una composizione tipo xx_x sono preferibili a mosse che “non lo fanno“).

Nel frattempo potete scaricare quanto fatto fin’ora da questo pacchetto compresso contenente tutti i sorgenti: Forza4-v0.1

Come nella versione precedente il software è rilasciato sotto licenza GNU GPL v2. Per far partire il programma eseguire la classe Test editando il metodo “main” per scegliere la modalità di gioco (PC vs. PC, Umano vs. PC, PC vs. Umano) decommentando (togliendo il “//” che sta davanti al nome del metodo) l’istruzione che fa partire il metodo della modalità di gioco prescelta (commentando ovviamente quella che parte di default che è PC vs. PC).

P.S.: siccome l’AI fa ampio uso dello heap è possibile che le impostazioni di default di Java siano insufficienti per il suo corretto funzionamento quindi può essere necessario dover aumentare l’heap a 256 MB (di default sono 128MB) usando da terminale il comando “java -Xms32m -Xmx256m”. 

nov 20

Ebbene signori, siccome nella mia vita ho abbondanza di tempo libero (spero si sia notata l’ironia delle mie parole), ho deciso di unire la mia passione per il forza 4 (famoso gioco da tavola) ed i miei recenti studi nel campo delle intelligenze artificiali per creare un applicazione dotata di AI per il succitato gioco!

L’obiettivo finale sarebbe quello di creare un’applicazione per iPhone ed iPod Touch ma siccome ho deciso di procedere per gradi la fase di studio dell’AI verrà fatta “codando” in Java.

Come cominciare quindi? Si inizia sviluppando l’ambiente in cui andrà ad operare la nostra intelligenza artificiale… cioè il “campo” di gioco. Scriveremo quindi la classe Java “Board” che conterrà come variabile una matrice di interi di 6 righe per 7 colonne (la rappresentazione del campo di gioco ufficiale) con i metodi relativi alla sua gestione:

  • Costruttore
  • Metodo di inizializzazione della matrice
  • mossa (inserimento di un gettone da parte di un giocatore)
  • controllo sul fatto che una mossa sia possibile
  • controllo se un giocatore ha vinto
  • controllo sul fatto che il gioco sia finito o no (vincita di un giocatore o Board piena)
  • metodo di “stampa” della board
  • getters e setters

Nella matrice del campo di gioco il valore 0 starà a significare casella libera, il valore 1 gettone del giocatore 1 ed il valore 2 gettone del giocatore 2. Nel metodo di controllo della vincita di un giocatore ho cercato di strutturare l’algoritmo in modo che esegua il minor numero possibile di calcoli, anche a costo di una aumento della complessità del codice, poiché questo sarà utilizzato tantissimo dall’AI quindi anche un piccolo risparmio in termini di calcolo sarà sicuramente apprezzato dal processore!

Il codice sorgente della classe Board è liberamente scaricabile da qua (licenza GPL v2): Board.java

Per testare il funzionamento della classe “Board” è stata scritta una classe “Test” che inplementa una versione rudimentale del gioco (via console) priva di intelligenza artificiale (essere umano vs. essere umano).

Il codice sorgente della classe Test è liberamente scaricabile da qua (licenza GPL v2): Test.java

Per il seguito della progettazione e dello sviluppo del gioco di Forza 4 vi invito a seguire il Blog nei prossimi giorni!

P.S.: Si ringrazia il Dott. (in Ingegneria Informatica) Marco Casiero per la collaborazione al progetto.

nov 18

Girando su internet mi sono imbattuto in questo spassosissimo video che racconta come sarebbero andate le avventure di Neo e amici se Matrix si fosse basato sul sistema operativo di Microsoft…

nov 07

quicksilver-logoIo, da tempo immemore (praticamente dal giorno dell’acquisto del mio primo Mac), uso QuickSilver come launcher per le applicazioni su OS X… ai tempi di Tiger questa scelta era decisamente ragionevole in quanto Spotlight di default non evidenziava quello che riteneva il miglior risultato della ricerca obbligando l’utente a scendere con le frecce direzionali prima di poter premere invio ed aprire l’applicazione cercata, al contrario QuickSilver dopo la pressione delle prime iniziali del nome dell’applicazione consente di aprirla istantaneamente premendo invio (risparmiando così parecchio tempo all’utente). Adesso con Leopard sono però cambiate le cose in quanto Spotlight evidenzia di default il miglior risultato della ricerca permettendo di aprirlo subito tramite invio… proprio come QuickSilver!

A causa di questa “sovrapposizione” di funzionalità lo sviluppo di QuickSilver è stato anche abbandonato (a dire il vero funzionava egregiamente quindi non è che si risenta dell’abbandono dello sviluppo… tra l’altro mi pare sia stato rilasciato sotto licenza Open Source quindi se qualche anima pia volesse riprendere a lavorarci il supporto ricomincerebbe).

Nonostante questa sovrapposizione di ruoli, per abitudine, ho continuato ad usare QuickSilver anche sotto leopard limitando l’uso di Spotlight alle ricerche di altro tipo (tutte eccetto quelle per le applicazioni).

La settimana scorsa però mi sono chiesto se non fosse effettivamente uno spreco utilizzare contemporaneamente 2 programmi per l’indicizzamento invece di uno solo e ho quindi provato ad abbandonare del tutto l’uso di QuickSilver in favore di Spotlight.

Dopo una settimana di prova sono infine giunto ad una conclusione… per il lancio delle Applicazioni QuickSilver è ancora la scelta migliore! Per quanto Spotlight sia estremamente rapido (parimerito con QuickSilver) e sia estremamente preciso con le ricerche ha un difetto fondamentale: il suo algoritmo mette in posizione più alta nella ricerca quei file che sono stati aperti per ultimi rendendo dinamico il risultato di una ricerca. Per farvi un esempio… se digito le lettere “ma” per aprire Mail è probabile che il “risultato migliore” sia per l’appunto Mail ma se ho aperto programmi che hanno un “ma” nel nome (tipo TextMate) dopo l’ultima apertura di Mail saranno questi a venire evidenziati di default… in soldoni a parità di lettere cercate il risultato cambia a seconda del precedente uso del computer. In assoluto questa strategia di ricerca è vincente… ma ma si sposa all’utilizzo come launcher!

QuickSilver invece adotta un approccio differente da Spotlight… adatta le ricerche dell’utente ai risultati da lui precedentemente selezionati. In questo modo so per certo che alla pressione di determinati tasti corrisponedrà sicuramente l’apertura di un determinato programma! Se ad esempio premo “m” ed invio aprirà sicuramente Mail (questo perché le prime volte che scrivevo “m” dalla lista dei risultati sceglievo Mail e quindi ci si è abituato iniziando a preselezionarlo di default), se premo “t” aprirà il Terminale, “te” aprirà TextMate e così via! In sostanza il software si adatta alle abitudini dell’utente rendendo molto più immediato il lancio delle applicazioni!

Concludendo… per quanti fossero indecisi se abbandonare o no QuickSilver il mio consiglio è di tenerselo ben stretto, per chi invece non lo usa il mio consiglio è di cominciare a farlo!

nov 05

intel_core_i7_logoNehalem (il cui nome commerciale sarà “Core i7″) è il nome in codice della nuova architettura che Intel introdurrà nella sua prossima generazione di processori… ed è un po’ una piccola rivoluzione! 

Già presentata in occasione dell’IDF di Settembre del 2007 Nehalem tiene fede alla tanto nominata cadenza “tick tock” che prevede, con alternanza di un anno, il cambio di architettura (tock) o di processo produttivo (tick).

Nehalem è quindi sviluppato con processo produttivo a 45 nm e solo nel 2009 saranno introdotte le prime versioni “ridotte” a 32 nm che cadranno sotto il nome in codice di Westmere.

Tanto per fare un piccolo elenco delle novità di questa architettura:

  • Gestione dinamica dei core, dei thread e della cache
  • Cache L3 per lo scambio dati tra i core
  • Memory Controller integraro con eliminazione del Front Side Bus
  • Possibilità di grafica integrata
  • Possibilità di avere sino a 8 core
  • Simultaneous MultiThreading (SMT) che permette digestire un maggior numero di thread senza aumentare i consumi 

Il Front side bus (che per la cronaca è il bus che collega la CPU al controller della memoria) è stato eliminato in quanto questa nuova generazione di CPU integra direttamente al suo interno il Memory Controller affiancandolo alla tecnologia Quick Path Interconnect (chip di interconnessione, caratterizzato da una bi-direzionalità dei dati) ottimizzando così la gestione e lo scambio di informazioni tra i core dello stesso processore. 

Le prime versioni di Nehalem integrano controller a triplo canale, ciò significa che, per riuscire a sfruttare la massimo la piattaforma non saranno più sufficienti due moduli di memoria, bensì tre. Con l’introduzione dei controller a tre canali aumenta in modo esponenziale la banda passante, garantendo così un costante afflusso dei dati alla crescente potenza di calcolo presente in questa nuova famiglia di processori.

nehalemdie

Il Simultaneous MultiThreading “ricicla” la tecnologia HyperThreading utilizzata da Intel all’interno dei Pentium 4 che permette ad un singolo core di indirizzare, allo stesso tempo (sdoppiandolo virtualmente), non più una sola operazione, ma due. Questo viene reso possibile tramite lo sfruttamento dei tempi morti presenti durante l’esecuzione dei processi.

La cache di questa nuova architettura poi si struttura su 3 livelli: un L1 da 64KB (stessa dimensione di quella dei Penryn), un L2 da 256KB per core (nei Penryn erano 6MB condivisi da tutti i core) ed un L3 da 8MB (che perà potra aumentare a seconda del numero di core). 

La cache L3 andrà a sostituire, in parte, il ruolo che in Penryn occupava quella L2. Inizialmente, nei primi modelli quad-core, sarà di 8 MB, ma varierà a seconda del numero di core. Come da sempre, questa cache sarà di tipo “inclusivo” e non “esclusivo”. Il termine inclusivo implica il fatto che la cache di terzo livello integri, al suo interno, anche i dati presenti nelle cache L1 e L2. 

Che dire d’altro… aspettiamo con ansia l’immissione sul mercato di questo piccolo gioiellino d’ingegneria che segna la fine di un’era e l’inizio di un’altra! 

ott 31

Recentemente Apple ha totalmente rimosso da tutta la sua linea di portatili lo schermo opaco (precedentemente  disponibile come opzione gratuita su tutti i modelli di MacBook Pro)… e subito tutti a gridare alla tragedia! Sembra che senza schermo opaco sia impossibile lavorare… eppure ormai la maggior parte dei portatili lo utilizza (che si questa la causa della crisi economica mondiale? Tutti hanno lo schermo lucido e nessuno lavora più!). Aggiungiamo poi che, secondo la mia modesta opinione, gli schermi lucidi son ben più belli di quelli opachi… colori decisamente più brillanti e vivi!

La mia passione per gli schermi lucidi nasce ben prima del mio passaggio ad Apple… risale ai  tempi del mio primo portatile Sony Vaio (2004) che aveva uno schermo lucido con tecnologia X-Black. Da subito i colori mi risultavano ben più belli e brillanti che sullo schermo LCD della Olidata che usavo sul computer desktop… e addirittura il passare dallo schermo del Vaio all’Olidata mi provocava fastidi in quanto mi sembrava che questo fosse rotto a causa della minore qualità di colori e definizione (non che l’Olidata fosse uno cattivo schermo.. anzi… solo che passare dall’uno all’altro urtava la vista a causa della differenza qualitativa ). Sicché, per ovviare a questo problema, decisi di sostituire LCD della olidata con uno schermo lucido Sony  anch’esso dotato di tecnologia X-Black.

Fui soddisfattissimo dello scambio e tuttora uso ancora quello schermo con grande soddisfazione (o come schermo secondario dell’iMac o come schermo del mio “computer per test”). Successivamente tutti i portatili e i monitor dei computer che ho comprato sono stati a schermo lucido e mi hanno sempre dato grandissima soddisfazione!

Considerando poi che io passo almeno 15 ore al giorno davanti allo schermo di un computer se effettivamente quelli lucidi rendessero meno confortevole, se non impossibile, il lavoro credo che me ne sarei accorto! I riflessi sono senz’altro maggiori che con uno schermo opaco ma, a meno che la fonte di luce sia particolarmente intensa ed esattamente di fronte al monitor, assolutamente insignificanti se paragonati al guadagno in termini di qualità dei colori (io i riflessi li vedo solo se mi impegno sforzandomi di  metterli a fuoco).

Alla fine ho il forte sospetto che, come al solito, tutta questa storia sia una pura questione di gusti o abitudini… come sempre l’essere umano ha la tendenza a credere che il mondo abbia le sue stesse esigenze o preferenze stigmatizzando tutto ciò che differisce da queste!