Wednesday, June 24, 2009

And in the city that doesn't sleep...

New York, the city that doesn't sleep, is once again the model and guide for all the people that would love their own city to be more technology-aware. Tuie time the city government has started collecting referrals to resources and data libraries about an from Manhattan in order to catalogate, connect and interact with these infos. What Will come out? Who knows, but as somene said "better stupid and connected than intelligent and isolated"

Saturday, June 06, 2009

Friday, May 01, 2009

De Rerum Fluentis

Interessantissimo il concetto di Fluent, analizzato recentemente per il progetto BaBL. In sostanza i metodi che dovrebbero ritornare null perchè modificano lo stato, ritornano l'oggetto stesso con lo stato modificato. Questo permette un stile di programmazione tutto nuovo, totalmente leggibile, totalmente elegante. Per ulteriori informazioni la Bliki di Martin Fowler.

Friday, February 06, 2009

SemWeb

Oggi voglio introdurvi, miei cari lettori, ad una mia ottima amica degli ultimi giorni: una libreria per lo sviluppo di network semantici. La libreria SemWeb è quanto di meglio offre il mondo open source nell'ambito delle reti semantiche per il framework .net. caratteristica estremamente interessante di questa libreria sta da un lato nella sua integrabilità con database "reali", dall'altro nella sua compatibilità con query N3 e SPARQL.
Vediamo un pò di fare un esempio semplice di network. Supponiamo di voler creare una rete semantica basata sulla mitica Facebook API (o per lo meno sui servizi REST). E supponiamo di voler organizzare in modo intelligente le informazioni per ottenere dati di marketing tali da permetterci di andare a valutare come posizionare un certo prodotto sul mercato in modo da sfruttare le caratteristiche virali di internet (si, ho sparato una sequenza di stupidate per giustificare l'uso di Facebook REST).
Partiamo dal definire le caratteristiche fondamentali di questo "gioco". Abbiamo degli utenti di facebook, i loro amici, le cose di cui sono fan, i gruppi a cui appartengono, le applicazioni che hanno installato. Date queste entità e fato il fatto che sono tutte accessibili tramite le API REST, diventa estremamente facile poter pensare al mondo facebook come insieme di triplette (entità1, relazione, entità2). In particolare avremo delle entità che potremo identificare tramite il loro indirizzo "personale" su facebook avendo facilmente l'URI di ognuna di esse. Le relazioni potremmo prenderle, effettivamente, da FOAF, ma per facilità di trattazione creiamo uno standard nostro, ad esempio "http://www.facebook.com/rel/isFriendOf".
Ora il gioco diventa semplcissimo. Ogni volta che invochiamo l'api trovando nuovi amici di un dato utente, aggiungiamo ad un MemoryStore uno statement contenente l'entità dell'utente che stiamo analizzando, il tipo di relazione "http://www.facebook.com/rel/isFriendOf" e l'entità dell'utente che abbiamo trovato come amico del primo. Questo per ogni tipo di relazione che andremo ad analizzare.
Fatto questo il MemoryStore conterrà un pò di relazioni fra utenti. Sarebbe estremamente interessante poter interrogare la raccolta di dati su relazioni particolari, come amici di schieramenti politici opposti. Per questo ci viene in aiuto SPARQL, che con un elegante sistema di codifica permette di andare a definire esattamente quella query (domani il codice di esempio della query).
Non ha senso dover rifare ogni volta l'albero (anche se magari persone si sono aggiunte o tolte). Per questo si può utilizzare l'ottimo RDFXmlWriter che trasforma la rete semantica definita nel memorystore in un file XML utilizzabile sia da Protege, che ovviamente dall'RDFXmlReader per ripartire da una rete già pronta...
Domani un pò di codice su cui pensare...

Di colli di bottiglia

ieri. ore 9.00: parte l'esecuzione dell'analizzatore del framework .net che genera la rete semantica.
ieri. ore 9.10: si conclude l'esecuzione con la creazione di un file XML delle dimensioni di 120MB. Sono circa 1500000 relazioni RDF.
oggi. ore 9.00: parte l'esecuzione dell'analizzatore del framework .net che genera la rete semantica.
oggi. ore 9.10: siamo a 10000 relazioni.
oggi. ore 12.00: siamo a 300000 relazioni.
oggi. ore 15.00: siamo a 550000 relazioni.
domani. ore 00.40: siamo a 1145723 relazioni.
domani. ore 01.15: si conclude l'esecuzione che ha riempito SQL Server 2008 con le relazioni gioiose e felici. Chissà se funzionano le query SPARQL...

Thursday, January 22, 2009

Purity and Side Effect Analysis for Java Programs - Salcianu, Rinard

Il concetto di side effect è uno dei più dibattuti degli ultimi tempi (no, non arriverà nelle case di tutti tramite porta a porta, la discussione, perchè tanto c'è il forum di Lambda the Ultimate), soprattutto a causa del suo stretto legame con i linguaggi imperativi. Il paper dei due ricercatori del MIT presenta una interessante modalità di analisi dei side effect (e quindi un modus operandi per la caccia ai metodi puri). In particolare il modo per inferire le informazioni sui side effect delle operazioni è assolutamente interessante. Peccato solo per due questioni: è tutto pensato per Java (non che il porting dei concetti sia difficile) e devo immaginare un modo per rendere il controllo dei side-effect parte integrante dell'analisi del framework .net. Pare facile...

Wednesday, October 08, 2008

Beh, beh, beh

Perchè non esistono librerie decenti che interpretino Prolog? Perchè non esistono planner per C#? perchè non si può avere la libreria AIMA con un pò di parallelismo? perchè? perchè? perchè? :@