Tesi di Laurea - e-Lite
Transcript
Tesi di Laurea - e-Lite
POLITECNICO DI TORINO III Facoltà di Ingegneria Corso di laurea specialistica in Ingegneria Informatica Tesi di Laurea Blog multimediale automatico di azioni contestualizzate di utenti mobili Candidato: Luca Costabello Relatore: Prof. Fulvio Corno Tutor aziendale: Laurent Walter Goix Novembre 2007 Ai miei Genitori Indice 1 Introduzione .............................................................................................................7 1.1 1.2 1.3 1.4 1.5 2 Il diario giornaliero context-aware: tecniche di generazione note....................13 2.1 2.2 2.3 2.4 2.5 3 La Context-Awareness.....................................................................................17 Il contesto di un utente.....................................................................................18 Scenari applicativi ...........................................................................................20 Context-Aware Platform.......................................................................................21 4.1 4.2 4.3 4.4 4.5 4.6 4.7 5 Pepys................................................................................................................13 MobiLife Life Blogging ..................................................................................14 ActionLog ........................................................................................................14 Context awareness and User Models...............................................................15 Altri lavori .......................................................................................................16 Applicazioni Context-Aware ................................................................................17 3.1 3.2 3.3 4 Scopo della tesi ..................................................................................................7 Servizi Context-Aware e la piattaforma CA......................................................7 I blog e la generazione automatica di contenuti context-aware.........................8 Architettura di riferimento.................................................................................8 Organizzazione della tesi.................................................................................10 Descrizione generale........................................................................................21 Architettura funzionale, server side.................................................................21 Context Brokering: i componenti ....................................................................23 Context Provider..............................................................................................24 Piattaforma client side .....................................................................................26 Il linguaggio ContextML .................................................................................28 Tecnologie usate ..............................................................................................30 Raccolta e clustering dei dati di contesto.............................................................33 5.1 Panoramica generale........................................................................................33 Indice 5.2 5.3 5.4 5.5 5.6 5.7 5.8 6 Raccolta dei dati di contesto............................................................................34 I dati di contesto: caratteristiche generali........................................................38 Cluster Analysis applicata al tracking di un utente .........................................41 Algoritmo “Compare&Merge”........................................................................43 Algoritmo “MultiLevel Sliding Window” (MLSW).......................................45 Il clustering e la percezione dell’utente...........................................................50 Implementazione .............................................................................................52 Generazione e pubblicazione dei Blog Post.........................................................53 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 7 Introduzione.....................................................................................................53 La struttura del testo ........................................................................................54 Personalizzare il testo ......................................................................................58 Natural Language Generation..........................................................................59 Il blog strutturato: Microformats .....................................................................62 Integrare elementi multimediali: TeamLife Portal ..........................................69 La piattaforma di Blogging: WordPress MU ..................................................74 Il blog post pubblicato .....................................................................................76 Implementazione .............................................................................................76 La creazione del VideoBlog ..................................................................................79 7.1 7.2 7.3 7.4 7.5 Architettura generale .......................................................................................79 Il VideoBlogML ..............................................................................................80 La Libreria MING ...........................................................................................82 Creare il Videoblog .........................................................................................84 Pubblicare il VideoBlog ..................................................................................88 8 Scenari abilitati......................................................................................................91 9 Conclusioni e sviluppi futuri ................................................................................93 9.1 9.2 9.3 Risultati ottenuti ..............................................................................................93 Problemi aperti ................................................................................................94 Sviluppi futuri..................................................................................................94 10 Bibliografia.............................................................................................................97 11 Ringraziamenti ....................................................................................................101 6 Introduzione 1 Introduzione 1.1 Scopo della tesi Il presente lavoro di tesi è stato svolto all’interno del progetto Context Awareness and Ambient Intelligence del Telecom Italia Lab e ha avuto come obiettivo la progettazione e lo sviluppo di un generatore automatico di blog contestualizzato. Il software crea quotidianamente i blog post che descrivono le azioni svolte durante la giornata dagli utenti registrati al servizio, includendo anche i contenuti multimediali acquisiti. Tutto questo avviene in modo completamente automatico. Oltre ai blog post in forma testuale, il generatore mette a disposizione degli utenti un video-diario, anche questo generato automaticamente. Il software realizzato si appoggia alla piattaforma Context Awareness sviluppata da Telecom Italia Lab per permettere la creazione di servizi in grado di reagire al contesto in cui si trovano gli utenti. La tesi si occupa non solo di spiegare le scelte progettuali che hanno portato allo sviluppo del generatore di blog, ma descrive anche le soluzioni implementative più significative. 1.2 Servizi Context-Aware e la piattaforma CA Le applicazioni context-aware permettono di fornire contenuti, informazioni e servizi personalizzati in base al contesto in cui l’utente si trova. Con il termine contesto si indica appunto un insieme di dati relativi sia allo stato dell’utente che all’ambiente in cui questo si trova (Capitolo 3). I servizi context-aware hanno l’obiettivo di fornire informazioni coerenti con la situazione in cui è immerso l’utilizzatore, adattandosi a possibili variazioni delle circostanze. Il progetto Context Awareness and Ambient Intelligence di Telecom Italia Lab ha sviluppato e implementato un prototipo di piattaforma software context aware. Il progetto è costituito da due componenti distinte: la prima è un client in esecuzione sui dispositivi portatili degli utenti (PDA, smartphone), mentre la seconda è composta da numerosi componenti server-side intercomunicanti, che si occupano di elaborare, riorganizzare ed effettuare reasoning sui dati acquisiti dai client. 7 Introduzione Grazie alle API messe a disposizione dalla piattaforma CA, è possibile sviluppare applicativi context aware, come nel caso del generatore di blog contestualizzato. 1.3 I blog e la generazione automatica di contenuti contextaware La pubblicazione di contenuti generati direttamente dagli utenti è uno dei motori alla base della grande crescita delle dimensioni del web. La diffusione dei blog personali è senza dubbio uno degli aspetti che più hanno avvicinato il grande pubblico alla rete. In molti casi i contenuti pubblicati contengono informazioni personali legate al contesto in cui l’utente si è trovato, come, ad esempio, le azioni svolte durante la giornata. Tipicamente queste informazioni sono arricchite dalle foto scattate con il proprio telefono cellulare, o da video. L’obiettivo principale del generatore di blog è proprio quello di automatizzare queste operazioni. Grazie all’utilizzo di paradigmi tipici della context-awareness, il software è in grado di sollevare gli utenti dalla generazione dei contenuti che descrivono le loro giornate. In questo modo è possibile ottenere blog con testo naturale, foto e video diari, che descrivono in dettaglio le situazioni in cui ci si è trovati durante l’arco di tempo desiderato. 1.4 Architettura di riferimento La generazione di un blog post si articola in più passi, ognuno eseguito da un modulo funzionale (Figura 1.4.1). 8 Introduzione Video Blog Creator Natural text generation Data gathering and Cluster algorithms Context Clusters Context Raw Data TILab CA Platform Figura 1.4.1 Architettura generale. In grigio i moduli del generatore di blog. La prima operazione necessaria è l’integrazione con la piattaforma CA, dalla quale il generatore di blog acquisisce i dati di contesto della giornata di un utente (posizioni, persone nei paraggi, ecc…). Le informazioni collezionate vengono elaborate da algoritmi di clustering sviluppati ad hoc. Questa operazione permette di ricostruire le azioni che l’utente ha compiuto durante la giornata: è così possibile sapere dove una persona è stata e per quanto tempo. Gli algoritmi sono inoltre in grado di individuare i movimenti effettuati dagli utenti. Dopo aver raggruppato i dati, si procede con la conversione degli stessi in testo naturale. Questo passo si effettua utilizzando un realizzatore di linguaggio naturale. Il testo generato sarà successivamente arricchito dai contenuti multimediali acquisiti dall’utente durante le azioni compiute nella giornata. Fotografie e filmati sono prelevate da un portale web, TeamLife Media Sharing, precedentemente sviluppato all’interno del progetto Context Awareness and Ambient Intelligence [23]. La creazione di un testo naturale non è però l’unico modo in cui le informazioni di contesto dell’utente vengono presentate: il modulo di generazione del videoblog si occupa infatti di trasformare i cluster di contesto in un’animazione Flash. Le azioni che l’utente ha compiuto durante la giornata sono organizzate nel filmato come i titoli di testa di un telegiornale: nel video sono integrati anche tutti i contenuti multimediali acquisiti dall’utente, arricchiti ovviamente dalle informazioni di contesto ottenute grazie agli algoritmi di raggruppamento. Il blog testuale e il video-diario sono infine pubblicati sul web, grazie all’utilizzo di una piattaforma di blogging pre-esistente. 9 Introduzione 1.5 Organizzazione della tesi Prima di descrivere i dettagli progettuali ed implementativi del generatore di blog, si analizzano alcuni aspetti fondamentali per comprendere al meglio il contesto in cui l’applicazione è stata sviluppata. E’ prima di tutto necessario descrivere alcuni approcci alla generazione automatica di diari personali context-aware trovati in letteratura. Il capitolo 2 analizza alcuni progetti dalle caratteristiche simili a ciò che si è realizzato nel presente lavoro di tesi: se ne elencano i punti più interessanti e si sottolineano le differenze con il generatore di blog contestualizzato. Il capitolo 3 descrive i concetti base della Context Awareness e delle caratteristiche delle applicazioni sviluppate in tale filone. Si parla in modo più rigoroso ed approfondito della definizione di contesto di un utente e si presentano infine alcuni scenari applicativi per servizi context-aware in generale. Le definizioni generali elencate e spiegate nel capitolo 3 trovano un’applicazione concreta nella descrizione dell’architettura della Context Aware Platform TILab. All’interno del capitolo 4 si descrivono i componenti della piattaforma, le loro funzioni e le soluzioni adottate per garantire l’interoperabilità tra i vari moduli che la compongono, enfatizzando le componenti usate nella generazione del blog [4]. A questo proposito, il capitolo ospita la descrizione del linguaggio di scambio dati utilizzato dalla piattaforma, il ContextML. Si parla inoltre delle tecnologie adottate per l’implementazione della CA Platform e delle necessità che hanno spinto a tali scelte. Il capitolo 5, già oggetto dell’attività di tesi, si occupa di descrivere le tecniche utilizzate per acquisire e raggruppare i dati di contesto (posizione degli utenti, timestamp associati, presenza di amici nelle vicinanze, ecc…). La piattaforma CA mette infatti a disposizione per ogni utente una grande mole di informazioni: sono gli algoritmi di aggregazione a dare un significato a questi dati. All’interno del capitolo si descrivono le caratteristiche più significative dei dati di contesto su cui gli algoritmi operano (sia a livello di formato che di contenuti) e si analizzano i problemi da affrontare e gli obiettivi da raggiungere per ottenere un raggruppamento delle informazioni soddisfacente per l'utente finale. Le tecnologie utilizzate per la localizzazione giocano un ruolo fondamentale sulla scelta delle tecniche di clustering da adottare: la decisione di operare con informazioni di posizione basate su cella GSM/UMTS oppure su identificativi Bluetooth è stata determinante nella decisione di sviluppare due algoritmi di raggruppamento ad hoc (Compare&Merge e MultiLevel Sliding Window). I due procedimenti nascono per lavorare su pattern di dati differenti e sono quindi da considerarsi complementari. I risultati della fase di raggruppamento dei dati di contesto sono comparati con la percezione che gli utenti hanno delle loro giornate: si descrivono gli aspetti più importanti da rispettare per ricalcare in modo soddisfacente le azioni compiute dagli utenti durante la giornata. 10 Introduzione Dopo aver eseguito gli algoritmi di clustering è necessario creare e pubblicare i blog post. Il capitolo 6 descrive il processo seguito per la generazione del testo naturale relativo alle giornate degli utenti. Si analizzano la struttura delle frasi da costruire e il procedimento che trasforma semplici informazioni di contesto in un testo. Uno dei passi cardine della procedura prevede l’utilizzo di un natural language generator: si descrivono i motivi che hanno spinto ad utilizzare tale tecnologia e se ne valutano i pregi e i difetti. Il testo è inoltre arricchito dalla presenza di MicroFormats, uno standard per il markup semantico che permette la creazione di blog post strutturati [11] [12]. Il capitolo descrive inoltre l’integrazione con TeamLife Portal, un content management system sviluppato dal gruppo Context Awareness TILab, che permette la condivisione di contenuti multimediali contestualizzati [23]. Il generatore di blog utilizza le API esposte dall’applicativo per arricchire il testo del diario quotidiano con le foto e i filmati acquisiti dall’utente durante la giornata. Il capitolo termina con la descrizione della piattaforma di blogging utilizzata per pubblicare i blog post, WordPress Multi User [15]. Come già anticipato, il generatore è in grado di presentare la giornata di un utente nella forma di animazione video. Nel capitolo 7 si elencano le scelte tecnologiche adottate e le soluzioni implementative più significative, in particolare per quanto riguarda l’architettura generale del modulo, sviluppato in linguaggio PHP a partire dalla libreria open source Ming [18], in grado di creare animazioni in formato Flash. Il capitolo 8 elenca invece alcuni possibili scenari di utilizzo del generatore di blog, come la condivisione delle proprie esperienze con amici e parenti oppure il supporto alla memoria umana. 11 Introduzione 12 Il diario giornaliero context–aware: tecniche di generazione note 2 Il diario giornaliero context-aware: tecniche di generazione note La generazione automatica dei log delle azioni degli utenti è una tematica su cui la comunità lavora ormai da molti anni. Vale la pena di citare alcune soluzioni seguite da progetti con obiettivi simili al generatore di blog contestualizzato. 2.1 Pepys E’ stato uno dei primi approcci al tracciamento automatico degli utenti finalizzato alla generazione di log giornalieri [25]. Nonostante tecnologie di localizzazione dalle caratteristiche limitate (Pepys è stato sviluppato nel 1991), l’approccio è molto simile a quanto realizzato nel Generatore di Blog Contestualizzato. L’obiettivo primario del sistema è di agire come supporto alla memoria umana: i log delle giornate serviranno quindi all’utente stesso per poter ricordare le proprie azioni. Il sistema, grazie all’utilizzo di badge a radiofrequenza, raccoglie informazioni sulla posizione degli utenti in ambienti interni (in questo caso, una palazzina di uffici). Viene rilevata anche la presenza di altri utenti nelle vicinanze. Questi dati sono utilizzati per costruire un “Diario degli episodi personali” [25], un log che riassume in forma testuale le azioni compiute da un utente durante la giornata. Pepys utilizza algoritmi per l’analisi dei dati di contesto relativi ai singoli utenti: il quorum spotter [25], individua le situazioni in cui molti utenti sono presenti nella stessa stanza (gathering). Così facendo l’applicazione riesce ad individuare situazioni di staticità significative, caratterizzate dalla presenza di molti utenti contemporaneamente. Pepys è inoltre in grado di riconoscere casi di movimento, grazie ad un algoritmo dedicato, il travel agent [25]. Il riconoscimento degli spostamenti è un aspetto ripreso e approfondito dal generatore di blog. La fase di aggregazione dei risultati termina con l’utilizzo del diary episode builder, un modulo che si occupa di astrarre ulteriormente i risultati ottenuti ai punti precedenti, riducendo, quando necessario, il dettaglio della lista di azioni compiute dall’utente [25]. In alcuni casi [25], è inoltre prevista una procedura di gap filling che si occupa di inferire l’azione dell’utente in base alle posizione precedente e successiva. 13 Il diario giornaliero context–aware: tecniche di generazione note Il costruttore del diario personale utilizza i risultati ottenuti nella fase di analisi dei dati per creare l’elenco delle azioni giornaliere dell’utente. Il testo creato è molto sintetico e schematico, ma il sistema permette comunque all’utente di aggiungere commenti personali. La creazione dei log è implementata come un’applicazione batch ed è schedulata quotidianamente alle ore 4:00 (idea che è stata ripresa dal generatore di blog) . I risultati sono inviati via email ai rispettivi utenti. 2.2 MobiLife Life Blogging Il progetto MobiLife (a cui ha partecipato anche il gruppo Context Awareness TILab) propone Life Blogging [24], un approccio per molti versi analogo a quanto fatto da Pepys, ma rivisitato in chiave più moderna. Anche in questo caso, si tratta di un’applicazione in grado di creare un diario giornaliero di un utente a partire da un insieme di informazioni di contesto. Nel caso di Life Blogging, queste informazioni sono acquisite grazie all’utilizzo di un client (Context Watcher) in esecuzione sui terminali mobili degli utenti [24]. Il software è in grado di fornire informazioni di posizione (basate su cella GSM oppure GPS), fotografie, dati corporei come il battito cardiaco, ecc… Le informazioni di contesto sono alla base della generazione automatica del diario dell’utente, che in questo caso viene presentato sotto forma di blog, utilizzabile principalmente per condividere contenuti contestualizzati con amici, parenti e colleghi. Un altro possibile scenario di utilizzo proposto consiste nella creazione di statistiche personali sul proprio stile di vita [24]. Il sistema si basa sul concetto di clustering delle informazioni di contesto (un aspetto ripreso, in modo più approfondito, anche dal generatore di blog): grazie ad algoritmi di aggregazione, si riesce dunque a ricostruire le azioni compiute da un utente durante la giornata (anche se non si considera la dimensione temporale, aspetto invece fondamentale per il generatore di blog contestualizzato). A differenza di quanto accadeva in Pepys, il diario personale di Mobilife Life Blogging non è composto da un semplice elenco di azioni: l’approccio seguito prevede infatti di creare del testo il più possibile naturale [24], ed è quindi più simile al generatore di blog sviluppato. 2.3 ActionLog Come nel caso di Pepys e Life Blogging, anche ActionLog [27] è un sistema orientato alla generazione automatica di un diario giornaliero, finalizzato allo scambio di informazioni tra utenti con contesti simili. Il sistema è stato testato grazie allo 14 Il diario giornaliero context–aware: tecniche di generazione note sviluppo di un prototipo (ActionLog for Conference [27]), sviluppato espressamente per supportare lo scambio di informazioni durante conferenze accademiche. Anche in questo caso si opera a partire da un set di dati di contesto (in particolare relativi alla posizione e alle persone nelle vicinanze). A partire da questi dati, ActionLog costruisce una lista di azioni compiute dall’utente. Ad ogni azione corrisponderà una bozza di frase testuale, generata automaticamente. Questa idea è stata ripresa dal generatore di blog. Gli utilizzatori possono personalizzare le proprie entry e inoltre hanno il compito di validarle prima che appaiano sul blog: si tratta dunque di una pubblicazione semi-automatica. Come in Life Blogging, i contenuti vengono condivisi in ordine cronologico tramite blog post, ma la generazione di queste informazioni avviene subito dopo che l’azione si è conclusa e non giorno per giorno come nel caso di Pepys o del generatore di blog contestualizzato. Inoltre, anche se è prevista a posteriori una fase di aggregazione dei contenuti, questa si limita a raggruppare le entry generate in contesti simili e non a sostituirle con frasi che condensano e astraggono le azioni puntuali. 2.4 Context awareness and User Models Alcuni progetti, nonostante non siano finalizzati direttamente alla creazione del diario giornaliero, hanno offerto spunti interessanti, in particolare per quanto riguarda il rapporto tra dati di contesto e informazioni ricavate direttamente dagli utenti. SPECTER [26] è un software che opera da assistente personale dell’utente, adattandosi dinamicamente al contesto in cui questo si trova. Nel realizzare queste funzionalità, gioca un ruolo centrale il personal journal, il modulo che si occupa di ricordare le azioni compiute nel passato. L’efficacia dell’assistente personale si basa infatti in gran parte sull’analisi delle situazioni in cui si è trovato l’utente: grazie alle informazioni sulle azioni passate, SPECTER è in grado di fornire i consigli e i suggerimenti corretti. Il personal journal è senza dubbio il componente più interessante da analizzare ai fini della generazione di blog contestualizzati. E’ utile in particolare analizzare l’approccio seguito nel coinvolgere gli utenti ad arricchire le informazioni di contesto acquisite automaticamente [26]. Il personal journal si basa infatti su un modello ibrido, definito in parte dall’utente (che può aggiungere a mano alcune azioni che ha compiuto durante la giornata), ed in parte generato automaticamente. Viene quindi data particolare enfasi al ruolo che l’utente ricopre nel generare il modello. SPECTER permette inoltre la modifica manuale delle entry generate in automatico, per poter aggiungere informazioni aggiuntive o correggere eventuali errori. L’interazione dell’individuo, che specifica direttamente le proprie azioni, non può che aumentare la precisione e il livello di dettaglio del personal journal, ma allo stesso tempo è fondamentale focalizzarsi sulla 15 Il diario giornaliero context–aware: tecniche di generazione note generazione automatica del log delle azioni, per evitare un’eccessiva pesantezza del processo di correzione manuale. Il personal journal è costituito in gran parte da entry generate automaticamente a partire dai dati ricavati dai sensori dei device portatili. Si sottolinea come queste informazioni debbano essere corrette, pena la perdita di fiducia nel sistema da parte degli utilizzatori[26]. L’idea di coinvolgere gli utenti nella personalizzazione dei propri post è stata ripresa dal generatore di blog, in particolare per quanto riguarda la gestione delle etichette attribuite alle posizioni geografiche (Capitolo 5.2). Un altro sistema interessante è descritto in [28]. Anche in questo caso si tratta di un assistente personale context-aware. Come in SPECTER, è stato analizzato il rapporto tra context awareness e informazioni ricavate da tecniche più tradizionali basate su uno user model [28]: si è giunti alla conclusione, già seguita da SPECTER, di lavorare su entrambe le categorie. Il Personal Digital Secretary utilizza quindi non solo i dati ricavati dal contesto, ma anche le informazioni prelevate dal profilo degli utenti. I dati di contesto, come accade in altri sistemi analizzati in precedenza (Pepys, Life Blogging) vengono processati da un modulo, il context synthetizer, che si occupa di aggregare le informazioni per aumentare il livello di astrazione finale. L’importanza data da [26] e [28] all’interazione con le informazioni direttamente introdotte dagli utenti ha portato alla formulazione di alcune linee guida per gli sviluppi futuri del generatore di blog, come l’integrazione con l’agenda dell’utente (Capitolo 9.3). 2.5 Altri lavori Uno spunto interessante per lo sviluppo del generatore di blog viene da IDAS [29]. Il progetto, seppur discostandosi dai lavori visti in precedenza (legati sempre in qualche modo ai concetti di context awareness), introduce l’utilizzo di un Natural Language Generator per creare automaticamente dei documenti tecnici. La generazione di testo naturale tramite un sistema NLG sarà la strada seguita anche dal generatore di blog contestualizzato. Il progetto MyLifeBits [30], è invece alla base dell’idea dell’integrazione con contenuti multimediali contestualizzati. MyLifeBits è un sistema sperimentale rivolto alla raccolta di tutti i contenuti digitali creati durante la vita dell’utente, ai fini di supportare la memoria degli individui. L’enfasi del progetto è però rivolta in particolare ai metodi per organizzare questa mole di dati, e non tanto a creare delle rappresentazioni testuali che condensino i dati raccolti (aspetto questo che è invece fondamentale nella creazione del blog contestualizzato). 16 Applicazioni Context-Aware 3 Applicazioni Context-Aware 3.1 La Context-Awareness Le applicazioni context-aware permettono di fornire contenuti, informazioni e servizi personalizzati in base al contesto in cui l’utente si trova nel modo il più possibile trasparente. [1] Un’architettura software orientata alla context-awareness è in grado di conferire un importante valore aggiunto non solo all’infrastruttura broadband su rete cablata, ma anche al mondo delle telecomunicazioni mobili GSM/UMTS, tipicamente più ricco di informazioni di contesto. E’ possibile infatti sviluppare una gamma di nuovi servizi, che si articola fondamentalmente nelle seguenti tre categorie: [2] - presentazione di informazioni: all’utente vengono presentate informazioni legate al contesto in cui si trova. Il cliente può eseguire azioni che gli vengono proposte in base all’ambiente e alla situazione attuale; - esecuzione di comandi: ad ogni cambiamento di contesto il sistema può eseguire determinate procedure o assumere particolari configurazioni; - tagging di informazioni: gli applicativi sono in grado di associare informazioni ed oggetti della vita reale (documenti, foto, filmati, sale riunioni, stampanti, pc, ecc..) con informazioni di contesto (ora, posizione, attività svolta, ecc…); Identificare la situazione di un utente mobile ed adattarla alle sue necessità è possibile solo grazie alla raccolta e all’elaborazione di informazioni di contesto, che molto spesso provengono da fonti eterogenee [3]. Oltre ai dati provenienti dal terminale mobile e dai suoi sensori (ad esempio la fotocamera), sono necessarie informazioni ricavate dalla rete dell’operatore telefonico, come l’identificativo di cella GSM/UMTS presso il quale il dispositivo è registrato in un certo istante. E’ inoltre indispensabile la conoscenza del profilo dell’utente, oltre ad informazioni relative ad altri servizi tradizionali (calendario, e-mail, ecc…). Il tipo di servizi che la piattaforma può fornire dipende non solo da quanti e quali dati sono stati raccolti, ma anche da come questi vengono processati ed analizzati. Per poter offrire applicazioni context aware è quindi necessaria un’architettura articolata sui seguenti livelli: [4] (Figura 3.1.1). 17 Applicazioni Context-Aware Figura 3.1.1 Modello a livelli logici di Context Awareness - - - 3.2 context data capturing: questo passo prevede la raccolta dei dati grezzi relativi all’utente e provenienti per la maggior parte da sensori. I dati devono essere convertiti in un formato eterogeneo, per poter essere in seguito processati; context analysis/reasoning: permette di migliorare la qualità delle informazioni ricavate dai dati grezzi. E’ quindi utile definire, attraverso un’ontologia, un modello del contesto. Appoggiandosi a questa formalizzazione è così possibile individuare pattern all’interno della mole dei dati grezzi, utilizzando algoritmi di learning oppure di data mining. Infine, si effettua del reasoning sui risultati ottenuti, per ottenere informazioni di alto livello sul contesto dell’utente; service integration: il contesto dell’utente viene sfruttato dai vari servizi che si appoggiano sulla piattaforma. Il contesto di un utente La Context Awareness permette di offrire all’utente le informazioni e i servizi di cui ha bisogno in un certo contesto. Nasce quindi la necessità di definire in modo formale che cosa si intende per contesto. Secondo A.K. Dey [5] “Contesto è una qualunque informazione che può essere usata per caratterizzare lo stato di un’entità, sia essa una persona, un luogo oppure un oggetto considerato rilevante per l’interazione tra l’utente e l’applicazione”. Un’altra definizione interessante è stata data da Schmidt et al.[6]: “Contesto è la conoscenza riguardo lo stato in cui si trova l’utente e lo stato dei suoi dispositivi, incluse informazioni sull’ambiente circostante e la relativa localizzazione”. 18 Applicazioni Context-Aware Occorre poi sottolineare l’importanza della dimensione temporale, grazie alla quale è possibile pensare ad una vera e propria context history, utile per l’identificazione e la previsione di pattern di comportamento degli utenti. Il contesto di un’entità è caratterizzato da dati eterogenei, provenienti da numerose fonti. In base alla dimensione temporale si distinguono due categorie di parametri di contesto: - dati statici: sono fissi, oppure variano molto lentamente (dati anagrafici, ecc…). Sono solitamente ricavati dal profilo dell’utente; - dati dinamici: localizzazione, velocità, dispositivi nelle vicinanze, ecc… La loro cattura avviene di solito attraverso software attivo sul dispositivo mobile utilizzato dall’utente. E’ possibile suddividere ulteriormente in gruppi di parametri necessari per definire il contesto di un utente: [1] (Figura 3.2.1) Figura 3.2.1: Gruppi di parametri per la definizione del contesto - user profile: identità e profilo dell’utente; spazio: posizione, direzione di movimento, velocità e accelerazione; tempo: ora, data, stagione; tipo di device: tipo di display, batteria, banda disponibile; service profile; ambiente: inteso come temperatura, rumore, inquinamento, ecc; risorse nelle vicinanze: altri utenti, stampanti, videoproiettori, access point; presence: la disponibilità all’interazione (online/busy/on the phone); misure fisiologiche: ad esempio la pressione sanguigna e arteriosa, il battito cardiaco ed il tono della voce; attività in corso: come, ad esempio, parlare, leggere, camminare o correre. 19 Applicazioni Context-Aware 3.3 Scenari applicativi L’obiettivo primario di un applicativo context aware è di adattarsi e fornire informazioni all’utente in base al contesto in cui questo si trova. Tutto questo è reso possibile dalla capillarità della copertura della rete radiomobile e dalle nuove potenzialità introdotte dai recenti dispositivi mobili (PDA, smartphone, telefoni cellulari, ecc…). E’ possibile riassumere le tipologie di servizi context aware nelle seguenti classi: - Context Tagging automatico di contenuti personali e condivisione (ad esempio, fotoalbum o videoalbum, oppure blog contestualizzato generato automaticamente); - Service advertising permette di ottenere l’elenco dei servizi personalizzati in base al contesto dell’utente. In questo filone si inseriscono anche le applicazioni di pubblicità context-based. - Personal Communication avanzata, ovvero il trattamento delle chiamate e dei messaggi in base al contesto. - E-tourism, tramite la condivisione di informazioni contestualizzate tra utenti e l’utilizzo di recommender per negozi, ristoranti, musei, locali notturni, ecc… Queste tipologie di nuovi servizi rappresentano importanti scenari applicativi per la context awareness, e allo stesso tempo permettono all’operatore di rete di sfruttare la grande mole di informazioni di contesto in suo possesso. E’ sufficiente pensare alle informazioni di posizione su base cella GSM/UMTS: grazie alle applicazioni contextaware è possibile utilizzare questi dati per fornire servizi innovativi agli utenti, senza la necessità di investire in una nuova infrastruttura di rete. Il generatore di blog oggetto del presente lavoro di tesi si inserisce proprio nello scenario dei servizi context-aware, grazie alle informazioni di contesto acquisite dalla piattaforma sviluppata presso il TILab (Capitolo 4). 20 Context-Aware Platform 4 Context-Aware Platform 4.1 Descrizione generale L’implementazione TILab della Context Aware Platform si suddivide in due parti: il lato server e la piattaforma residente sui client. La parte server implementa tutti i livelli logici descritti nel capitolo 3.1: il context capturing è effettuato in particolare sulle informazioni di posizionamento ricavate dalla rete GSM/UMTS, ma interessa anche molti altri dati (dispositivi Bluetooth nelle vicinanze, GPS, fotografie, video, ecc…). Il context reasoning si declina in varie componenti come il motore a regole, gli algoritmi di clustering, tecniche di pattern recognition, ecc… Infine, il livello di service integration permette di rendere fruibili alle applicazioni context aware i risultati delle elaborazioni dei livelli sottostanti. La parte client, che viene eseguita direttamente sui device portatili, ricopre una notevole importanza in particolare per quanto riguarda la raccolta delle informazioni di contesto sul campo, grazie soprattutto all’interazione con i sensori del device che la ospita. 4.2 Architettura funzionale, server side L’architettura generale della piattaforma si articola in tre blocchi fondamentali: il livello dei context enablers, la context aware platform vera e propria e l’application layer (Figura 4.2.1). 21 Context-Aware Platform Figura 4.2.1: CA Platform, architettura funzionale Il livello inferiore dell’architettura (utilizzato dal generatore di blog per acquisire i dati grezzi) fornisce informazioni di contesto di basso livello ed è composto dai cosiddetti context enablers. Le fonti da cui si provengono i dati sono eterogenee: [4] - dispositivi mobili: PDA, smartphone, telefoni cellulari; - sensori intelligenti: sensori interfacciati col corpo umano (che, ad esempio, sono in grado di rilevare la frequenza del battito cardiaco), sensori ambientali di umidità, temperatura, luce, videocamere e sensori di movimento (basati su ricevitori GPS, accelerometri, bussole e giroscopi); - network enablers: ad esempio address book provider (rubrica centralizzata), location provider (capace di restituire al chiamante l’indirizzo civico di una posizione), user proximity provider (restituisce l’elenco degli altri utenti nelle prossimità), calendar provider (da cui è possibile ricavare informazioni sugli impegni in agenda dell’utente). Questi componenti sono interrogati direttamente dal generatore di blog. 22 Context-Aware Platform Il core della piattaforma context aware ha il compito di ottenere informazioni di contesto più astratte a partire dai dati ricavati dagli enablers del livello sottostante. Si elencano di seguito i componenti più importanti di questo livello: - catalogues/profile management: modella e gestisce il profilo degli utenti e della loro social network (una rete di utenti interconnessi tra loro attraverso relazioni interpersonali di diverse tipologie, come amicizia, parentela, rapporti di lavoro, ecc...). Si occupa anche di fornire le informazioni sui device associati agli utenti e le rispettive caratteristiche tecniche; - context reasoning: sono i componenti che implementano le logiche di reasoning della piattaforma. Il componente si articola principalmente in due sotto livelli principali. Il recommender layer opera per mezzo di algoritmi di tipo collaborative filtering, trust aware, rule based, ecc… Il context interpretation/aggregation layer, si occupa invece di estrarre informazioni di alto livello utilizzando algoritmi di clustering, pattern recognition, machine learning oppure lavorando con un approccio rule based. Per quanto riguarda le tecniche rule based, la strada seguita è stata quella di lavorare su un situation provider, un componente che si occupa di inferire situazioni astratte (a partire dai dati grezzi) utilizzando un processo di reasoning basato su un motore a regole; [3] - context brokering: si occupa di adattare le informazioni grezze alle necessità dei livelli superiori della piattaforma. Gestisce inoltre una cache dei dati e si occupa della gestione dello storico dei dati di contesto, la context history (vedere Capitolo 4.3). - exposure layer: è l’interfaccia della piattaforma verso le applicazioni context aware vere e proprie. La piattaforma CA è alla base del livello applicativo, che racchiude i servizi e le applicazioni context aware destinate agli utenti finali (photo-sharing, videoblog contestualizzato, e-tourism, context aware advertising , ecc…) 4.3 Context Brokering: i componenti Il livello si occupa di adattare e riorganizzare le informazioni grezze di contesto per renderle disponibili ai piani superiori della piattaforma. (Figura 4.3.1). Si tratta di un’architettura distribuita, i cui componenti sono ospitati su server differenti. Il Context Broker ha il compito di recuperare le informazioni di contesto da tutti i provider, mantenerle per un certo periodo in una context cache interna e distribuirle agli altri componenti della piattaforma. I dati raccolti dai provider sono eterogenei e provengono da molte fonti, quindi, per poter essere distribuiti, devono essere codificati in un formato comune sia al CB che a tutti gli altri provider. Si è così sviluppato un 23 Context-Aware Platform linguaggio XML-based che prende il nome di ContextML (Capitolo 4.6). Per maggiori informazioni sul ruolo che il Context Broker ricopre all’interno della piattaforma CA, si rimanda a [4]. Il generatore di blog, per il momento, non utilizza il Context Broker per acquisire i dati di contesto. Il prototipo sviluppato, per ottenere le informazioni necessarie, interroga direttamente le interfacce messe a disposizione dai provider, senza appoggiarsi alla mediazione del broker. Come spiegato nel capitolo 4.4, il generatore di blog fa però largo uso della Context History, la base dati gestita e aggiornata dal broker che contiene lo storico delle informazioni di contesto degli utenti (Figura 4.3.1). Figura 4.3.1: Il Context Broker e i Provider della piattaforma. 4.4 Context Provider Alcuni componenti software della piattaforma ricoprono il ruolo di Provider. Queste entità forniscono un tipo (scope) di informazioni di contesto. Ogni context provider espone delle interfacce grazie alle quali il CB oppure altri consumer possono recuperare nuovi dati di contesto. Il generatore di blog contestualizzato, agendo come un Context Consumer [4], recupera le informazioni di contesto attraverso una richiesta esplicita al Context Provider desiderato: un consumer può infatti interrogare direttamente un provider, tramite i metodi esposti dalle interfacce di quest’ultimo. La piattaforma permette di recuperare informazioni di contesto eterogenee. L’elenco sottostante riporta le funzionalità dei CP più importanti: - Advanced User Profile (AUP): fornisce informazioni sul profilo dell’utente. (Figura 4.4.1) [1] 24 Context-Aware Platform User Data User Profile User Preference Service Catalog User Device/ User Device Parameter User Service Profile Device Capability Catalog User Places (Virtual Places) Figura 4.4.1: informazioni fornite dall'AUP - - User Profile comprende l’identità dell’utente, informazioni finanziarie, abilità personali, inabilità psicofisiche e titoli di studio. - Le User Preference consistono invece in informazioni relative ai gusti musicali dell’utente, generi letterari, sport, programmi televisivi, ecc… - La parte di User Device/Device Parameter contiene informazioni sui dispositivi mobili registrati dall’utente nel sistema e i relativi dettagli, come applicazioni aggiuntive, espansioni di memoria, ecc… (l’elenco completo delle possibili caratteristiche tecniche dei dispositivi è contenuto nel Device Capability Catalog). Un dispositivo può appartenere ad un solo utente per volta, ma un utente può registrare diversi device. - User service profile contiene invece informazioni sui tipi di servizi context aware a cui un utente si è registrato. Questi servizi possono essere gestiti e sviluppati dall’operatore (media sharing, generatore di Blog Contestualizzato, ecc…) oppure servizi di terze parti come l’upload di contenuti multimediali contestualizzati su Youtube o su FlickR (l’elenco dei servizi abilitati è contenuto nel Service Catalog). - La parte relativa agli User Places (anche chiamati Virtual Places) contiene l’elenco dei luoghi personali di ogni utilizzatore della piattaforma (Capitolo 5.2). Ad un utente è infatti permesso associare un’etichetta ad una zona geografica desiderata (esempio: casa propria, ufficio, stadio,ecc…). Location Provider (LP): data un’informazione geografica di basso livello (coordinate GPS, identificativo di cella GSM/UMTS), ne restituisce l’indirizzo, fornendo quindi via, città, codice postale, provincia (o entità analoghe in caso di paesi esteri) e stato. 25 Context-Aware Platform - User Proximity Provider (UPP): analizza una lista di identificativi di device Bluetooth rilevati nelle vicinanze dell’utente e determina, per ogni id, se a questo corrisponde una persona nota all’utente stesso. - Situation Provider (SP): il provider sfrutta altri provider per ricavare informazioni sul contesto dell’utente ed interagisce con il motore a regole della piattaforma per inferire la situation dell’utente, che viene poi restituita tramite l’interfaccia esposta [3]. - Address Book Provider: fornisce informazioni sui contatti dell’utente. Questi sono memorizzati in un repository conforme allo standard OMA XDM (XML Document Management), migliorato da un’estensione XML che permette di specificare la relazione che lega l’utente con i suoi contatti (“friend”, “family”, “colleague”, ecc…). - Calendar Provider (CP): opera da proxy nei confronti di applicazioni di terze parti (ad esempio, Google Calendar) e restituisce informazioni sugli impegni dell’utente. Può agire da provider anche il Context History DB (CH), la cui interfaccia permette di recuperare l’elenco delle informazioni di contesto di un certo utente per il periodo di tempo desiderato. Il generatore di blog utilizza pesantemente questo componente che, in generale, è proprio utilizzato per operazioni di post-processing oppure di reasoning. 4.5 Piattaforma client side Mentre la piattaforma Context Aware lato server si occupa di reperire informazioni dalla rete (posizionamento dei device degli utenti, informazioni di presence, dati ricavati da Calendar provider, ecc…), la parte client side ha il compito di catturare informazioni di contesto direttamente dai device (ID Bluetooth di altri dispositivi nelle vicinanze, dati provenienti da sensori on board, capabilities del dispositivo mobile, ecc…). [2] In Figura 4.5.1 si rappresenta l’architettura funzionale della piattaforma Context Awareness lato client. 26 Context-Aware Platform Figura 4.5.1: CA Platform lato client Dalla figura si riconoscono funzionalità analoghe alla parte server. Anche in questo caso l’architettura logica è organizzata in tre livelli distinti: - Raccolta di dati di contesto: è la parte che si occupa di recuperare le informazioni di contesto di basso livello. E’ possibile ricavare i seguenti dati grezzi: - Sensor/Device info: dati provenienti dai sensori integrati nel dispositivo oppure a cui questo è collegato (fotocamera, antenna GPS, sensori fisiologici, ecc…); - Network info: dati ricavati dalla rete a cui il device è collegato (GSM/UMTS, Bluetooth, ecc…); - Integrated Location Info: dati di rete specifici per la localizzazione. Sono distinti per tipo di rete a cui il device è agganciato, e fanno quindi riferimento a piattaforme di risoluzione geografica diverse, anche queste sviluppate presso il TILab (es: NIMBLE, per quanto riguarda la localizzazione GSM/UMTS); - Presence SIP: modulo utilizzato per invio/ricezione di istant messaging e per comunicazione con il Context Broker lato server; - Address Book: informazioni inserite dall’utente nella sua agenda personale sul device; - Eventuale Storage che può contenere, ad esempio, cartografia di terze parti. A partire da questi dati di base, è possibile ricavare, lato client, numerose funzionalità tecniche del dispositivo mobile in uso. E’ possibile così scoprire le 27 Context-Aware Platform capabilities del device, informazioni sull’hardware e sul software correnti, i canali radio GSM/UMTS o WiFi disponibili. Si possono anche individuare altri dispositivi Bluetooth nelle vicinanze, i cui ID saranno risolti dalla parte server della piattaforma. Inoltre è possibile implementare meccanismi di triggering, per avvisare le user application del cambiamento di contesto dell’utente in tempo reale. Infine, diventa possibile tracciare il dispositivo basandosi su tecnologie di rete diverse, ad esempio GSM/UMTS o Bluetooth, con un conseguente diverso livello di precisione. - Local Context Broker: è l’elemento centrale dell’architettura lato client. Le sue funzioni fondamentali comprendono: - raccogliere i dati grezzi di contesto raccolti nel livello sottostante; - agisce da unico punto di contatto verso il Context Broker lato server, a cui invia update di dati di contesto aggiornati e da cui riceve informazioni su come effettuare l’update di questi dati verso la piattaforma CA; - agisce da unico punto di contatto anche verso le applicazioni utente in esecuzione sul dispositivo. - Application layer: è lo strato di applicazioni utente in esecuzione sul dispositivo portatile. Una funzionalità applicativa rilevante è il tagging di contenuti multimediali (foto, video, audio, documenti). Si associano a questi file meta-dati di contesto, in modo che risultino inscindibili dall’informazione contenuta nel file stesso. E’ stata sviluppata inoltre un’applicazione che permette all’utente di gestire alcune policy. E’ possibile quindi modificare direttamente dal device impostazioni legate alla privacy, al profilo utente e all’impostazione di altre applicazioni. L’utente è inoltre in grado di gestire e di ottimizzare le policy di update delle informazioni di contesto verso il Context Broker lato server. 4.6 Il linguaggio ContextML Per ottenere la piena interoperabilità tra i Provider, il Context Broker e le applicazioni context aware, è necessario utilizzare un formalismo comune per la rappresentazioni delle informazioni, che, come visto,sono eterogenee tra loro. E’ stato così sviluppato il ContextML, un linguaggio XML-based per rappresentare le informazioni di contesto all’interno della piattaforma CA. I Provider devono offrire informazioni utilizzando questo formalismo [4]. A causa della loro natura eterogenea, i dati di contesto sono stati raggruppati in scope. Ad esempio, lo scope “position” comprende le informazioni di latitudine e longitudine di una certa entità, mentre lo scope “userProfile” è composto dai dati del profilo dell’utente. E’ possibile anche definire scope aggregati, che comprendono cioè più scope atomici. 28 Context-Aware Platform Il ContextML, grazie al concetto di scope, permette inoltre di interoperare facilmente con gli standard di rappresentazione delle informazioni, come, ad esempio, i MicroFormats, utilizzati dal generatore di blog (Capitolo 6.5). Lo schema del ContextML è così definito: - ctxEls: contiene i dati di contesto; - ctxAdvs: contiene l’advertisment delle caratteristiche del provider; - scopeEls: contiene la risposta del Context Broker se invocato per ottenere l’elenco degli scope disponibili; - ctxPrvEls: contiene la risposta del Broker se invocato per ottenere l’elenco dei provider disponibili. Ogni Provider restituisce dati di contesto all’interno di un documento ContextML costituito dai seguenti elementi: - contextProvider: nome univoco del provider che ha fornito i dati; - entità: identificatore dell’entità a cui sono associati i dati di contesto; - scope: scope dei dati di contesto; - timestamp e expires: istante temporale in cui la risposta è stata generata e scadenza della validità dei dati di contesto; - dataPart: è la parte del documento che contiene i dati di contesto veri e propri. I singoli parametri di contesto sono elementi <par>, ma è possibile anche avere parametri strutturati, <parS>, oppure array di parametri, <parA>. Figura 4.6.1 riporta la risposta dell’Advanced User Profile Provider (AUP), in linguaggio ContextML, alla richiesta del profilo dell’utente “lukostaz”: 29 Context-Aware Platform <?xml version="1.0" encoding="UTF-8"?> <contextML xmlns="http://ContextML/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ContextML/1.1 http://cark3.cselt.it/schemas/ContextML-1.1.xsd"> <ctxEls> <ctxEl> <contextProvider id="AUP" v="1.0.0"/> <entity type="userName" id="lukostaz"/> <scope>userProfile</scope> <timestamp>2007-05-04T15:12:29+02:00</timestamp> <expires>2007-05-04T15:17:29+02:00</expires> <dataPart> <parA n="users"> <parS n="user"> <par n="userName">lukostaz</par> <par n="firstName">Luca</par> <par n="lastName">Costabello</par> <par n="gender">m</par> <par n="birthCity">Pinerolo</par> <par n="birthCountry">Italy</par> <par n="birthZip">10064</par> <par n="birthState">Torino</par> <par n="birthDate">1983-03-20T00:00:00+01:00</par> <par n="civilStatus">Celibe</par> <par n="fiscalCode">12345678901</par> <par n="nationality">Italiana</par> </parS> </parA> </dataPart> </ctxEl> </ctxEls> </contextML> Figura 4.6.1 Profilo dell'utente lukostaz, ContextML 4.7 Tecnologie usate La piattaforma di Context Awareness è caratterizzata da un’architettura distribuita. Il context Broker e i Provider risiedono su server indipendenti. Per poter interagire con gli altri componenti, oltre all’utilizzo del linguaggio ContextML, ogni modulo espone un’interfaccia basata sullo stile architetturale HTTP-REST [7]. È possibile, oltre che invocare il Context Broker che fa da tramite e da aggregatore, anche invocare direttamente i provider. Utilizzare il design REST, caratterizzato da un’interazione stateless tra client e server, permette di considerare il webservice come una vera e propria risorsa, identificata dal suo URL. Alle applicazioni che desiderano utilizzare il webservice (come, ad esempio, il generatore di Blog contestualizzato) viene offerto un set di metodi remoti che permettono di eseguire le azioni offerte dal webservice stesso. Applicazione client e webservice devono però essere d’accordo out-of-band sul formato che descrive i 30 Context-Aware Platform dati (in questo caso il ContextML), in quanto REST non offre un modo formale per descrivere l’interfaccia del webservice. Un importante vantaggio dell’approccio REST accoppiato ad HTTP riguarda il limitato utilizzo di banda: i messaggi non vengono infatti appesantiti dallo strato SOAP, e ciò è importante in particolare per quanto riguarda i dispositivi mobili,caratterizzati da una disponibilità limitata di risorse. Occorre inoltre aggiungere che il design REST permette un’implementazione più semplice dei componenti architetturali [2]. L’interfaccia REST è fornita grazie ad una Servlet ed utilizza degli EJB che implementano i metodi del Provider e che permettono a quest’ultimo di gestire un eventuale collegamento con sistemi di back end, garantendo inoltre una maggiore flessibilità in termini di architettura software. Il Context Broker, che utilizza la stessa tecnologia dei Provider, utilizza un database relazionale (MySQL) per gestire la Context Cache e i cataloghi degli scope e dei provider. 31 Context-Aware Platform 32 Raccolta e clustering dei dati di contesto 5 Raccolta e clustering dei dati di contesto 5.1 Panoramica generale Il primo passo necessario alla generazione del blog automatico consiste nella raccolta dei dati di contesto per ogni utente. Queste informazioni sono generate dal client in esecuzione su ogni device e si ottengono interrogando le interfacce esposte dai provider della piattaforma CA (Capitolo 4). Occorre successivamente incrociare informazioni provenienti da diversi provider per ottenere la base dati su cui operano gli algoritmi di clustering. Fondamentalmente, ogni vettore di dati di contesto (Context Update) è caratterizzato da un timestamp, da informazioni spaziali (identificativo di cella GSM, etichette assegnate dall’utente a particolari luoghi, ecc…) e da un elenco di dispositivi Bluetooth nelle vicinanze. Gli algoritmi di clustering aggregano le informazioni di contesto, generando delle situazioni in cui l’utente si è trovato durante la giornata (ma è possibile anche operare su più giorni, settimane o mesi). Per ottenere questo risultato, è ovviamente necessario aggregare le informazioni tenendo conto della dimensione temporale. Sono stati sviluppati due diversi algoritmi di clustering per venire incontro alle esigenze emerse durante la fase di analisi dei pattern delle informazioni di contesto. Il loro funzionamento verrà spiegato in seguito. I dati di contesto contengono informazioni sulla posizione degli utenti. Nonostante la piattaforma CA sia in grado di operare anche con tecnologia GPS (Capitolo 4), la minore diffusione dei terminali mobili equipaggiati con GPS rispetto a smartphone e PDA tradizionali ha portato per il momento ad escludere la localizzazione satellitare. Le tecniche adottate dal generatore di blog utilizzano informazioni di cella GSM/UMTS e Bluetooth. Entrambe le tecnologie localizzano gli utenti con attributi categorici (codici di cella e id Bluetooth) e possono venire raggruppate dallo stesso algoritmo. Una delle estensioni previste è proprio l’integrazione con algoritmi di clustering GPS, già sviluppati e implementati in precedenza nel progetto Context Awareness TILab. Queste funzioni dovranno essere adattate a lavorare con la dimensione temporale (Capitolo 9). 33 Raccolta e clustering dei dati di contesto 5.2 Raccolta dei dati di contesto La raccolta dei dati di contesto avviene nei passi in Figura 5.2.1. Cattura dei dati di contesto grezzi CH Incrocio con Virtual Places AUP CLUSTERING LP Completamento dei cluster UPP CA Platform Figura 5.2.1 Raccolta dei dati e Clustering • Cattura dei dati di contesto: i dati grezzi di contesto vengono ricavati da Context History (CH) per ogni utente (Figura 5.2.2). CH viene interrogata sulle interfacce REST che espone. I dati sono restituiti in formato ContextML. 2007-09-07 09:24:08.0 222-1-61101-72162201 Timestamp GSM CGI 0c6d6ff64;0006c6040e66 Dispositivi Bluetooth nei paraggi Figura 5.2.2 Dati di contesto grezzi • Incrocio dei dati grezzi con Virtual Places: gli utenti della piattaforma CA possono etichettare celle GSM, indirizzi Bluetooth e zone delimitate da coordinate GPS come “luoghi notevoli” (Virtual Place). Ogni VP appartiene ad 34 Raccolta e clustering dei dati di contesto una categoria ben definita, in conformità allo standard definito nella RFC 4480 [7] (es: residence, office, school, ecc…). Inoltre ai VP è associata una descrizione, scelta dall’utente (Figura 5.2.3). office Categoria cgi-gsm Tecnologia usata 222-1-61101-72162201 Elemento da etichettare TILab Descrizione Figura 5.2.3 Virtual Place Utilizzare Virtual Place definiti su tecnologie di localizzazione diverse (in questo caso GSM e Bluetooth) permette di definire Virtual Place annidati: un VP definito su una o più celle GSM può ad esempio contenerne un altro legato ad un identificativo Bluetooth (Figura 5.2.4). My office Canteen TILab Figura 5.2.4 Virtual Place muti-tecnologia annidati L’etichettatura di intere zone in cui l’utente ha soggiornato (oppure è transitato) può semplificare notevolmente il compito degli algoritmi di clustering e contribuisce ad un’analisi più precisa delle attività dell’utente. Ad esempio, un luogo con superficie molto ampia, come un’università, può essere coperto da più celle GSM: se l’utente etichetta queste celle come appartenenti allo stesso Virtual Place, l’algoritmo di clustering le aggregherà, lavorando con l’informazione aggiunta dall’utente. Definire Virtual Place aiuta anche a mitigare il fenomeno di switch spuri tra celle (Capitolo 5.3). L’Advanced User Profile, AUP (Capitolo 4.4), è il componente che contiene l’elenco dei Virtual Place degli utenti. Gli elementi di contesto ricavati dalla Context History sono quindi incrociati con i VP di ogni utente, tramite 35 Raccolta e clustering dei dati di contesto l’invocazione di un’opportuna interfaccia REST offerta dal provider di AUP. Anche in questo caso l’output è presentato in codifica ContextML (Figura 5.2.5). <?xml version="1.0" encoding="UTF-8"?> <contextML xmlns="http://ContextML/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ContextML/1.1 http://cark3.cselt.it/schemas/ContextML-1.1.xsd"> <ctxEls> <ctxEl> <contextProvider id="AUP" v="1.0.0"/> <entity type="userName" id="lukostaz"/> <scope>userVirtualPlace</scope> <timestamp>2007-10-04T14:33:39+02:00</timestamp> <expires>2007-10-04T14:38:39+02:00</expires> <dataPart> <parA n="virtualPlaces"> <parS n="virtualPlace"> <par n="placeType">residence</par> <par n="placeInfoType">cgi-gsm</par> <par n="placeInfo">222-1-24650-1281</par> <par n="placeName">home</par> </parS> <parS n="virtualPlace"> <par n="placeType">office</par> <par n="placeInfoType">cgi-gsm</par> <par n="placeInfo">222-1-61101-72162201</par> <par n="placeName">tilab</par> </parS> </parA> </dataPart> </ctxEl> </ctxEls> </contextML> Figura 5.2.5 Virtual Place di un utente in codifica ContextML • Completamento dei Cluster: dopo aver eseguito il raggruppamento delle informazioni di contesto con gli algoritmi descritti in seguito (Capitoli 5.5 e 5.6), si procede con la rifinitura delle informazioni dei cluster ottenuti. In primo luogo si procede con la risoluzione in indirizzo civico degli identificativi di cella GSM. La piattaforma mette a disposizione il Location Provider, LP. Questo componente è in grado di restituire l’indirizzo civico di una Base Station a partire dal CGI (Cell Global Identify) di quest’ultima (Figura 5.2.6). 36 Raccolta e clustering dei dati di contesto <?xml version="1.0" encoding="UTF-8"?> <contextMLxmlns="http://ContextML/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema instance"xsi:schemaLocation="http://ContextML/1.2 http://cark3.cselt.it/schemas/ContextML-1.2.xsd"> <ctxEls> <ctxEl> <contextProvider id="LP" v="1.1.6"/> <entity id="unknown" type="unknown"/> <scope>position</scope> <timestamp>2007-10-04T15:47:40+02:00</timestamp> <expires>2007-10-04T15:49:40+02:00</expires> <dataPart> <par n="latitude">45.1104525</par> <par n="longitude">7.675246666666667</par> <par n="accuracy">541</par> <par n="locMode">NimbleCGI</par> <par n="room"/> <par n="corridor"/> <par n="floor"/> <par n="building"/> <par n="street">Via Guglielmo Reiss Romoli 239 </par> <par n="postalCode">10148</par> <par n="city">Torino</par> <par n="subdivision">TO</par> <par n="country">Italy</par> </dataPart> </ctxEl> </ctxEls> </contextML> Figura 5.2.6 Risoluzione della cella 222-1-61101-72162201 Ogni cluster contiene una lista di identificativi Bluetooth, che elenca tutti i dispositivi che si sono trovati nelle vicinanze dell’utente durante il periodo di tempo indicato. La lista contiene gli id di tutti i dispositivi Bluetooth nei paraggi dell’utente che hanno volontariamente scelto di rendersi visibili e che quindi non nascondono il proprio identificativo. Ad ogni utente della piattaforma sono associati dei device personali (nel profilo di un utente, AUP). Lo User Proximity Provider (UPP) permette di associare il nome di una persona ad un identificativo bluetooth della lista, garantendo quindi di ottenere l’elenco dei “buddy” incontrati in un cluster. Ovviamente questi individui devono essersi volontariamente registrati in precedenza presso la piattaforma CA. Il provider restituisce non solo il nome della persona incontrata, ma anche la relazione che l’utente ha con questi individui: friend, colleague, ecc… (Figura 5.2.7). E’ prevista in futuro un’estensione che permetterà di inserire nei propri blog post soltanto alcune categorie di utenti: ad esempio, sarà possibile visualizzare i nomi dei propri amici ma non quelli dei colleghi. Si rimanda al Capitolo 6.5 per maggiori informazioni. 37 Raccolta e clustering dei dati di contesto <?xml version="1.0" encoding="UTF-8"?> <contextML xmlns="http://ContextML/1.1" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ContextML/1.1 http://cark3.cselt.it /schemas/ContextML-1.1.xsd"> <ctxEls> <ctxEl> <contextProvider id="UPP" v="1.0.0"/> <entity id="lukostaz" type="userName"/> <scope>userProximity</scope> <timestamp>2007-10-04T15:18:29+02:00</timestamp> <expires>2007-10-04T15:18:34+02:00</expires> <dataPart> <parA n="users"> <parS n="user"> <par n="userName">marcomarchetti</par> <par n="fullName">Marco Marchetti</par> <par n="tech">BT</par> <par n="rel">unknown</par> <par n="interm"/> </parS> </parA> </dataPart> </ctxEl> </ctxEls> </contextML> Figura 5.2.7 UPP, esempio di risoluzione di Bluetooth proximity addresses list Occorre infine sottolineare come la fase di raccolta dei dati sia il processo più costoso in termini di prestazioni per il generatore di blog. Recuperare tutti i dati necessari è un’operazione che necessita molte chiamate alla piattaforma CA. Interrogare le API, disponibili come webservice REST (Capitolo 4), è quindi il vero collo di bottiglia della catena di operazioni necessarie alla creazione di un blog post. 5.3 I dati di contesto: caratteristiche generali. Dopo una fase preliminare di raccolta dei dati di contesto da più provider, si ottiene un dataset di informazioni che interessano la giornata che dovrà essere descritta. In Figura 5.3.1 vediamo il formato tipico dei dati di contesto con cui lavorano gli algoritmi di clustering. 2007-09-07 09:24 222-1-61101-72162201 office,tilab Timestamp GSM CGI ownoffice,b1043 Oscar,friend; Virtual place CGI Virtual Place Bluetooth Nearby buddies Figura 5.3.1 Formato dei dati di contesto incrociati Come spiegato nel Capitolo 5.2, il generatore di blog ricava le informazioni di contesto dai provider della piattaforma. La CA Platform riceve ed elabora i context 38 Raccolta e clustering dei dati di contesto update dai terminali associati agli utenti equipaggiati con il client TeamLife (Capitolo 4.5). Frequenza degli update Il client effettua update di dati di contesto con una frequenza non costante nel tempo, che dipende dalle policy di update scelte dall’utente. Il terminale comunica con la piattaforma nelle seguenti situazioni: - Cambio di contesto: il device si aggancia ad una base station diversa, quindi è necessario comunicare il nuovo CGI al server. - Refresh Periodico: il client rinfresca periodicamente il proprio contesto, anche nel caso in cui ci si trova in condizioni statiche. Due parametri configurabili dall’utente controllano la frequenza degli update: - Bluetooth scan interleaving: espresso in secondi, è il periodo che intercorre tra gli aggiornamenti relativi alla presenza di device bluetooth nei paraggi. - Cell cycle: è un intero che, moltiplicato con il Bluetooth Scan Interleaving, definisce l’intervallo in secondi con cui il device effettua un update della cella CGI-GSM. Gli algoritmi di clustering sviluppati tengono in considerazione le possibili differenze di impostazioni tra i terminali, in particolare per quanto riguarda la frequenza degli update di contesto (che, inoltre, può essere modificata dall’utente direttamente dal device). Ad esempio, discriminare tra una situazione di movimento e una statica può essere più o meno semplice a seconda della frequenza del refresh del contesto (Capitolo 5.4). Occorre inoltre considerare che, durante una giornata, possono esserci dei periodi in cui non si sono verificati update di contesto. L’utente può infatti spegnere il proprio device per un certo periodo di tempo, può disattivare il client oppure può trovarsi in un’area non coperta dalla rete GSM/UMTS. Tipi di location I dati di contesto seguono un andamento diverso a seconda del luogo in cui l’utente si trova. È utile analizzare due situazioni distinte, all’interno delle quali si analizza sia il caso in cui l’utente è fermo, sia il caso in cui è in movimento. - Aree urbane: la concentrazione di Base Station GSM/UMTS è maggiore e le singole celle hanno un raggio di copertura di qualche centinaio di metri. In questo caso la localizzazione su base cella sarà ovviamene più precisa. - Situazioni statiche: in una zona densamente abitata le Base Station si sovrappongono ed è più probabile trovarsi a cavallo tra molte celle. Nonostante l’utente sia fermo in un luogo ben preciso è molto probabile che il suo terminale non rimanga sempre agganciato alla stessa Base Station. Si verificano cambi tra celle più o meno rapidi, 39 Raccolta e clustering dei dati di contesto che complicano l’analisi e il raggruppamento dei dati. Rilevare la staticità di un utente in questi casi è più complesso (Figura 5.3.2). 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 2007-09-30 17:42:02.0 17:41:38.0 17:41:24.0 17:40:30.0 17:39:11.0 17:39:06.0 17:38:04.0 17:36:29.0 17:36:19.0 17:36:03.0 17:35:26.0 17:35:01.0 17:33:42.0 17:33:26.0 222-1-34649-34079 222-1-34649-17921 222-1-34649-34079 222-1-34649-17921 222-1-34649-34079 222-1-34649-34097 222-1-34649-17921 222-1-34649-31622 222-1-34649-34097 222-1-61101-72165119 222-1-34649-17921 222-1-34649-34079 222-1-34649-31622 222-1-34649-34097 Figura 5.3.2 Switch tra celle in una situazione statica in zona urbana coperta da molte celle GSM/UMTS (Via Roma, Torino) - Situazioni di movimento: è la situazione duale della precedente: in una zona con una fitta copertura di celle GSM, è possibile tracciare più agilmente il movimento dell’utente. È utile evidenziare che una situazione di movimento rapida (viaggio in automobile, treno, ecc…) è più facile da individuare rispetto al caso in cui l’utente si sposta a piedi. Nel primo caso otteniamo una chiara sequenza di CGI diversi, aggiornata ad ogni cambio di cella (Figura 5.3.3). Se un utente si sposta a piedi, otteniamo, in alcuni casi, un pattern simile a quello di staticità in presenza di switch di cella spuri. 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 2007-10-02 19:01:59.0 19:01:48.0 19:01:06.0 18:57:50.0 18:57:09.0 18:56:40.0 18:55:09.0 18:54:28.0 18:54:17.0 18:54:05.0 18:53:07.0 18:52:53.0 18:52:42.0 18:51:54.0 18:50:38.0 18:49:53.0 222-1-61104-72377238 222-1-24650-12180 222-1-61104-72377245 222-1-61103-72310599 222-1-61103-72305291 222-1-61103-72305290 222-1-61103-72306615 222-1-61103-72306617 222-1-61103-72328636 222-1-61103-72328635 222-1-61103-72307084 222-1-61103-72307083 222-1-61103-72288628 222-1-61103-72305303 222-1-61103-72305302 222-1-61103-72328629 Figura 5.3.3 Distribuzione dei dati di contesto in caso di spostamento rapido 40 Raccolta e clustering dei dati di contesto - 5.4 Località rurali: sono coperte da un numero minore di Base Station. Sono inoltre caratterizzate da un raggio di copertura di qualche Km. La localizzazione dell’utente è dunque meno precisa. - Situazioni statiche: sono più facili da individuare rispetto al caso urbano. Le celle hanno infatti un raggio più ampio, e la probabilità di trovarsi a cavallo tra una cella e l’altra è minore. Nel caso questo si verifichi per un tempo abbastanza lungo c’è però il rischio di essere localizzati in una zona lontana anche qualche Km, a causa della maggiore distanza tra le Base Station. - Situazioni di movimento: la localizzazione dell’utente su base GSM, non permette di distinguere il movimento all’interno di una cella. Nelle zone rurali, è possibile che un utente effettui del movimento senza mai uscire dalla stessa cella. In questi casi, non è possibile discriminare tra una situazione di staticità o una di movimento. Cluster Analysis applicata al tracking di un utente Gli algoritmi di clustering sviluppati hanno l’obiettivo di raggruppare i dati di contesto di un utente, per individuare le azioni che questo ha compiuto durante la giornata con la massima precisione possibile (Figura 5.4.1). Cluster 1 (Statico) 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 11:02:33.0 10:59:09.0 10:55:46.0 10:52:41.0 10:48:59.0 10:45:34.0 10:42:11.0 10:38:47.0 10:37:47.0 09:27:01.0 08:58:11.0 08:56:28.0 08:56:05.0 08:54:20.0 08:51:31.0 08:49:16.0 08:48:47.0 08:48:18.0 08:47:50.0 08:47:21.0 08:46:51.0 08:46:20.0 08:45:15.0 08:44:02.0 08:42:33.0 08:42:02.0 08:40:08.0 08:36:26.0 08:33:02.0 08:29:46.0 08:26:15.0 08:22:51.0 08:19:34.0 08:16:10.0 08:12:59.0 08:09:17.0 08:05:53.0 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72157899 office,tilab 222-1-61104-72386176 n/a,n/a 222-1-24650-121 n/a,n/a 222-1-24650-122 n/a,n/a 222-1-54650-923 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72376116 n/a,n/a 222-1-61104-72395763 n/a,n/a 222-1-61104-72400263 n/a,n/a 222-1-61104-72395770 n/a,n/a 222-1-61104-72400262 n/a,n/a 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home Start 08:58 End 11:02 CGI 222-1-61101-162201 VP CGI Office, TILab VP Bth Not available Cluster 2 ( Movimento) Start 08:42 End 08:56 CGI From 222-1-24550-1281 CGI To 222-1-24650-121 VP CGI Residence, home From VP CGI To Office, TILab VP Bth Not available Cluster 3 (Statico) Start 08:05 End 08:40 CGI 222-1-24550-1281 VP CGI Residence, home VP Bth Not available Figura 5.4.1 Il processo di clustering dei dati di contesto 41 Raccolta e clustering dei dati di contesto Le dimensioni interessate nel raggruppamento sono due: il tempo e la posizione. Il generatore di blog contestualizzato deve rilevare sia situazioni statiche che dinamiche. E’ quindi necessario definire due tipologie di cluster: i cluster statici e quelli di movimento. Un cluster statico è caratterizzato dai seguenti attributi: - Timestamp di inizio e di fine - GSM-CGI della cella eletta come centro del cluster - Virtual Place CGI legato al CGI in precedenza scelto come centro del cluster (se presente) - Virtual Place Bluetooth (se presente) - Elenco delle persone incontrate (se presente) Un Cluster di movimento ha invece queste caratteristiche: - Timestamp di inizio e di fine - GSM-CGI della cella di partenza - GSM-CGI della cella di arrivo - Virtual Place CGI della cella di partenza (se presente) - Virtual Place CGI della cella di arrivo (se presente) - Virtual Place Bluetooth che identifica il mezzo di trasporto utilizzato. Una situazione di movimento può infatti essere accompagnata da un identificativo bluetooth che indica il tipo di veicolo utilizzato nello spostamento, ad esempio la propria auto, un treno, un bus, ecc… (Capitolo 6.2). - Elenco delle persone incontrate (se presente) Come detto in precedenza, il processo di raggruppamento avviene rispettando l’ordinamento cronologico degli update di contesto. Occorre ovviamente che le tecniche di raggruppamento operino anche sulla posizione geografica dell’utente. Sia la localizzazione GSM-CGI che quella basata sull’etichettatura dei Virtual Place sono effettuate a partire da attributi categorici (stringhe). Non è quindi possibile operare con tecniche di clustering tradizionali (ad esempio, K-Means [33]) che raggruppano gli elementi in base alla distanza euclidea, in quanto non è possibile definire un concetto di distanza sia tra identificativi GSM-CGI che tra le etichette dei Virtual Place. Inoltre, utilizzare algoritmi di clustering noti in letteratura che operano esclusivamente su attributi categorici (es: ROCK, [32]) sarebbe scorretto, perché si ignorerebbe la dimensione temporale, di cui si deve invece tenere conto per mantenere la cronologia degli eventi. E’ stato quindi necessario sviluppare un algoritmo ad hoc, che soddisfi tutte le esigenze elencate in precedenza. L’analisi delle Context History degli utenti, ha portato alla decisione di sviluppare due algoritmi diversi, che differiscono sia per situazioni di utilizzo, che per precisione dei risultati. 42 Raccolta e clustering dei dati di contesto 5.5 Algoritmo “Compare&Merge” L’algoritmo analizza le entry di contesto nell’ordine con cui queste sono restituite dalla piattaforma (dalla più recente alla più vecchia). In questo modo si evita un ulteriore ri-ordinamento della lista, che è tipicamente composta, nel caso di una giornata tipo, da centinaia di record. E’ possibile raggruppare le informazioni basandosi su GSM-CGI, oppure, se impostati dall’utente, si può operare a livello di Virtual Place CGI o Bluetooth, trascurando in questo modo i problemi introdotti dalla tecnologia di localizzazione su base cella (Capitolo 5.3). La procedura di raggruppamento dei dati si articola in due passi fondamentali: 1. Scansione preliminare della Context History dell’utente e aggregazione delle entry vicine temporalmente con stessa location (Figura 5.5.1). foreach ContextEntry ce{ if (ce.location == clusterTemp.location) clusterTemp.addContextEntry(ce); else{ tempList.add(clusterTemp ); clusterTemp = new Cluster(ce); } } return tempList; Figura 5.5.1 Scansione preliminare delle entry di contesto In questo passo si individuano le situazioni statiche non ambigue, cioè i casi in cui l’utente ha effettuato degli update di contesto consecutivi con posizioni uguali (stesso CGI, oppure un gruppo di celle GSM o identificativi Bluetooth etichettati con lo stesso Virtual Place). Analizzando i pattern dei dati di contesto, è infatti emerso che nella maggior parte dei casi, questa è una delle situazioni più frequenti e significativa per l’utente: è quindi molto importante identificarla correttamente. Al termine dell’analisi preliminare si ottiene una lista formata da due tipologie di cluster temporanei: - Cluster con durata lunga: identificano sicuramente una situazione statica. - Cluster brevi e consecutivi, composti da poche entry di contesto: possono far parte di una situazione di movimento, oppure l’utente si trova in condizioni di staticità, ma con frequenti switch di cella (Capitolo 5.3). 2. Merge dei cluster temporanei consecutivi brevi per creare, eventualmente, cluster di movimento. Si analizza la lista dei cluster temporanei creata al punto 1 e la si trasforma nell’elenco dei cluster definitivi. Ci si sofferma in particolare sull’elenco dei 43 Raccolta e clustering dei dati di contesto cluster brevi: questi vengono aggregati in ordine cronologico in un cluster più grande. Al momento dell’aggiunta di questo nuovo cluster alla lista finale si analizza l’omogeneità delle location che questo contiene. Se ad un cluster appartiene un numero di posizioni diverse superiore ad una certa soglia, allora si tratta di una situazione di movimento ( per maggiori dettagli si consiglia il Capitolo 5.7, alla voce “Individuare il movimento”). Nel caso in cui questo non avvenga, il cluster individua una situazione statica: occorre quindi impostare come centro del cluster la posizione che ricorre più frequentemente all’interno del cluster stesso. Figura 5.5.2 descrive lo pseudocodice della parte principale del metodo. foreach Cluster currCluster{ // se cluster breve if (currCluster.duration < durationThreshold){ tempCluster.extend(currCluster); } // se cluster lungo else{ // se troppo poche posizioni diverse if (tempCluster.locationsCount < locationsThreshold) tempCluster.moving = true; finalList.add(tempCluster); finalList.add(currCluster); } } return finalList; Figura 5.5.2 Merge dei cluster temporanei brevi In Figura 5.5.2 si notano due parametri importanti utilizzati dall’algoritmo: - durationThreshold è la durata minima che un cluster deve avere per poter essere aggiunto alla lista finale. Attraverso questa soglia è possibile comunicare al generatore di blog che si desidera tenere traccia soltanto di eventi abbastanza lunghi. Situazioni di durata inferiore alla soglia vengono “inglobate” in cluster più ampi. Modificando il parametro è possibile quindi scegliere il livello di dettaglio desiderato. - locationsThreshold è invece la soglia legata alle diverse posizioni geografiche che un cluster può contenere. Se le posizioni diverse sono molte, allora si tratta di una situazione di movimento. La scelta di questo parametro dipende non solo dall’area geografica in cui l’utente si trova (Capitolo 5.3) ma anche dalle preferenze e dalle abitudini dell’utente stesso (Capitolo 5.7) Caratteristiche principali Le caratteristiche più importanti dell’algoritmo sono riassunte nell’elenco sottostante: - Nel caso in cui l’utente abbia effettuato un’etichettatura diffusa e precisa dei luoghi preferiti, si ottiene una precisione elevata. Le situazioni vengono 44 Raccolta e clustering dei dati di contesto - 5.6 rilevate correttamente, e l’errore temporale introdotto dall’algoritmo è trascurabile. L’algoritmo è in grado di creare cluster di movimento. E’quindi possibile individuare gli spostamenti compiuti da un utente. Grazie al parametro durationThreshold è possibile scartare con precisione le situazioni troppo brevi. L’algoritmo perde però di efficacia nelle zone non contrassegnate come Virtual Place in cui si verificano frequenti switch tra celle (Capitolo 5.3). In questo caso, se il numero di celle diverse è maggiore di locationsThreshold, la procedura può erroneamente etichettare la situazione come cluster di movimento. Algoritmo “MultiLevel Sliding Window” (MLSW) Compare&Merge è messo in crisi da particolari pattern di dati. Nel capitolo 5.3 si parla dei problemi legati ai frequenti switch di cella che possono avvenire anche nel caso in cui l’utente è fermo, e della difficoltà a distinguere questi casi da pattern di movimento lento. Queste situazioni, se troppo durature, possono mettere in crisi l’algoritmo, causando un decadimento nella fedeltà dei cluster generati. E’ possibile mitigare questo problema assegnando alle celle coinvolte negli switch lo stesso virtual place, ma questa soluzione non è sempre realizzabile (non è pensabile che l’utente si occupi di etichettare tutti i nuovi luoghi visitati!). Per risolvere questi problemi si è sviluppato così un nuovo algoritmo. MultiLevel Sliding Window lavora a partire dalle stesse informazioni di contesto utilizzate da Compare&Merge. E’ quindi possibile raggruppare i dati in base ai Virtual Place definiti dall’utente, sia con tecnologia Bluetooth che con GSM-CGI. Se i VP non sono presenti, il procedimento opererà a livello di identificativo CGI. Per rispettare l’ordinamento temporale degli eventi, i dati di contesto vengono analizzati in ordine cronologico inverso. Per analizzare la Context History di ogni utente si utilizza una finestra scorrevole (Figura 5.6.1). 45 Raccolta e clustering dei dati di contesto Sliding window, Iterazione 1 (durata: 24 minuti) 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 2007-10-03 11:02:33.0 10:59:09.0 10:55:46.0 10:52:41.0 10:48:59.0 10:45:34.0 10:42:11.0 10:38:47.0 10:37:47.0 09:27:01.0 08:58:11.0 08:56:28.0 08:56:05.0 08:54:20.0 08:51:31.0 08:49:16.0 08:48:47.0 08:48:18.0 08:47:50.0 08:47:21.0 08:46:51.0 08:46:20.0 08:45:15.0 08:44:02.0 08:42:33.0 08:42:02.0 08:40:08.0 08:36:26.0 08:33:02.0 08:29:46.0 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72162201 office,tilab 222-1-61101-72157899 office,tilab 222-1-61104-72386176 n/a,n/a 222-1-24650-121 n/a,n/a 222-1-24650-122 n/a,n/a 222-1-54650-923 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72395762 n/a,n/a 222-1-61104-72384437 n/a,n/a 222-1-61104-72376116 n/a,n/a 222-1-61104-72395763 n/a,n/a 222-1-61104-72400263 n/a,n/a 222-1-61104-72395770 n/a,n/a 222-1-61104-72400262 n/a,n/a 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home 222-1-24650-1281 residence,home Sliding window, Iterazione 2 (durata: 57 minuti) Figura 5.6.1 Sliding Window (durata massima della finestra: 60 minuti) La finestra temporale ha lunghezza massima fissa, determinata da un parametro espresso in minuti. Nel caso della Figura 5.6.1, questo valore è di 60 minuti. La prima entry di contesto dell’esempio è delle ore 11:02:33. La finestra scorrevole selezionata può lavorare su entry non più vecchie delle ore 10:02:33 (la durata massima permessa è di 60 minuti). I dati dell’esempio hanno però un “buco”, dalle ore 10:37:47 alle 09:27:01 (l’utente potrebbe aver spento il terminale). L’ultimo dato che può far parte della prima iterazione della finestra è quindi quello datato 10:37:47, in quanto, per scelta progettuale, l’algoritmo non inferisce la posizione dell’utente in assenza di update di contesto. Il dato successivo, datato 09:27:01 genererebbe una finestra di durata superiore ai 60 minuti concessi: occorre quindi fermarsi alle ore 10:37:47. La durata della prima finestra sarà di 24 minuti. Al momento dello spostamento, la sliding window partirà dalla prima entry esclusa, quella delle ore 09:27:01 e, in modo analogo 46 Raccolta e clustering dei dati di contesto a quanto spiegato in precedenza, determinerà l’ultimo dato di contesto che potrà fare parte della finestra, cioè quello delle ore 08:29:46. Si lavora quindi in relazione al tempo, e non al numero di entry coperte dalla finestra. Come spiegato nel Capitolo 5.3, il client in esecuzione sui device aggiorna le informazioni di contesto con intervalli che non sono noti a priori e che possono essere non costanti, oltre che riconfigurabili dall’utente a seconda della policy di update desiderata: non sarebbe quindi corretto definire la lunghezza della finestra in termini di numero di entry. La durata della finestra è comunque legata alla policy di update scelta dall’utente: infatti, per lavorare nelle condizioni migliori, la finestra deve contenere un numero significativo di entry: se si effettuano update con frequenza minore, è bene aumentare anche la durata della finestra. (nel capitolo 5.7 si discute sui valori più adatti da assegnare alla sliding window). E’ possibile raggruppare i dati in base a diversi parametri, organizzati in modo gerarchico (Capitolo 5.3). L’algoritmo dà la massima priorità ai Virtual Place Bluetooth definiti dall’utente. Se questi non sono presenti, si scende automaticamente al livello inferiore, che corrisponde ai Virtual Place GSM-CGI. Se i VP non esistono, si lavora a livello di identificativo CGI. Il numero e il tipo di livelli sono comunque riconfigurabili a piacere: lo stesso algoritmo può venire utilizzato anche in altri scenari con un numero diverso di livelli di annidamento. Figura 5.6.2 descrive il metodo principale dell’algoritmo: // creo finestra iniziale List windowElements = getWindowElements(0); // ciclo sugli elementi di contesto while (windowElements.size() > 0){ level = detectLevel(); isMoving = detectMovement(); centre = detectCentre(level); if ( compareCentres(centre,cluTemp,level) && getGapTimeSpan(cluTemp,windowElements)< offlineTimeSpan){ // estendo il cluster temporaneo corrente cluTemp = extendCluTemp(windowElements); }else{ // salvo cluster temporaneo corrente clusterList.add(cluTemp); // creo nuovo cluster temporaneo cluTemp = convertToCluster(windowElements); } // faccio avanzare la finestra windowElements = getWindowElements(windowElements.size()); } smooth(); return clusterList; Figura 5.6.2 MLSW, metodo principale Dopo aver creato una finestra della durata desiderata, si analizzano gli elementi di contesto che questa contiene con i seguenti metodi: 47 Raccolta e clustering dei dati di contesto - detectLevel(): per ogni finestra, l’algoritmo individua il livello a cui deve lavorare. Si analizzano tutti gli elementi della finestra: se una certa percentuale ha impostato il Virtual Place Bluetooth, si opera a questo livello. Altrimenti, si ricade sul livello a priorità inferiore, i Virtual Place CGI. Se anche in questo caso non c’è un numero sufficientemente alto di entry con questo valore impostato, si ripiega sull’identificativo di cella (CGI) che, comunque, è sempre presente. La percentuale minima ottimale di entry con la stessa posizione è stata scelta grazie a tentativi successivi: inizialmente si è impostato il limite ad una percentuale del 70%, ma si tratta di un valore troppo elevato. I dati di contesto, anche a causa del problema degli switch di cella (Capitolo 5.3), necessitano di percentuali molto più tolleranti. Prove successive hanno dimostrato che l’algoritmo funziona in modo ottimale con una percentuale di soglia pari ad un terzo delle entry totali della finestra (33%). Questo valore è comunque modificabile, nel caso si decidesse di utilizzare l’algoritmo in modo più restrittivo. E’ bene ricordare però che valori alti di questo parametro rendono Multilevel Sliding Window più sensibile ai problemi di switch spuri di celle. - detectMovement(): la funzione rileva se la finestra sta evidenziando una situazione di movimento, lavorando esclusivamente a livello CGI. E’ infatti sembrato fondamentale rilevare spostamenti su scala geografica, mentre è trascurabile ai fini della generazione del blog scoprire movimenti interni ad una cella individuati da una successione rapida di diversi Id Bluetooth (es: si è deciso di non considerare situazioni di movimento tra due stanze equipaggiate con due diversi beacon Bluetooth). Per rilevare del movimento, si associa un contatore ad ogni CGI trovato nella finestra. Se nessuna posizione ricorre per più di un terzo delle entry totali, ci troviamo in una situazione di movimento (questo valore è stato ritenuto il più ragionevole, ma può comunque essere modificato) (Figura 5.3.3). - detectCentre() individua la posizione più frequente all’interno della finestra. La funzione lavora al livello selezionato da detectLevel(), e può quindi ritornare un Virtual Place Bluetooth/CGI oppure un identificativo CGI. Ad ogni iterazione, gli elementi di una finestra sono inseriti nel cluster temporaneo precedentemente creato solo se la posizione eletta come centro della finestra è la stessa del centro del cluster temporaneo stesso. Si controlla inoltre che dal termine del cluster temporaneo all’inizio della nuova finestra non sia trascorso un tempo più lungo di un parametro predefinito. In base ai test effettuati si è scelto di impostare questo valore ad un’ora, ma è comunque possibile modificarlo. E’ infatti lecito supporre che un periodo di tale durata senza ricevere update di contesto dia origine ad un nuovo cluster, poiché sarebbe troppo sommario inferire la posizione in cui l’utente si è trovato per un lasso di tempo così lungo. 48 Raccolta e clustering dei dati di contesto Intervalli temporali senza informazioni di contesto non sono quindi descritti da alcun cluster. Smooth() si occupa di armonizzare le sequenze di cluster statici e di movimento, facendo combaciare, (se è possibile) la posizione di arrivo e di partenza delle situazioni di movimento con i luoghi in cui l’utente ha stazionato nei cluster che seguono o precedono lo spostamento. Caratteristiche principali Le caratteristiche più importanti dell’algoritmo possono essere riassunte nei seguenti punti: - MLSW è particolarmente efficace nei casi di situazioni statiche, con molti switch di cella. La presenza della finestra scorrevole mitiga infatti l’effetto dei saltellamenti da una cella all’altra. - E’ in grado di individuare cluster di movimento. - E’ possibile configurare a piacere il numero di livelli gestibili e le loro rispettive priorità. - E’ utile soprattutto nei casi in cui gli utenti non abbiano creato molti Virtual Place, in particolare nelle aree urbane fittamente coperte da celle GSM/UMTS. - L’algoritmo è meno preciso rispetto a Compare&Merge per quanto riguarda le decisioni prese sull’inizio e la fine dei cluster. Maggiore è la dimensione della finestra scorrevole, maggiore sarà l’errore commesso nello stabilire i margini di un cluster. Una finestra di breve durata permette di lavorare con una maggiore precisione ma, allo stesso tempo, non dà la possibilità di ignorare i cluster più brevi, come i piccoli spostamenti oppure le soste nei pressi di access point Bluetooth etichettati come Virtual Place dall’utente (Capitolo 5.7). - Come anticipato nel punto precedente, l’algoritmo MLSW permette di ignorare le situazioni più brevi (e quindi trascurabili ai fini della generazione del blog). Per ottenere questo risultato è sufficiente impostare una lunghezza della finestra adeguata. La natura dell’algoritmo non permette però di impostare direttamente una durata minima per i cluster, come accade invece in Compare&Merge. 49 Raccolta e clustering dei dati di contesto Figura 5.6.3 riassume le caratteristiche principali di entrambi gli algoritmi sviluppati: Compare&Merge Multilevel Sliding Window Tipologia Raggruppamento di attributi categorici con gestione della dimensione temporale. Parametri utilizzati per il raggruppamento GSM/UMTS CGI, Bluetooth, Virtual Place impostati dall’utente. Identificazione situazioni di movimento Situazione di utilizzo ottimale Situazioni critiche Sì Sì “Situazioni note” (presenza di Virtual Place, celle GSM senza particolari problemi di switch, ecc…) Casi di switch spuri tra celle in situazioni statiche Precisione Molto buona nelle situazioni ottimali (inferiore ad un update di contesto). Durata minima delle situazioni identificate Impostabile dall’utente Giornate vissute in luoghi anche non etichettati da Virtual Place. Nessuna in particolare Dipende dalle dimensioni della finestra scorrevole. Una window lunga 30 minuti garantisce errori contenuti (< 10 minuti). Non direttamente impostabile. Dipende in modo indiretto dalle dimensioni della finestra scorrevole Figura 5.6.3 Caratteristiche principali degli algoritmi a confronto Nello sviluppare gli algoritmi di clustering, non si è tenuto conto del tempo di esecuzione. Questo aspetto non è così importante per il generatore di blog. I set di dati di contesto su cui gli algoritmi operano sono composti infatti da qualche centinaio di record. Lavorare con dataset di queste dimensioni non vincola lo sviluppatore a cercare soluzioni particolarmente orientate alle prestazioni. Come già anticipato (Capitolo 5.2), il collo di bottiglia del processo di generazione di un blog post è la fase di raccolta dei dati dalla piattaforma CA. 5.7 Il clustering e la percezione dell’utente L’analisi della giornata di un utente tramite tecniche di raggruppamento dei dati di contesto, spinge a formulare alcune considerazioni. Il generatore di blog e gli algoritmi sviluppati hanno l’obiettivo di ricostruire la giornata in modo che questa sia il più possibile simile alla percezione e ai ricordi dell’utente. L’utilizzo del software su un gruppo di utenti per alcuni mesi ha permesso di capire che, per ottenere un buon risultato finale, occorre tenere in considerazione i seguenti aspetti: 50 Raccolta e clustering dei dati di contesto Analisi dell’errore L’errore complessivo è composto da due componenti separate. Occorre in primo luogo tenere conto dell’incertezza introdotta dalle tecnologie utilizzate per la localizzazione dell’utente. Ad esempio, se un utente compie movimenti all’interno della stessa cella CGI, questi saranno invisibili alla piattaforma (Capitolo 5.3). Inoltre, occorre tenere conto delle discrepanze tra i Virtual Place e gli stessi luoghi nella realtà: abbandonare il Virtual Place “office” significa tipicamente uscire dalla cella GSM/UMTS associata, cosa che può accadere (nei casi peggiori) anche a qualche Km di distanza dal luogo virtuale nella realtà. Esiste inoltre una componente di errore legata all’azione degli algoritmi di clustering. Compare&Merge commette un errore quasi nullo nelle transizioni in cui compaiono Virtual Place. La presenza di un VP mitiga infatti i problemi legati agli switch tra una base station e l’altra (Capitolo 5.3). L’errore commesso nei casi in cui la transizione avviene tra cluster con posizioni specificate soltanto dalla cella GSM è al massimo di alcuni minuti (Capitolo 5.5). L’errore commesso da MLSW non dipende invece dalla distribuzione dei dati contesto, ma dalla dimensione della finestra scorrevole (Capitolo 5.6). Per limitare l’incertezza massima dei cluster ad alcuni minuti, i test effettuati suggeriscono di utilizzare una sliding window di durata pari a mezz’ora. Finestre più lunghe determinano errori più consistenti, e quindi i risultati dell’algoritmo sono più sommari. Occorre sottolineare che il ricordo che gli utenti hanno della loro giornata è, nella maggior parte dei casi, abbastanza sommario. In generale, tollerare un errore massimo di circa 10-15 minuti, permette comunque di ricalcare fedelmente le azioni compiute durante una giornata. Durata minima dei cluster Il testing dell’applicazione ha permesso di tarare gli algoritmi in modo da scartare i cluster troppo brevi. Il problema è presente in particolare nel caso in cui l’utente stazioni ripetutamente per brevi periodi in Virtual Place Bluetooth, quindi poco estesi (es: un palazzo in cui ogni ufficio è equipaggiato con il proprio beacon Bluetooth). Le persone tendono infatti a trascurare gli spostamenti o le soste non abbastanza lunghe. Nella maggior parte dei test effettuati, gli utenti sembrano dare poca rilevanza alle situazioni con durata inferiore ai 30 minuti. Alzare eccessivamente questa soglia significa invece perdere troppi dettagli significativi. Dipendenza dal provisioning utente Entrambi gli algoritmi di clustering sviluppati sono in grado di operare su dati di contesto generati senza l’intervento dell’utente. Dall’utilizzo dell’applicativo è però emerso che l’efficacia del raggruppamento (in particolare se si utilizza Compare&Merge) aumenta notevolmente con il numero di Virtual Place impostati. Un set esteso di VP permette infatti di mitigare i problemi causati dalla localizzazione 51 Raccolta e clustering dei dati di contesto basata su GSM/UMTS (Capitolo 5.3). Gli algoritmi si comportano quindi meglio se utilizzati in “situazioni note”, etichettate dall’utente con i Virtual Place adatti (esempio, le giornate lavorative, passate tra casa e ufficio). Inoltre, il provisioning dell’utente è utile per assegnare ad ogni luogo una categoria corretta (Capitolo 6.5). Individuare il movimento Come già spiegato nella descrizione degli algoritmi, la decisione di creare una situazione di movimento avviene nel caso in cui il cluster possieda un numero di posizioni diverse superiore ad una certa soglia. Nello scegliere questo parametro è importante tenere conto di come gli utenti percepiscono il movimento. Ad esempio, alcune persone non considerano come spostamento una passeggiata in centro città, ma la cluster analysis in questo caso potrebbe etichettare la situazione come un movimento. Inoltre i pattern dei dati di contesto variano molto in base alla velocità degli spostamenti: movimenti rapidi sono identificati da una chiara sequenza di identificativi di cella diversi, mentre quelli lenti (ad esempio una passeggiata) sono più ambigui (Capitolo 5.3). In base all’esperienza maturata in questi mesi, sembra ragionevole utilizzare una soglia di 5 CGI diversi per Compare&Merge (Capitolo 5.5), mentre è opportuno che nessuna entry della finestre di MSLW abbia una frequenza superiore al 33% (Capitolo 5.6). Inter-cluster gap E’ possibile, per alcuni motivi, che la piattaforma non riceva update di contesto per un certo periodo. Il terminale o il client possono infatti essere disattivati dall’utente per il lasso di tempo desiderato. Al termine di una situazione del genere (ovviamente, il problema si pone in caso di stazionarietà) è ancora lecito considerare le nuove entry di contesto come parte del vecchio cluster? Gli algoritmi prendono in considerazione questa situazione, attraverso soglie che definiscono la durata massima accettabile di questi periodi senza update; tipicamente questi valori corrispondono a 60 minuti. Oltre questa soglia si crea un nuovo cluster anche se la posizione è la stessa del gruppo di entry precedente. Come già anticipato in precedenza (Capitolo 5.6), gli intervalli temporali senza informazioni di contesto non sono descritti da alcun cluster. 5.8 Implementazione Il processo di acquisizione delle informazioni di contesto dalla piattaforma CA e gli algoritmi di raggruppamento dei dati sono implementati come classi Java. 52 Generazione e pubblicazione dei blog post 6 Generazione e pubblicazione dei Blog Post 6.1 Introduzione In seguito alla fase di raccolta dei dati di contesto e di clustering (Capitolo 5), occorre generare il blog post vero e proprio. Effettuare questa operazione prevede alcuni passaggi (Figura 6.1.1). Per prima cosa si analizza l’organizzazione del testo di un blog post, con particolare enfasi sulle strutture sintattiche che lo compongono. Si descrivono in seguito le tecniche utilizzate per trasformare in testo naturale i dati contenuti nei cluster di contesto. L’implementazione di questo passaggio avviene attraverso l’utilizzo di un Natural Language Generator (NLG). Alcune informazioni presenti nel testo del blog post (indirizzi, persone nelle vicinanze dell’utente) sono inoltre arricchite tramite l’uso di particolari strutture di markup semantico note come Microformats. Una volta creato il testo, è necessario aggiungere i contenuti multimediali acquisiti dall’utente durante la sua giornata. Il generatore di blog è così integrato con le informazioni provenienti dal portale di media sharing TeamLife, un’altra applicazione sviluppata nel progetto di Context Awareness [23]. Infine, occorre pubblicare i post sul web: in questo caso si utilizza una piattaforma per il personal blogging in grado di gestire una community di utenti, Wordpress Multi User: grazie a questo software, ogni utente può dispone del proprio blog contestualizzato. 53 Generazione e pubblicazione dei blog post Blog Post Generation NLG Context Cluster User preference s Figura 6.1.1 La generazione dei blog post, schema generale 6.2 La struttura del testo Per generare un blog post è necessario convertire i cluster di contesto in frasi in linguaggio naturale. Frasi statiche Context Clusters Action Detector Frasi statiche (compl. ogg) Realiser Frasi di Movimento _______ _______ _______ _______ Testo Naturale Figura 6.2.1 Processo di generazione del testo naturale Questo passaggio necessita della definizione di alcuni costrutti standard. È possibile distinguere tre tipi di strutture, in base al tipo di azione eseguita dall’utente: - Statiche: la persona è stata ferma in un luogo per tutta la durata del cluster. È il caso più frequente e viene generato a partire da un cluster statico. Il costrutto assume la struttura in (Figura 6.2.2). Come spiegato successivamente, il verbo scelto dipende dal tipo del luogo in cui l’utente si è trovato Soggetto Verbo Luogo Durata, inizio e fine Buddies I stayed at home for 4 hours, from 18:43 to 22:52, and there I met Marco. Figura 6.2.2 Situazione statica 54 Generazione e pubblicazione dei blog post - Statiche con complemento oggetto: l’utente è stato fermo in un luogo e ha partecipato ad un evento di durata pari a quella del cluster (es: riunione, convegno, lezione, ecc…). È generato a partire da un cluster statico. Soggetto Verbo Compl. Oggetto Luogo Buddies Inizio e Fine I had a four hour lesson in classroom 4 with Marco, from 10:30 to 14:30. Figura 6.2.3 Situazione statica con complemento oggetto - Movimento: l’utente si è spostato da un luogo ad un altro. Ovviamente questa tipologia di costrutti sintattici è generata a partire da un cluster di movimento. Soggetto Verbo Provenienza Destinazione Mezzo Durata, Inizio e Fine Buddies Luca and I moved from home to my office by car for one hour, from 08:27 to 09:28, and there I met Antonio. Figura 6.2.4 Situazione di movimento È utile elencare le caratteristiche principali dei blocchi che compongono le frasi di un blog post: Verbi Per scegliere il verbo associato ad un cluster occorre analizzare due diversi fattori: il movimento e la possibile presenza di Virtual Place impostati dagli utenti. - Presenza di movimento: in una situazione dinamica è necessario un verbo che descriva il tipo di movimento dell’utente. Si utilizza il predicato generico move. Se il cluster ha un Virtual Place Bluetooth (che, nelle situazioni di movimento identifica il mezzo di trasporto utilizzato) sarebbe però possibile utilizzare altri verbi più specifici. Ad esempio per un’automobile si potrebbe utilizzare drive. Non è purtroppo possibile capire se l’utente sta veramente guidando oppure è un passeggero. Per non creare una frase semanticamente errata, occorre utilizzare sempre il verbo più generico possibile (move). Per specificare il mezzo di trasporto si utilizza un complemento indiretto ad hoc. - Virtual Place: se non è presente un VP, si utilizza il verbo generico stay. Se invece un cluster statico possiede un VP occorre analizzarne il Place Type. Ogni luogo virtuale appartiene infatti ad una categoria ben precisa, come specificato in RFC 4480 [7] (Capitolo 5.2). Ad ogni tipo di VP è associato un verbo diverso, corrispondente all’azione più probabile compiuta dall’utente in quel luogo (Figura 6.2.5). 55 Generazione e pubblicazione dei blog post airport bar cafe office hotel shopping-area default ... wait enjoy relax work rest shop stay ... Figura 6.2.5 Alcune associazioni tra PlaceType (RFC 4480) e verbi I Virtual Place permettono quindi di generare blog entry più accurate: la partecipazione dell’utente è dunque molto importante per migliorare la qualità e la gradevolezza del testo generato. Inoltre, come possibile estensione futura, si è pensato di permettere agli utenti di abbinare un verbo personalizzato ad ogni tipologia di Virtual Place. Buddies Se l’utente ha incontrato altre persone registrate nella piattaforma, è necessario introdurre un complemento di compagnia. I cluster contengono infatti le informazioni relative ai buddies (Capitolo 5.2). Ai fini di migliorare l’accuratezza del testo, occorre verificare la frequenza con cui un altro utente appare nel cluster. Se un buddy è presente solo per una piccola percentuale di tempo, significa che si tratta di un semplice incontro. Una percentuale molto alta dimostra invece che la persona ha partecipato in modo prolungato all’azione. Occorre quindi differenziare queste due situazioni con costrutti sintattici diversi: - Frequenza bassa: si appende una frase subordinata con l’elenco delle persone incontrate durante l’azione (“… and I met Luca, Oscar and Walter”). - Frequenza alta: le persone che hanno partecipato per molto tempo all’azione sono aggiunte nel soggetto della frase (“Luca, Oscar, Walter and I worked in my office for 8 hours.”). Viene spontaneo impostare la soglia di frequenza su valori molto elevati (ad esempio, 90%). Durante la fase di testing del software questa assunzione è stata però smentita. Il ricordo che le persone hanno della loro giornata è tale per cui, affinché un altro utente sia considerato come protagonista dell’azione è sufficiente che superi soglie molto più basse. Numerosi tentativi in varie situazioni hanno portato a scegliere 60% come valore di default (questa percentuale è comunque personalizzabile dall’utente). Supponiamo, ad esempio, di aver lavorato nel proprio ufficio per tutta la giornata, ma di essere stati in compagnia del collega Alberto solo durante la mattina. L’azione sarà ovviamente modellata da un unico cluster. La presenza di Alberto nel cluster non arriverà certo a valori dell’80-90%, ma sarà decisamente inferiore. Quindi, nonostante sia lecito affermare “Oggi ho incontrato Alberto”, è decisamente più vicino ai ricordi dell’utente affermare “Oggi io e Alberto abbiamo lavorato insieme”. 56 Generazione e pubblicazione dei blog post Per quanto riguarda le persone incontrate per un breve periodo, si è invece scelto di non impostare una soglia minima di presenza: se un cluster contiene una persona che è stata nei paraggi per una sola entry di contesto, significa che questo individuo si è trovato comunque nelle vicinanze dell’utente, ed è quindi corretto segnalarlo nel blog post, per aderire in modo più fedele ai ricordi della persona. Come descritto meglio nel capitolo 6.5, la piattaforma CA fornisce anche il tipo di relazioni che intercorrono tra gli utenti della piattaforma (amici, colleghi, parenti, ecc…). Grazie a queste informazioni sarà possibile, in un’estensione futura, pubblicare nel blog post solo le categorie di buddies selezionate dall’utente (Capitolo 6.5). Complemento di Tempo È possibile aggiungere alla frase anche la durata e l’ora d’inizio e di fine dell’azione. Per quanto riguarda la durata, si genera una locuzione temporale in linguaggio naturale a partire dai timestamp del cluster (“for a few minutes”, “for half an hour”, “for 4 hours and a half ”, ecc…). Complemento di luogo Le frasi contengono ovviamente anche delle informazioni sul luogo in cui l’azione si è svolta. Se è impostato un Virtual Place, verrà visualizzato il suo nome, altrimenti si ripiega sull’indirizzo civico del centro del cluster (Capitolo 5.2). I cluster di movimento hanno ovviamente informazioni sia sul luogo di partenza che su quello di arrivo. Per maggiori dettagli si rimanda al Capitolo 6.5 Complemento oggetto Alcuni Virtual Place permettono di risalire quasi senza ambiguità all’azione compiuta. Ad esempio, se un utente è stato in una meeting room per tutta la durata del cluster, è altamente probabile che abbia partecipato ad una riunione. Per rendere il testo più vario e naturale, è possibile, utilizzando ovviamente un verbo transitivo, aggiungere alla frase un complemento oggetto, a cui viene associato anche un aggettivo di durata temporale. Ad esempio, invece della frase “I stayed in meetingroom B for 4 hours with Carlo and Walter” è possibile abbinare alla tipologia del VirtualPlace (meetingroom) il complemento oggetto che corrisponde alla situazione in cui si è trovato l’utente (in questo caso, una riunione). La frase creata diventa quindi “I had a four hour meeting in meeting room B with Carlo and Walter.” Complemento di Mezzo I cluster di movimento possono contenere un Virtual Place Bluetooth, che identifica il mezzo di trasporto. Anche in questo caso, grazie ai place type elencati in [7] è possibile discriminare tra il tipo di veicolo utilizzato. Le frasi create saranno quindi accompagnate dalla locuzione “by car” oppure “by bus”, ecc… 57 Generazione e pubblicazione dei blog post 6.3 Personalizzare il testo Il testo che descrive la giornata può essere generato con diversi livelli di dettaglio. È possibile infatti creare blog post omettendo il nome delle persone incontrate. La piattaforma CA permette inoltre di conoscere la relazione che l’utente del blog ha con queste persone: grazie a queste informazioni sarebbe possibile visualizzare nel blog post solo gli utenti della piattaforma che possiedono una determinata relazione con il possessore del blog (Capitolo 6.5) (questa caratteristica sarà una delle future estensioni del generatore di blog). Si può anche scegliere un valore a piacere per la soglia che determina se abbiamo compiuto un’azione con un utente oppure no (Capitolo 6.2). Si possono inoltre non pubblicare informazioni temporali (durata, ora d’inizio e di fine). Un discorso analogo vale per i contenuti multimediali (Capitolo 6.6), che possono quindi essere inclusi o meno nel blog post. L’utente può inoltre decidere se arricchire i suoi post con l’utilizzo di Microformats (Capitolo 6.5) oppure è possibile creare un testo semplice, senza informazioni semantiche aggiuntive. In Figura 6.3.1 si presenta la stesso blog post generato con diversi livelli di dettaglio. Today I stayed at home until 08:00. I moved from home to tilab for one hour from 08:07 to 09:07. Oscar Rodriguez, Cristina Fra and I worked at tilab for 8 hours and a half from 09:08 to 17:31, and there we met Walter Goix and Marco Test. I moved from tilab to Piazza Vittorio Veneto in Pinerolo, TO for one hour from 17:37 to 18:38. I stayed in Piazza Vittorio Veneto in Pinerolo, TO for one hour from 18:44 to 19:43. I stayed at home from 20:04. Today I stayed at home. I moved from home to tilab. I worked at tilab. I moved from tilab to Piazza Vittorio Veneto in Pinerolo, TO. I stayed in Piazza Vittorio Veneto in Pinerolo, TO. I stayed at home. Figura 6.3.1 Blog post creato con livelli di dettaglio diversi 58 Generazione e pubblicazione dei blog post 6.4 Natural Language Generation Dopo aver descritto i blocchi logici delle frasi corrispondenti ai cluster di contesto e le relative informazioni da visualizzare (Capitolo 6.2), occorre creare le frasi in linguaggio naturale. È ovviamente possibile seguire un approccio “tradizionale”: dopo aver creato i blocchi di testo corrispondenti a soggetto, verbo e complementi, si procede con la loro concatenazione per creare le frasi da pubblicare nel blog post. Questa strada prevede però la gestione manuale di tutti i problemi connessi con la realizzazione di un testo in linguaggio naturale, come la corretta divisione in paragrafi, la punteggiatura o la gestione delle liste di sostantivi. La creazione di un testo naturale può essere invece demandata ad un generatore di linguaggio naturale. Natural Language Generator, architettura generale. Un NLG è un software in grado di creare del testo naturale a partire da una rappresentazione non linguistica [8]. Tipicamente un sistema NLG è composto da tre componenti, che operano in cascata (Figura 6.4.1) [8]. Figura 6.4.1 Architettura tipica di un NLG - - Document planner: decide quali informazioni appaiono nel testo finale in base all’obiettivo richiesto dagli utenti. In questo passo si definisce inoltre l’ordine delle parti del discorso all’interno del testo. Microplanner: in questo step si decide quali parole e quali strutture sintattiche devono essere utilizzate per esprimere il contenuto. Si sceglie 59 Generazione e pubblicazione dei blog post inoltre in che forma devono apparire alcune entità del testo (ad esempio, il formato delle date). Infine, grazie ad una procedura di aggregazione si decide come mappare le informazioni su frasi e paragrafi. - Surface Realiser: si occupa della realizzazione linguistica, ovvero la conversione di entità fino a questo momento astratte in testo. Si effettua inoltre una realizzazione della struttura del testo. Questa fase prevede la conversione di frasi e paragrafi astratti in punteggiatura. Viene così completata la costruzione sintattica del testo finale. Il generatore di blog necessita esclusivamente delle funzionalità di surface realising. I passi precedenti esulano dall’obiettivo dell’applicazione. SimpleNLG Tra i molti generatori disponibili in rete [9], la scelta è ricaduta su SimpleNLG [10]. Si tratta di un realiser di una grammatica inglese relativamente ristretta [10], implementato come libreria Java. È in grado di effettuare realizzazioni linguistiche e strutturali. È stato specificatamente creato per applicazioni che richiedono una conversione dei propri dati in testo naturale. SimpleNLG non sceglie i termini da utilizzare nel testo. Si occupa però della creazione di frasi grammaticalmente corrette, utilizzando le parole scelte dagli altri moduli del generatore di blog (Capitolo 6.2). SimpleNLG solleva il programmatore dalla gestione delle operazioni più ripetitive che coinvolgono la generazione del linguaggio naturale come, ad esempio: - Ortografia: inserisce gli spazi giusti tra frasi e paragrafi. Gestisce correttamente la punteggiatura (es: “I stayed in Washington D.C.” invece di “I stayed in Washington D.C..”). Si occupa inoltre di formattare correttamente le liste (“Marco, Giuseppe, and Diego.”). - Morfologia: coniuga i verbi al tempo desiderato, gestendo i verbi irregolari. Utilizza la forma del verbo corretta in base alla persona del soggetto. - Grammatica: permette di concatenare automaticamente in modo corretto i blocchi logici contenenti i termini definiti dall’utente (che, in questo caso, si tratta del generatore di blog). Per generare del testo naturale, SimpleNLG mette a disposizione delle classi che modellano: - Paragrafi - Frasi - Verbi - Complementi diretti e soggetti - Complementi indiretti 60 Generazione e pubblicazione dei blog post Creare il testo Dopo aver costruito in memoria la struttura logica del testo, si può procedere con la procedura di realizzazione, che permette di creare il testo naturale in forma di stringa. Ogni cluster viene così trasformato in una frase, composta dai blocchi visti al Capitolo 6.2. I blocchi logici sono utilizzati da SimpleNLG per costruire la struttura delle frasi in memoria. I costrutti sono successivamente concatenati tra loro, formando in questo modo il paragrafo desiderato. La procedura per la creazione del testo è riassunta in forma grafica in Figura 6.4.2, mentre in Figura 6.4.3 si presenta un esempio di output. Verbo Soggetto Complementi Avverbi Verbo Soggetto Complementi Avverbi Frase Frase Paragrafo Realiser .......... .......... Strutture dati del sistema NLG in memoria _____ _____ _____ _____ _____ Testo Naturale NLG Figura 6.4.2 La generazione del blog post. Il box grigio evidenzia le strutture dati che il sistema NLG costruisce in memoria prima di realizzare la stringa di testo naturale. Today Oscar Rodriguez and I worked at TILab until 18:18, and there we met Elio Paschetta, Walter Goix and Marco Marengo. I moved from TILab to Sumi's for one hour from 18:21 to 19:20. I stayed at Sumi's for 3 hours and a half from 19:23 to 23:06. I stayed at home from 23:07. Figura 6.4.3 Il testo di un blog post di esempio L’utilizzo di un sistema NLG richiede un carico elaborativo maggiore rispetto alla semplice concatenazione di stringhe. Il ritardo introdotto è però tale da non influenzare le prestazioni complessive del generatore di blog (il cui collo di bottiglia consiste nella fase di acquisizione dei dati di contesto dalla piattaforma CA, Capitolo 5.2). 61 Generazione e pubblicazione dei blog post 6.5 Il blog strutturato: Microformats Il problema della semantica Uno degli aspetti più significativi della ricerca applicata al Web, consiste nell’introdurre delle tecniche per standardizzare il modo in cui alcune categorie di informazioni vengono pubblicate nel codice (X)HTML (posizioni geografiche, indirizzi, dettagli su persone, eventi, ecc…). L’imponente mole di documenti presente sul web è infatti composta per la maggior parte da pagine HTML [11]: queste informazioni vengono indicizzate già da molti anni dai motori di ricerca tradizionali. I dati su cui questi software lavorano e l’output prodotto sono però “piatti”: è consuetudine effettuare delle ricerche sul web in base a semplici parole chiave, ma la rapida crescita delle dimensioni del web stesso e la necessità di perfezionare i risultati delle ricerche, stanno spingendo la ricerca a pensare a nuove tecniche per aiutare i software a trovare le informazioni desiderate in base al significato semantico. A differenza degli esseri umani, il software non è però molto abile a comprendere la semantica di un testo scritto (parsificare il linguaggio naturale è un’operazione molto complessa, e poco scalabile sulle dimensioni sempre maggiori del web). Per permettere un processing automatico più efficiente di una pagina web, occorre quindi pensare a delle tecniche per standardizzare il modo in cui vengono presentate le informazioni. I Microformats: definizione I microformats sono uno dei possibili approcci per risolvere il problema di creare pagine web con markup semantico [11]. In [12], si trova una definizione di Microformats: “un set di semplici standard di formati dati […] creati per migliorare la pubblicazione di blog strutturati e di altri microcontenuti in generale.”. Uno dei principi guida nella definizione dei Microformats è il concetto di riuso di tecnologie già esistenti (ad esempio alcuni microformati si basano sullo standard vCard). Il principio del riuso è evidente se si analizzano le tecnologie su cui i Microformats sono basati. A livello tecnico infatti, un Microformat altro non è che un riutilizzo di elementi e di attributi XHTML (ad esempio <div> o <span>), con alcuni valori ben definiti di attributo class. Si è pensato inoltre ad un approccio che risolvesse il problema del markup semantico senza stravolgere non solo il contenuto del web, ma anche l’architettura dei browser sul mercato. Un altro aspetto da tenere in considerazione, è il fatto che gli sviluppatori, nell’adottare i microformats, possono riutilizzare le loro conoscenze. 62 Generazione e pubblicazione dei blog post Inoltre, grazie ai microformats, i programmi sono in grado di estrarre informazioni dal testo XHTML, garantendo comunque un’alta comprensibilità da parte delle persone che leggono. Un programma capace di parsificare del codice XHTML contenente dei Microformats è così in grado di estrarre i dati con markup semantico contenuti nella pagina stessa. Ad esempio, un parser adeguato potrà riconoscere che un Microformat di tipo adr contiene un indirizzo civico. Potrà così utilizzare questa informazione per i propri scopi (ad esempio, visualizzare l’indirizzo su una mappa). Esistono molti tipi di Microformats. Fondamentalmente si differenziano tra Elemental Microformats, composti cioè da un unico elemento XHTML e compound microformats, che comprendono invece più di un elemento [12]. Figura 6.5.1 Tipi di Microformat [12] Più avanti nel capitolo si analizzeranno i Microformats utilizzati dal Blog Contestualizzato. I vantaggi dei Microformats Creare un testo XHTML arricchito dall’uso di Microformats porta quindi molti vantaggi [11]: - Un formato standard per la rappresentazione facilita la scalabilità ai software di indicizzazione distribuiti, e permette un parsing con un significato semantico aggiunto. - Il codice delle pagine web diventa più uniforme e standardizzato, in quanto non sarà più necessario definire classi personalizzate per elementi come indirizzi, contatti, recensioni, ecc… - E’ possibile permettere una nuova interoperabilità tra applicazioni Desktop e contenuto web-based. Ad esempio, grazie al Microformat hCard, è possibile esportare informazioni sui contatti pubblicati in una pagina web direttamente nei programmi di gestione delle rubriche e posta elettronica (es: MS Outlook). 63 Generazione e pubblicazione dei blog post Come descritto successivamente, quest’ultimo aspetto è senza dubbio il più importante per quanto riguarda l’introduzione dei Microformats nel blog contestualizzato. Il blog contestualizzato e i Microformats Il blog contestualizzato fa uso di Microformats per il markup di luoghi (indirizzi civici oppure Virtual Place) e di persone. Si utilizzano i Microformats adr, hCard, e XFN. Markup di luoghi: adr Microformat In HTML non esiste un modo standard per marcare un indirizzo. Se intendiamo attribuire un significato semantico a indirizzi civici, occorre quindi utilizzare il Microformat composto adr. Rispettando la filosofia del riuso di standard preesistenti, adr fa uso delle specifiche del formato vCard relative agli indirizzi (Figura 6.5.2) [11]: Figura 6.5.2 I campi del formato vCard relativi a all'indirizzo civico [11]. Questo formalismo viene mappato in HTML dal microformat adr. Non è importante il tipo degli elementi utilizzati (per i microformats composti si può utilizzare indifferentemente <div> o <span>) ma, affinchè il microformat sia parsificato correttamente, è fondamentale che gli attributi class si attengano ai valori definiti nello standard vCard. L’elemento root deve inoltre essere di classe “adr” (Figura 6.5.3). <div class="adr"> <div class="street-address">2560 Ninth Street </div> <div class="extended-address">Suite 219</div> <span class="locality">Berkeley</span>, <span class="region">CA</span> <span class="postal-code">94710</span> <div class="country-name">USA</div> </div> Figura 6.5.3 adr Microformat Il blog contestualizzato utilizza adr sia per marcare gli indirizzi civici dei luoghi non etichettati da Virtual Place, sia per i VP stessi. Tra un elemento e l’altro di un MicroFormat composto è infatti possibile aggiungere del testo, come il place name del Virtual Place (Figura 6.5.4 a). adr non permette infatti di definire la tipologia di un 64 Generazione e pubblicazione dei blog post luogo. Come spiegato in seguito, l’utilizzo di un parser di Microformats, permette, ad esempio, di individuare facilmente questi luoghi su una mappa, sfruttando, grazie ad un opportuno software, le API di Google Maps. Grazie all’utilizzo di un opportuno CSS (Figura 6.5.4 b), è possibile formattare a piacimento il contenuto di un MicroFormat, garantendo la piena separazione tra la struttura dei dati e il codice necessario per la visualizzazione. Nel caso dei Virtual Place (Figura 6.5.4), sarà necessario formattare il Microformat adr in modo da nascondere le informazioni aggiuntive, per non appesantire il testo prodotto (Figura 6.5.4 c). <span class="adr">TILab <span class="street-address"> Via Guglielmo Reiss Romoli 239</span> <span class="locality">Torino</span> <span class="country-name">Italy</span> </span> (a) span.street-address{ display: none; } span.locality{ display: none; } span.country-name{ display: none; } TILab (b) (c) Figura 6.5.4 Un Virtual Place marcato con un Microformat adr(a), il CSS associato (b) e la sua visualizzazione nel testo (c) Markup di contatti e relazioni: hCard Il microformat composto hCard riutilizza il formalismo dello standard vCard, utilizzato per scambiare informazioni sui contatti in rubrica [11]. L’attributo class dell’elemento root del Microformat deve avere il valore “vcard” e i nomi delle classi degli elementi figli devono rispettare lo standard vCard (Figura 6.5.5 a). 65 Generazione e pubblicazione dei blog post <div class="vcard"> <div class="fn">Mario Rossi</div> <div class="org">Societa’ di esempio</div> <div class="tel">011-546829</div> <a class="url" href="http://ca.tilab.com/blog/mrossi">Myblog</a> </div> (a) div.org{ display: none; } div.tel{ display: none; } a.url{ display: none; } Mario Rossi (c) (b) Figura 6.5.5 hCard Microformat (a), CSS associato (b) e visualizzazione nel testo del blog post (c). Come descritto in precedenza (Capitolo 6.2), nel blog post di un utente possono apparire i nomi delle altre persone registrate nella piattaforma e incontrate durante la giornata. L’utilizzo del microformat hCard, permette di fruire di tutte le altre informazioni del profilo utente che la piattaforma CA mette a disposizione attraverso l’Advanced User Profile (Capitolo 4.4). Oltre al nome e cognome, il generatore di blog possiede infatti molte altre informazioni sugli utenti, come, ad esempio, il telefono, l’indirizzo email e l’URL personale di ogni buddy incontrato. Queste informazioni sono “annegate” nel blog post attraverso l’uso di un apposito CSS (Figura 6.5.5 b), come già fatto nel caso del MicroFormat adr per non rendere la lettura del blog post difficoltosa. Queste informazioni non visibili rispettano però la sintassi di hCard: un parser di Microformat sarà in grado di catturarle e permetterà ai visitatori della pagina di fruirne in molti modi. Sarà ad esempio possibile, in modo intuitivo e rapido, esportare i contatti presenti nel blog verso applicazioni di gestione rubrica, come Outlook. Markup per le relazioni tra utenti: XFN XHTML Friends Network (XFN) è stato il primo Microformat ad essere sviluppato. Il suo utilizzo permette di creare una social network, ovvero una rete di link che non solo collega individui, ma che specifica anche le relazioni umane tra gli utenti. Grazie ad XFN è infatti possibile descrivere in che modo si è legati alla persona puntata dal link (Figura 6.5.6). <a href="http://blog.com/wasvel" rel="colleague met">Walter</a> Figura 6.5.6 XFN Microformat 66 Generazione e pubblicazione dei blog post è un Microformat molto semplice: consiste in un set ridotto di valori ammessi per il tag rel dell’elemento HTML <a> . Alcune possibili relazioni tra utenti sono friend, colleague, neighbor, parent, met ( cioè qualcuno che abbiamo incontrato), ecc… (per un elenco completo si rimanda a [11]). E’ possibile assegnare più valori di relazione nello stesso attributo rel. La piattaforma CA, attraverso lo User Proximity Provider (UPP) (Capitolo 4.5) permette di ottenere, oltre allo username e al nome completo, anche la relazione con tutti i buddy incontrati in un cluster (Capitolo 5.2). Questa informazione viene utilizzata per costruire una social network che lega tra loro gli utenti del servizio di blog contestualizzato. Inoltre, la conoscenza delle relazioni tra utenti può dare la possibilità al generatore di filtrare la lista dei buddies. Per personalizzare ulteriormente i blog post si potrebbero infatti pubblicare soltanto gli utenti met, oppure solo i colleagues. Ogni utente presente in un cluster viene pubblicato nel blog post sottoforma di elemento <a>. Il link punta all’URL del blog contestualizzato del buddy, mentre l’attributo rel è quello ricavato dalla piattaforma CA (Figura 6.5.6). Fino a questo punto abbiamo considerato i due Microformat legati alle persone, hCard e XFN, come entità separate. Nulla vieta però di integrare i due costrutti: il blog contestualizzato presenta le informazioni relative agli altri utenti della piattaforma proprio in questo modo (Figura 6.5.7). Questo modo compatto di rappresentare i dati sui buddy dimostra la flessibilità e le potenzialità del markup semantico basato su microformat. Anche in questo caso, i Microformat sono formattati grazie alle informazioni contenute nel foglio di stile (Figura 6.5.5). XFN <a href=" http://ca.tilab.com/blog/mrossi " rel="colleague"> <span class="vcard"> <span class="fn">Mario Rossi</span> <span class="org">Societa’ di esempio</span> <span class="tel">011-546829</span> <a class="url" href="http://ca.tilab.com/blog/mrossi">MyBlog</a> </span> </a> Figura 6.5.7 Una combinazione di XFN e hCard Strumenti per il parsing I più importanti browser presenti tutt’ora sul mercato (Internet Explorer, FireFox, Opera, Safari, ecc…) non offrono ancora nativamente la possibilità di parsificare le pagine web per trovare e utilizzare i Microformat. Per parsificare una pagina che contiene microformati è però possibile utilizzare i seguenti tool [13]: - Operator: è un’estensione per Firefox 2. Si installa sottoforma di barra aggiuntiva nell’interfaccia del browser. Tramite un opportuno parsing, permette di individuare e localizzare i microformat di molti tipi all’interno 67 Generazione e pubblicazione dei blog post della pagina visualizzata. I formati supportati sono, per il momento adr, hCard, hCalendar, geo, tag, xFolk ed RDF. Per ogni microformat è inoltre possibile eseguire delle azioni: ad esempio, i microformat hCard possono essere esportati su Outlook, mentre gli adr possono essere localizzati sulle Mappe di Google o di Yahoo. E’ inoltre possibile personalizzare il menù delle azioni, scrivendo degli handler personalizzati per poter eseguire altre operazioni che coinvolgono i dati racchiusi nei microformat (Figura 6.5.8). Figura 6.5.8 Uno screenshot della barra di Operator - Tails: è un’altra estensione di Firefox 2. E’meno ricco di funzioni di Operator, ma permette comunque di esportare gli hCard e gli adr (che, si ricorda, sono entrambi basati sullo standard vCard). - XFN Dumper: è un bookmarklet in grado di effettuare il parsing della pagina per cercare ed evidenziare Microformat XFN. Si segnala inoltre che la tecnologia di parsing alla base di Operator potrebbe essere utilizzata in modo nativo dalla prossima versione di Firefox (3.0) [13]. 68 Generazione e pubblicazione dei blog post 6.6 Integrare elementi multimediali: TeamLife Portal Il generatore di blog contestualizzato si occupa anche di integrare il testo dei blog post con le immagini e i filmati che l’utente ha creato utilizzando il proprio dispositivo mobile durante la giornata. Questi contenuti non sono pubblicati a caso, ma sono abbinati alla frase corretta, e quindi al periodo giusto della giornata (cluster) in cui sono stati catturati. Per ottenere questo risultato, è ovviamente necessaria una procedura per prelevare i contenuti multimediali degli utenti. Per risolvere questo problema, il generatore di blog si interfaccia con un’altra applicazione fornita dalla piattaforma CA: il Portale Teamlife [23]. TeamLife Media Sharing Content Management System Si tratta di un CMS che permette agli utenti della piattaforma CA di condividere i propri contenuti (multimediali e non). In particolare, il servizio è caratterizzato da una forte integrazione con il client TeamLife in esecuzione sui device mobili. Come anticipato nel Capitolo 4.5 questo software, oltre ad effettuare periodicamente update di contesto verso la piattaforma, si occupa anche di gestire l’upload di foto e video verso il portale. In questo modo, gli utenti registrati al servizio (Capitolo 4.4), se lo desiderano, possono direttamente pubblicare i contenuti multimediali catturati col proprio device sul portale, per permetterne la condivisione con gli altri utenti registrati. È comunque presente un sistema di controllo di accesso, che dà libertà ad ogni utente di impostare la visibilità desiderata ad ogni file caricato sulla piattaforma (pubblica, friends only, privata, ecc…). Ad ogni file caricato sul portale, vengono associate delle informazioni: timestamp di upload, ora di acquisizione per le immagini JPEG, modello di device che ha scattato una foto, risoluzione, ecc… Ciò che differenzia TeamLife Portal da servizi analoghi già presenti sul mercato (ad esempio Flickr), è però l’utilizzo delle informazioni di contesto messe a disposizione dalla piattaforma CA. Al momento dell’upload di un contenuto, il client invia infatti al portale anche tutte le informazioni che descrivono il contesto dell’utente nell’istante in cui ha scattato la foto oppure ha catturato un filmato (Capitolo 3.2). I contenuti multimediali sono così arricchiti da molte informazioni di contesto, in modo completamente automatico: non è più necessario che l’utente intervenga, anche se è comunque sempre possibile aggiungere tag personalizzati. Le informazioni di contesto aggiunte automaticamente dall’applicazione sono, ad esempio, l’indirizzo civico in cui la foto è stata scattata, oppure i buddy nelle vicinanze. (Figura 6.6.1). 69 Generazione e pubblicazione dei blog post Figura 6.6.1 TeamLife Portal: dettagli di un immagine con tag di contesto I dati di contesto sono assegnati ad un contenuto multimediale nella forma di tag. Una foto, ad esempio, sarà etichettata automaticamente con l’indirizzo, il nome della città e la provincia in cui è stata scattata. Se la foto è stata presa in un Virtual Place definito dall’utente (Capitolo 5.2), verranno aggiunti come tag anche il place type e il place name (ad esempio, “office, TILab”). Le immagini sul portale sono inoltre etichettate con i nomi degli altri utenti della piattaforma che si trovavano nei paraggi. (Figura 6.6.1) . Il portale offre inoltre una procedura di ricerca basata sui tag: in questo modo è possibile, in modo rapido ed intuitivo, trovare altri file a cui sono associate le stesse etichette. È così possibile utilizzare le informazioni di contesto per trovare i contenuti che ci interessano. Ad esempio, è possibile trovare tutte le foto scattate in un Virtual Place da un certo utente, oppure si possono ottenere tutti i filmati girati presso un indirizzo in un preciso periodo di tempo, ecc… Inoltre, se un utente effettua il login nel portale TeamLife, potrà fruire di una delle funzioni più significative del CMS, cioè la possibilità di visualizzare tutti i contenuti catturati nello stesso contesto in cui l’utente si trova nell’istante stesso in cui sta visualizzando la pagina web. Per maggiori informazioni sul Portale Teamlife si rimanda a [23]. 70 Generazione e pubblicazione dei blog post Utilizzare i contenuti TeamLife per il blogging Teamlife Portal permette di fruire dei contenuti pubblicati, non solo attraverso interfaccia web, ma offre anche la possibilità di ottenere le stesse informazioni attraverso feed (RSS, ATOM, oppure in formato KML). Il portale permette di creare feed molto flessibili: è infatti possibile filtrare i contenuti in base al tempo (ad esempio, è possibile visualizzare solo le foto caricate negli ultimi giorni), oppure in base all’utente che li ha creati. In generale, si può filtrare il contenuto di un feed a partire da qualsiasi tag caricato sul portale (Figura 6.6.2): in questo modo si può offrire un alto livello di flessibilità alle applicazioni esterne che utilizzano i feed, come il blog contestualizzato. http://ca.tilab.com/tl/rss.php?album=usertags&username=lukostaz&tag=Torino Figura 6.6.2 Esempio di GET HTTP per creare un feed RSS (tutte le foto scattate a Torino dall’utente lukostaz) Il generatore di blog ha la necessità di ricavare le foto e i video creati dall’utente durante la giornata precedente. Le caratteristiche offerte dai feed RSS soddisfano questo problema. Per ogni utente, la procedura per integrare le immagini in un blog post segue questi passi (Figura 6.6.3): RSS Parsing Assegnazione ai cluster Creazione del contenuto HTML Blog Generator Figura 6.6.3 Il processo di integrazione con le informazioni multimediali - Ottenere il feed: il blog generator richiede l’RSS desiderato a TeamLife, attraverso una HTTP GET (Figura 6.6.4) . Il feed deve contenere tutte le informazioni sui contenuti multimediali catturati dall’utente nella giornata precedente. 71 Generazione e pubblicazione dei blog post http://ca.tilab.com/tl/rss.php?album=lastupby&username=wasvel&newer_than=1 Figura 6.6.4 Esempio di feed RSS utilizzato dal Blog Generator - - - RSS parsing: il generatore di blog parsifica il contenuto del feed per ricavare i dati desiderati. Il feed contiene l’elenco dei contenuti della giornata per l’utente. Per ogni immagine/video il Blog Generator ha bisogno delle seguenti informazioni: - URL della pagina TeamLife che presenta i dettagli della foto/video (Figura 6.6.1) - URL della thumbnail del file desiderato (la miniatura è creata direttamente dal CMS) - Titolo della foto/video - Data e ora in cui l’immagine/video è stata creata. Per creare questa informazione, TeamLife utilizza le informazioni EXIF per le immagini JPG. Se questi dati non sono disponibili, si usa un timestamp inviato dal client. Il generatore di blog crea in memoria una lista di oggetti multimediali che contengono le informazioni elencate in precedenza. Assegnazione ai cluster: ogni oggetto multimediale viene associato al cluster di contesto giusto. Il generatore di blog confronta la data e l’ora dell’immagine con i timestamp di inizio e fine del cluster. L’oggetto verrà associato al cluster se è stato catturato in questo lasso di tempo. Creazione del contenuto HTML: in quest’ultima fase si effettua la conversione in codice HTML degli oggetti multimediali. Il codice così creato è aggiunto al blog post durante la generazione del testo naturale. Ogni thumbnail è un link alla pagina del portale TeamLife con i dettagli dell’immagine/video. Le immagini sono inoltre precedute da una frase introduttiva (Figura 6.6.5). 72 Generazione e pubblicazione dei blog post <div><span> <a href="http://ca.tilab.com/tl/displayimage.php?pos=-9265"><img src=" http://ca.tilab.com/tl/albums/userpics/10027/thumb_20071013T222553.jpg" class="thumb" title="gibi" alt="gibi" /></a> <a href="http://ca.tilab.com/tl/displayimage.php?pos=-9267"><img src="http://ca.tilab.com/tl/albums/userpics/10027/thumb_20071013T230133.j pg" class="thumb" title="Gibi trio" alt="Gibi trio" /></a> <a href="http://ca.tilab.com/tl/displayimage.php?pos=-9262"><img src="http://ca.tilab.com/tl/albums/userpics/10027/thumb_20071013T221410.j pg" class="thumb" title="Gibitrio" alt="Gibitrio" /></a> </span></div> Figura 6.6.5 Un esempio di come gli elementi multimediali sono trasformati in codice HTML e successivamente visualizzati nel blog post. 73 Generazione e pubblicazione dei blog post 6.7 La piattaforma di Blogging: WordPress MU Dopo aver creato il blog post (composto da testo e contenuti multimediali), occorre pubblicare queste informazioni sul web. Il generatore di blog non si occupa di gestire la presentazione dei contenuti. È stata presa la decisione di affidarsi ad una piattaforma di blogging, un CMS creato ad hoc per gestire i blog di uno o più utenti. La scelta è ricaduta su una delle piattaforme più diffuse sul mercato: Wordpress. In particolare, si è scelta una variante che permette di gestire una community di blog, Wordpress Multi User (mu). La scelta di affidarsi a questo prodotto è stata determinata da alcuni fattori, elencati al punto successivo. WordPress: caratteristiche generali Wordpress [14] è una piattaforma di blogging scritta in linguaggio PHP e basata sull’uso di un database MySQL. Si tratta di un software opensource, distribuito con licenza GPL. Permette una gestione semplice ed efficiente dei propri blog post, che vengono organizzati con una struttura a permalink. In questo modo, Wordpress garantisce ai motori di ricerca la possibilità di indicizzare le proprie pagine. E’ bene elencare alcune caratteristiche importanti di Wordpress: - Installazione semplice - Ambiente di esecuzione: è solito utilizzare la piattaforma in ambiente Linux, utilizzando Apache come Web Server, MySQL come DB Manager e PHP come linguaggio di scripting (l’ambiente è informalmente noto come LAMP). - Licenza GPL - Disponibilità di plugin e personalizzazione: il software ha la possibilità di essere esteso. Esiste già un grande numero di plugin disponibili in rete. Sono stati sviluppati inoltre molti theme, ed è possibile crearne ovviamente di personalizzati. - Community: Wordpress gode di una community di sviluppatori molto estesa; il suo sviluppo è quindi costante e gli aggiornamenti sono frequenti. - Documentazione: la piattaforma è documentata nel dettaglio sul sito web ufficiale [14]. Gestire una community di utenti Come già anticipato, le funzionalità di Wordpress sono orientate alla gestione di un solo blog personale e non sono sufficienti per lavorare con una comunità di utenti, cosa di cui invece abbiamo bisogno. E’ stata quindi scelta una versione di WordPress, WordPress Multi User (mu), che, nonostante mantenga praticamente inalterato il modo di gestione dei contenuti, il layout e le interfacce, permette di creare e mantenere una community di blog in modo semplice ed efficace [15]. 74 Generazione e pubblicazione dei blog post Pubblicare i contenuti La piattaforma deve inoltre permettere la pubblicazione dei contenuti non solo attraverso l’interfaccia web, ma anche tramite l’esposizione di opportune API. WordPress offre un’interfaccia XML-RPC [16], che permette ad altre applicazioni di pubblicare contenuti sulla piattaforma (Figura). XML-RPC è un protocollo molto semplice basato sui concetti di remote procedure call, che codifica i dati in XML e utilizza come trasporto il protocollo HTTP [16] (Figura 6.7.1). Figura 6.7.1 Il protocollo XML-RPC [16] Wordpress, attraverso lo script xmlrpc.php agisce da server ed espone le interfacce per la pubblicazione dei blog post. Il generatore di blog implementa le funzionalità del client: è stata utilizzata la libreria XML-RPC Client messa a disposizione da Apache Software Foundation [17]. In Figura 6.7.2 si riporta il metodo utilizzato per pubblicare il blog post su Wordpress, che, come si vede dal codice, necessita anche dei parametri necessari per effettuare l’autenticazione dell’utente. private XmlRpcClient client; public Integer post(String contents) throws XmlRpcException { Object[] params = new Object[] { blogInfo.getBlogId(), blogInfo.getUserName(), blogInfo.getPassword(), contents, }; return (Integer) client.execute(POST_METHOD_NAME, params); } Figura 6.7.2 Metodo per pubblicare i contenuti attraverso chiamata XML-RPC Wordpress e i Microformats Un ultimo aspetto da considerare su WordPress, riguarda la pubblicazione di Microformats nelle entry dei blog post. I contenuti postati sulla piattaforma (sia 75 Generazione e pubblicazione dei blog post attraverso interfaccia web, che tramite XML-RPC) sono infatti sottoposti a più procedure di code sanitizing [14]. Nonostante esistano alcuni plugin creati per gestire tematiche legate ai Microformats [14], nessuno di questi tiene in considerazione i post pubblicati attraverso XML-RPC. Inoltre, non sono gestiti tutti i tipi di Microformat utilizzati dal generatore di blog. E’ stato dunque necessario editare gli script di Wordpress che si occupano di filtrare il codice postato, per permettere, ad esempio, di pubblicare gli attributi class degli elementi utilizzati per definire i Microformats (Capitolo 6.5). 6.8 Il blog post pubblicato Dopo aver percorso tutta la catena di operazioni legate alla creazione del blog post, si ottiene un risultato finale simile a quello in Figura 6.9.1. Per informazioni sul VideoBlog si rimanda al Capitolo 7. 6.9 Implementazione Il modulo di creazione dei blog post è implementato in codice Java. Fa uso delle classi create per acquisire informazioni di contesto dalla piattaforma CA e per effettuare il processo di clustering (Capitolo 5.8). Il codice del prototipo del generatore di blog è eseguito ogni giorno ad un’ora prestabilita. I post sono generati per tutti gli utenti registrati al servizio in modalità batch. In attesa di estensioni future (Capitolo 9.3), si è deciso di schedulare l’esecuzione del software alle ore 5:00 di ogni mattina. Il prototipo considera inoltre la stessa ora come l’inizio di una nuova giornata per ogni utente. Ad ogni esecuzione, il generatore di blog raccoglierà quindi le informazioni di contesto degli utenti fino alle ore 5:00 del giorno precedente: questi dati saranno utilizzati per costruire il blog post vero e proprio. La scelta delle ore 5:00 è sembrata la più ragionevole, in quanto precede di qualche ora il momento del risveglio della maggior parte degli utenti e garantisce allo stesso tempo l’assegnazione delle informazioni di contesto raccolte nelle prime ore della notte alla giornata precedente. Le esperienze vissute dopo la mezzanotte, nonostante appartengano ovviamente ad una nuova giornata, vengono percepite dalla maggior parte degli utenti come parte della giornata precedente (ad esempio, una persona che esce con gli amici e torna a casa alcune ore dopo la mezzanotte). 76 Generazione e pubblicazione dei blog post Figura 6.9.1 Esempio di pubblicazione di blog post 77 Generazione e pubblicazione dei blog post 78 La creazione del VideoBlog 7 La creazione del VideoBlog 7.1 Architettura generale Oltre alla realizzazione testuale (Capitolo 6), il generatore di blog offre la possibilità di presentare i risultati ottenuti dalla fase di clustering (Capitolo 5) anche nella forma di animazione video. L’idea di fondo è quella di creare un filmato simile ai titoli di testa di un telegiornale, dove le azioni che l’utente ha compiuto durante la giornata vengono presentate come delle notizie. Il video è ovviamente composto non solo dai dati di contesto dell’utente, ma anche dai contenuti multimediali acquisiti durante la giornata: anche in questo caso foto e video sono prelevate da TeamLife Portal [23]. Per creare l’animazione è stata utilizzata una libreria PHP open source, Ming [18], in grado di generare output in formato Adobe Flash (Capitolo 7.3). È stato dunque necessario pensare ad un modo per comunicare con il codice visto fin’ora (il generatore di blog testuale è infatti implementato come applicazione J2SE, capitoli 5.8 e 6.9). L’applicazione Java trasmette i dati necessari al videoblog utilizzando un API basata su HTTP POST. Il trasferimento avviene con un formato XML definito ad hoc, il VideoBlogML (Capitolo 7.2). Gli script PHP generano così il video diario quotidiano dell’utente e lo mettono a disposizione dei visitatori del blog (Capitoli 7.4 e 7.5). Context Cluster HTTP MING library VideoBlogML Cluster & Blog entry Generator Video Blog Generator Flash Video Blogs Figura 7.1.1 Generazione del VideoBlog: integrazione tra componenti 79 La creazione del VideoBlog 7.2 Il VideoBlogML Le informazioni necessarie per la costruzione del videoblog, vengono trasmesse dall’applicazione Java in codifica XML. È stato necessario definire uno schema su cui validare il codice XML creato dal generatore di blog ed inviato agli script che creano il video diario. I dati sono organizzati nei seguenti elementi (Figura 7.2.1): - userId date - ctxClusters: lista di Context Cluster ctxCluster: è l’elemento che contiene le informazioni su un cluster di contesto - startTime: inizio del cluster - stopTime: fine del cluster - people: elenco dei nomi delle persone incontrate nel cluster. Nel videoblog non si utilizzano, per il momento, altre informazioni sui buddies. Questo aspetto potrebbe essere preso in considerazione negli sviluppi futuri dell’applicazione. - location: è presente solo nei cluster statici. Se si tratta di un Virtual Place, conterrà sia il place type che il place name. - locationFrom e locationTo: presenti al posto di location nel caso di movimento - moving: flag che segnala se il cluster è di movimento oppure no - mediaElements: lista di mediaElement - mediaElement: contiene informazioni su un contenuto multimediale acquisito all’interno del cluster. - pictureURL: è l’URL presso cui recuperare il contenuto multimediale desiderato. Il link punta al CMS TeamLife Portal - title: è il titolo della foto/video. In Figura 7.2.2 si presenta un esempio di codice VideoBlogML. 80 La creazione del VideoBlog Figura 7.2.1 Lo schema del VideoBlogML 81 La creazione del VideoBlog <videoData xmlns="http://ca.tilab.com/blog/videoblog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:// ca.tilab.com/blog/videoblog http://ca.tilab.com/blog/videoblog/videoblog.xsd"> <userID>lukostaz</userID> <date>29-09-2007</date> <ctxClusters> <ctxCluster moving="false"> <startTime>13:43</startTime> <endTime>14:59</endTime> <people></people> <location>n/a;Borgata Azzari in San Germano Chisone, TO</location> <mediaElements> <mediaElement> <pictureURL> http://ca.tilab.com/tl/albums/userpics/10027/normal_20070929T165445.jpg </pictureURL> <title>Capitano70</title> </mediaElement> <mediaElement> <pictureURL> http://ca.tilab.com/tl/albums/userpics/10027/normal_20070929T180022.jpg </pictureURL> <title>Punizione contro</title> </mediaElement> </mediaElements> </ctxCluster> <ctxCluster moving="true"> <startTime>15:33</startTime> <endTime>23:44</endTime> <people></people> <locationFrom>n/a;Borgata Azzari in San Germano Chisone, TO</locationFrom> <locationTo>residence;home</locationTo> <mediaElements> <mediaElement> <pictureURL> http://ca.tilab.com/tl/albums/userpics/10027/normal_20070929T200831.jpg </pictureURL> <title>Il miglior bar di pinerolo</title> </mediaElement> <mediaElement> <pictureURL> http://ca.tilab.com/tl/albums/userpics/10027/20070929T184146.mp4 </pictureURL> <title>E finisce 3-1 x noi!!</title> </mediaElement> <mediaElement> <pictureURL> http://ca.tilab.com/tl/albums/userpics/10027/normal_20070929T220210.jpg </pictureURL> <title>Che felicita' la borsa nuova!</title> </mediaElement> </mediaElements> </ctxCluster> </ctxClusters> </videoData> Figura 7.2.2 Un esempio di VideoBlogML 7.3 La Libreria MING Ming è una libreria C, utilizzata per generare filmati Flash (SWF) [18]. Il progetto, completamente open source e cross-platform, offre un set di wrapper non solo per C++, ma anche per un buon numero di linguaggi di scripting, come PHP, Perl, Python e Ruby. (a partire dalla versione 0.4 esistono in realtà anche dei wrapper Java, ma tramite 82 La creazione del VideoBlog il loro utilizzo non è possibile effettuare alcune delle operazioni più sofisticate richieste dal videoblog, Capitolo 7.4). Il progetto Ming supporta quasi tutte le caratteristiche di Flash 4 [19]: forme, sfumature, immagini importate (jpg e png), morphing di forme, testo, pulsanti, video importati, aggiunta di audio in formato mp3. La libreria include inoltre un modulo in grado di compilare un subset del linguaggio ActionScript. Per realizzare il generatore di videoblog, è stata utilizzata la versione 0.4. A causa delle limitazioni relative ai wrapper Java, è stato necessario lavorare con le estensioni Ming compilate come libreria-modulo per l’interprete PHP in ambiente Linux-Apache (Capitolo 7.1). Un’animazione Flash creata con la libreria Ming è tipicamente composta dai seguenti oggetti: - SWFMovie: è la classe che modella l’intero filmato Flash. È il contenitore di tutti gli altri elementi dell’animazione. A questo oggetto è associata la timeline principale del video. - SWFShape: è una classe che modella una forma geometrica. - SWFText e SWFFont: rappresentano, rispettivamente, una stringa di testo ed il font utilizzato per il rendering. - SWFBitmap: è una classe utilizzata per importare e visualizzare immagini in formato Jpeg. - SWFPreBuiltClip permette di aggiungere ad un’animazione Flash un altro filmato già compilato in formato swf. - SWFButton e SWFAction: il primo è un pulsante cliccabile, mentre il secondo è l’azione (in linguaggio ActionScript) da eseguire. A titolo di esempio si riporta in figura il codice per creare una semplice animazione contenente un quadrato [18]. 83 La creazione del VideoBlog // a red square... // this sets the scale to a similar format as that used in flash Ming_setScale(20); // publish this movie for the flash 6 player ming_useswfversion(6); // create a movie, here we call it $movie $movie=new SWFMovie(); // 550 by 400 is the default in flash $movie->setDimension(550,400); // background set to grey $movie->setBackground(0xcc,0xcc,0xcc); // frame rate of 12 is the default in flash $movie->setRate(12); // create a shape, here we call it $squareshape $squareshape=new SWFShape(); // give it a red fill $squareshape->setRightFill(255,0,0); // draw that shape in a clockwise direction $squareshape->drawLine(100,0); # draw the top line $squareshape->drawLine(0,100); # draw the right line $squareshape->drawLine(-100,0); # draw the bottom line $squareshape->drawLine(0,-100); # draw the left line // add $squareshape to the movie and create a reference // to it called $squaresymbol so we can move it later $squaresymbol=$movie->add($squareshape); // now we can move $squareshape $squaresymbol->moveTo(100,100); // save $movie to disk, here we call it square.swf $movie->save("square.swf"); Figura 7.3.1 Creare un quadrato con Ming [18] 7.4 Creare il Videoblog La creazione vera e propria del videoblog attraversa alcune fasi. In questo capitolo vedremo una descrizione generale dei passi che gli script devono compiere per ottenere il risultato finale. Dai Cluster di contesto al VideoBlogML Il generatore di blog ha il compito di trasformare i context cluster di un utente in codice XML, secondo lo schema descritto nel Capitolo 7.2. Queste informazioni saranno successivamente inviate, tramite una POST HTTP, agli script PHP che generano il filmato. Parsing del VideoBlogML La prima operazione che lo script PHP deve compiere è il parsing del VideoBlogML ricevuto dal generatore di blog Java. Per effettuare questa operazione, sono state utilizzate le estensioni SimpleXML di PHP [20]. Dopo aver effettuato il parsing, lo script crea in memoria un array di oggetti ContextCluster. Questa classe contiene le 84 La creazione del VideoBlog informazioni necessarie per trasformare un cluster in un’animazione contestualizzata: Le istanze contengono infatti: - Timestamp di inizio e fine del cluster - Flag che indica se si tratta di un cluster di movimento - Location (oppure, se è un cluster di movimento, si usano i campi locationFrom e locationTo) - Nomi delle persone incontrate durante il cluster - Lista degli URL dei contenuti multimediali compresi in un cluster. Setup del video e Creazione del Player Dopo aver impostato frame rate e dimensioni dell’animazione, lo script si occupa della creazione del corpo principale del VideoBlog che include anche la barra dei controlli per il video (Figura 7.4.2). I pulsanti sono creati a partire da un’immagine png, grazie al tool png2dbl offerto da Ming [18]. Grazie al codice ActionScript associato ad ogni pulsante (Figura 7.4.1), l’utente può controllare il flusso della riproduzione: non è quindi necessario utilizzare player esterni, in quanto il filmato swf offre tutti i controlli necessari per la riproduzione dei suoi contenuti. $actionPause = "_root.stop(); for(obj in _root){ if(typeof(_root[obj])=="movieclip"){ _root[obj].stop(); } }"; $actionPlay = "_root.play(); for(obj in _root){ if(typeof(_root[obj])=="movieclip"){ _root[obj].play(); } }"; $buttonStop->addAction(new SWFAction($actionPause), SWFBUTTON_MOUSEDOWN); $buttonStart->addAction(new SWFAction($actionPlay), SWFBUTTON_MOUSEDOWN); Figura 7.4.1 Il codice associato ai pulsanti della barra di controllo Trasformare un Cluster di contesto in video : panoramica generale La realizzazione in video di un cluster di contesto è composta fondamentalmente da due parti distinte (Figura 7.4.2): 85 La creazione del VideoBlog Area principale Barra delle informazioni Figura 7.4.2 Visualizzazione di un cluster all'interno del videoblog. L’icona nell’area principale è associata al Virtual Place di tipo “office” - - Barra delle informazioni: l’area è utilizzata per visualizzare le informazioni testuali relative al cluster visualizzato. Fanno parte di quest’area del video il luogo in cui l’utente si è trovato (nel caso di un cluster di movimento vengono visualizzati il posto di partenza e quello di arrivo), gli altri utenti della piattaforma incontrati, e l’ora di inizio e di fine dell’azione. Area principale: oltre allo slideshow di foto e filmati, l’area principale dell’animazione viene utilizzata per visualizzare un’icona che sintetizza il tipo di azione compiuta dall’utente durante il cluster. Il processo è analogo con quanto accade per la scelta dei verbi del blog testuale (Capitolo 6.2): la selezione dell’immagine avviene in base alla categoria del Virtual Place. Se la posizione del cluster non è stata etichettata come tale, verrà visualizzata un’icona di default. SlideShow di immagini Se un cluster di contesto contiene delle immagini, sarà compito del generatore di videoblog visualizzare questi contenuti sottoforma di slideshow. Lo script, a valle dell’operazione di parsing del VideoBlogML è a conoscenza dell’URL dell’immagine da visualizzare (il collegamento punta ad un permalink offerto dal portale TeamLife Media Sharing). Ogni immagine visualizzata (con relativo effetto di transizione) è accompagnata dal proprio titolo (Figura 7.4.3). Tutti i contenuti acquisiti dall’utente sono così presentati, anche in questo caso, all’interno del contesto in cui l’utente si trovava. 86 La creazione del VideoBlog Figura 7.4.3 Un'immagine all'interno dello slideshow Il Video SlideShow Analogamente a quanto accade per le immagini, i cluster del video blog possono anche contenere uno slideshow dei filmati girati durante la giornata. Il processo per la generazione di una sequenza di video e l’integrazione all’interno del flusso Flash è però più complesso rispetto al caso delle fotografie, e si articola nei seguenti passaggi (Figura 7.4.4): HTTP GET Audio files (mp3) Temp files (3gp, mp4) Multiplexing Video files (swf) Video files (flv) Concatenazione in video slideshow Figura 7.4.4 Il processo di integrazione nel videoblog dei filmati girati dall’utente - Salvataggio dei video: lo script scarica i video dal portale Teamlife e li salva in locale. 87 La creazione del VideoBlog - - - 7.5 Integrazione nel videoblog: i filmati scaricati sono in formato di compressione 3gp oppure mp4. La libreria Ming non permette l’integrazione diretta di file in questi formati all’interno di un flusso video composto da oggetti “sintetici” generati dalla libreria stessa (grafica, testo, ecc…). L’unica strada da percorrere è dunque trasformare ogni video in un filmato swf singolo (animazione flash compilata), da aggiungere successivamente al videoblog. Questi flussi video sono temporanei e saranno cancellati al termine della generazione del blog. Conversione di formati audio/video: Ming permette di creare un’animazione Flash (senza oggetti sintetici) a partire da un filmato. Il flusso di partenza deve essere però Flash Video (flv), un formato proprietario Adobe/Macromedia utilizzato per lo streaming in rete e basato sullo standard H.263 (nelle versioni più recenti si utilizza H.264). Occorre quindi convertire i video acquisiti da TeamLife in formato flv. Lo script utilizza il tool FFmpeg [21]: il software permette la conversione nel formato desiderato. Le limitazioni della libreria Ming impongono però una doppia conversione. A partire dal video di partenza (3gp/mp4), occorre infatti creare sia un flusso video (in formato flv) che un flusso audio mp3. A questo punto, lo script effettuerà un multiplexing di questi file per creare il filmato in Flash video compilato (swf) Concatenazione dei filmati temporanei: a questo punto, i filmati swf creati al punto precedente possono essere aggiunti al videoblog grazie all’oggetto Ming SWFPreBuiltClip (Capitolo 7.3). Si ottiene quindi un vero e proprio slideshow di filmati girati dall’utente. Questi contenuti, come nel caso delle immagini, sono arricchiti dai loro titoli e dalle informazioni di contesto del cluster in cui sono stati girati. Pubblicare il VideoBlog Una volta salvato su disco, il videoblog deve essere reso disponibile ai visitatori del blog. Come anticipato al punto 7.1, la libreria Ming permette di effettuare streaming per filmati convertiti in formato flv. Ming non offre però la possibilità di salvare le animazioni che genera nello stesso formato (con la libreria è possibile esclusivamente creare video in swf compilato). Questa limitazione impedisce di effettuare lo streaming dei videoblog. Occorre quindi offrire i contenuti video in forma di podcast. Il filmato, prima di essere visto, deve essere quindi scaricato interamente dal browser del visitatore della pagina web. È possibile inserire i video direttamente nei blog post, tramite l’utilizzo del tag HTML <object>. Una soluzione simile sarebbe però poco scalabile. Tipicamente 88 La creazione del VideoBlog Wordpress visualizza nella stessa pagina web molti blog post: se ognuno includesse il proprio videoblog, il caricamento della pagina sarebbe troppo lento (i filmati possono avere dimensioni non trascurabili). Si è quindi deciso di inserire all’inizio di ogni post un semplice link verso il videoblog corrispondente. In questo modo si dà la possibilità all’utente di fruire dell’animazione Flash senza appesantire il caricamento della pagina in cui sono pubblicati i post. Per visualizzare il video diario si utilizza un plugin di Wordpress, Greybox [22]. Il plugin permette di visualizzare il videoblog in un popup modale, implementato sotto forma di <div> e lanciato al click sul link presente in ogni blog post (Figura 7.5.1). Figura 7.5.1 Visualizzare il video all'interno di un blog post 89 La creazione del VideoBlog 90 Scenari abilitati 8 Scenari abilitati Il generatore automatico di blog contestualizzato può essere adattato ad uno o più scenari applicativi. L’utilizzo tipico per cui il sistema è stato pensato ricade nel filone del personal blogging. La creazione di un blog personale automatico, che contiene le azioni compiute durante la giornata, arricchite da informazioni di contesto, permette ad ogni utente di poter condividere le proprie esperienze con amici, parenti o colleghi. Un tipico scenario applicativo di questo filone può essere il racconto di una vacanza. L’utente, in modo del tutto trasparente, ottiene un blog personale con il racconto delle proprie esperienze giorno per giorno. Video ed immagini sono presentati nel testo accompagnati dalle relative informazioni di contesto. Anche il videoblog si rivela essere un’efficace forma di presentazione dei contenuti personali: la propria vacanza viene raccontata con un approccio simile ad un tg televisivo, in cui tutti gli elementi multimediali sono arricchiti dalle informazioni sul contesto utente in cui sono stati acquisiti. Il video diario potrebbe anche venire utilizzato come podcast, oppure come tg su una piattaforma di web tv. La condivisione di un blog contestualizzato può essere uno scenario interessante anche all’interno di una comunità di amici, interessati allo scambio di informazioni personali: per un utente della piattaforma CA è possibile, ad esempio, visualizzare il blog di amici o parenti lontani, per conoscere i luoghi in cui vivono e il loro stile di vita quotidiano. Un altro campo di utilizzo importante è il supporto alla memoria umana. Possedere un blog contestualizzato giornaliero significa ovviamente mantenere un log preciso delle azioni compiute, arricchite dai contenuti multimediali acquisiti. A distanza di anni (ma anche semplicemente dopo qualche mese) il blog può tornare molto utile per ricordare eventi e situazioni del passato, descritte con il livello di dettaglio offerto dagli algoritmi di clustering. Sottoscriversi al servizio di blog contestualizzato può quindi prevedere anche la semplice fruizione personale dei contenuti, mantenendo quindi privati i dati generati dal sistema. In questo filone si possono citare inoltre utilizzi legati a campi professionali di nicchia, come la creazione di log per lavoratori che hanno bisogno di funzionalità automatiche per tenere traccia del proprio lavoro. Ad esempio, il generatore di blog potrebbe essere utile per descrivere la giornata lavorativa di un agente rappresentante, di un reporter o di un capo cantiere o architetto. Un servizio di blog contestualizzato esteso a molti utenti può inoltre permettere di scoprire punti di interesse comuni con altri utilizzatori del servizio. Un pendolare può 91 Scenari abilitati ad esempio scoprire (sempre ovviamente che entrambe le parti lo desiderino) che un’altra persona segue lo stesso tragitto per andare al lavoro. Diventa così possibile creare una community di utenti che condividono le proprie informazioni di contesto. Un utilizzo interessante del servizio di blog è legato al profiling a posteriori degli utenti. I diari giornalieri di un utente possono infatti essere utilizzati per il determinare il profilo dell’utente. I blog post ripercorrono infatti le azioni compiute dagli utilizzatori, fornendo anche informazioni temporali. Questo aspetto, unito alla conoscenza della posizione, dell’azione svolta e degli altri utenti nei paraggi, può permettere di estrapolare pattern ricorrenti per uno o più utenti. Grazie all’utilizzo di tecniche come gli alberi di decisione, è infatti possibile categorizzare gli utilizzatori della piattaforma in base alle loro occupazioni quotidiane. E’ inoltre ovviamente possibile incrociare i dati di più utenti per individuare eventuali similarità. Oltre agli scenari di utilizzo elencati in precedenza, il generatore di blog permette un riuso dei propri componenti, grazie all’architettura modulare con cui è stato progettato e sviluppato. Gli algoritmi di clustering (Capitolo 5) possono infatti essere utilizzati in altri scenari: il raggruppamento cronologico basato su cella GSM permette, previa un’ulteriore analisi dei risultati, di scoprire, su un arco temporale lungo, quali sono i luoghi più frequentati da un utente e quanto tempo ha speso in ogni posizione. Si potrebbe quindi potenziare il meccanismo di scoperta semi-automatica dei luoghi “personali” di un utente (funzionalità che è in parte già offerta dalla piattaforma CA) (Capitolo 3). Un altro componente riutilizzabile in un’ottica diversa è il generatore di videoblog (Capitolo 7). Il codice che genera l’animazione flash può infatti essere usato direttamente da TeamLife Portal [23] per creare slideshow personalizzati dei propri contenuti multimediali. Le animazioni possono venire offerte come podcast, oppure direttamente inserite nella pagina HTML (Capitolo 7). 92 Conclusioni e sviluppi futuri 9 Conclusioni e sviluppi futuri 9.1 Risultati ottenuti Il presente lavoro di tesi descrive le caratteristiche progettuali di un prototipo di generatore di blog contestualizzato e ne elenca le soluzioni implementative più significative. L’applicazione ha permesso non solo di evidenziare le potenzialità messe a disposizione dalla piattaforma Context Awareness di Telecom Italia Lab, ma è anche stata in grado di conferire un valore aggiuntivo ai dati di contesto offerti dalla piattaforma stessa. Il generatore di blog ha inoltre permesso di formulare alcune considerazioni sull’approccio degli utenti ai servizi context aware in generale. Gli algoritmi di clustering progettati ed implementati hanno permesso di raggruppare le informazioni di posizione degli utenti a partire dall’elenco degli identificativi delle celle GSM/UMTS: nel fare questo è stato necessario gestire le problematiche legate alla distribuzione dei dati che tale tecnologia offre (Capitolo 5). Le caratteristiche delle informazioni di contesto degli utenti hanno portato così alla decisione di sviluppare due algoritmi di raggruppamento separati, utilizzati per analizzare differenti pattern di dati generati dagli stili di vita degli utenti (Capitolo 5). Le osservazioni effettuate e i feedback degli utenti coinvolti nella sperimentazione del servizio hanno inoltre permesso di tarare gli algoritmi con parametri ottimali (Capitolo 5). Il processo di clustering e la successiva creazione di testo naturale hanno favorito la formulazione di alcune considerazioni sulla memoria che gli utenti hanno delle loro giornate (Capitolo 6). Queste informazioni sono state utilizzate per adattare la struttura del testo e il relativo livello di dettaglio alle esigenze emerse dalla fase di test del progetto. La creazione di un’architettura per la generazione del video blog (Capitolo 7) ha infine permesso di presentare i risultati dell’elaborazione dei dati di contesto in un modo alternativo, il tutto utilizzando tecnologie open source, sia per la conversione dei contenuti multimediali, che per la costruzione dell’animazione stessa. 93 Conclusioni e sviluppi futuri 9.2 Problemi aperti Il problema della riservatezza è sembrato essere uno dei punti chiave su cui lavorare in futuro, anche in seguito a sperimentazioni interne e demo in eventi pubblici in cui il software è stato dimostrato (ad esempio durante la notte bianca della ricerca 2007). Occorre tenere in considerazione la percezione che gli utenti hanno della propria privacy. In alcuni casi, infatti, l’applicazione è sembrata troppo invasiva: molte persone non gradiscono che le proprie azioni vengano tracciate. Inoltre, è sembrato necessario pensare ad un meccanismo di gestione del livello di privatezza di ogni blog post, un aspetto non ancora implementato nel prototipo sviluppato. Grazie a questa funzionalità, ogni utente sarà in grado di impostare la visibilità che più gradisce per i propri articoli (privati, solo per amici, pubblici) e anche il livello di dettaglio delle informazioni da pubblicare. 9.3 Sviluppi futuri L’integrazione con altri provider della piattaforma, come il Calendar Provider (Capitolo 3) [4] è una delle possibili estensioni del generatore di blog. Il componente, utilizzato a sua volta anche dal Situation Provider, permette infatti l’aggiunta nei blog post delle informazioni sugli impegni che ogni utente aggiunge nella propria agenda. Queste informazioni, generate direttamente dagli utilizzatori, sono molto importanti per aumentare la fedeltà dei blog post contestualizzati. E’ da tenere in considerazione anche una possibile integrazione diretta con il Situation Provider [1]. Il modulo interagisce con il motore a regole della piattaforma CA per scoprire la situazione in cui si trova l’utente (Capitolo 3). Un aggancio alle API fornite da questo componente permetterebbe non solo una migliore integrazione con i servizi già offerti dalla piattaforma, ma contribuirebbe a migliorare la qualità del testo dei blog post: il generatore avrebbe infatti a disposizione uno strato di reasoning aggiuntivo offerto dal provider, grazie al quale sarebbe possibile creare del testo più vario ed accurato. La modalità di schedulazione del generatore di blog, lanciato come applicazione batch alle ore 5:00 di ogni mattina, è da considerarsi provvisoria: il software deve essere integrato con gli altri servizi della piattaforma, in particolare con AUP (Capitolo 3). In questo modo si potrà permettere ad ogni utente di comunicare al generatore di blog l’ora di inizio del diario quotidiano. Questa caratteristica è fondamentale per utenti che si trovano in fusi orari diversi da quello del paese in cui risiede la macchina che ospita il generatore di blog. Per arricchire ulteriormente i blog post, realizzando in questo modo una sorta di “mashup” tra servizi diversi, sarebbe interessante integrare informazioni provenienti da webservice di terze parti. Si potrebbero infatti aggiungere dati meteorologici dei luoghi 94 Conclusioni e sviluppi futuri visitati dall’utente, informazioni sugli eventi nelle vicinanze, link a pagine Wikipedia che descrivono il territorio che l’utente ha visitato, ecc… [31] Si è presa anche in considerazione l’idea di collegare tra loro i blog post quotidiani di un utente. In questa prima versione, il generatore, nel creare il testo, non considera i blog post già creati. Sarebbe interessante invece tenere conto di queste informazioni, per creare del testo di raccordo più fluido tra le entry, dando quindi un senso di maggiore naturalezza ai visitatori del blog. Un’altra estensione ipotizzata è la possibilità di generare automaticamente blog post con un livello di dettaglio variabile in base al tipo di giornata che l’utente ha trascorso e alle azioni che ha compiuto. Gli algoritmi di clustering utilizzati operano su identificativi di cella GSM. Per poter utilizzare informazioni di posizione basate su tecnologia GPS, occorre ricorrere ad algoritmi che raggruppano i dati in base alla distanza euclidea. Una delle linee di sviluppo future prevede infatti di adattare algoritmi già noti in letteratura alle necessità del generatore di blog. Sarebbe interessante inoltre integrare il videoblog con un avatar in grado di raccontare le azioni giornaliere dell’utente, grazie all’utilizzo di tecniche Text to Speech. Come già anticipato nel Capitolo 6, un’altra estensione necessaria è il supporto multilingue. Al momento i blog post sono generati in inglese: si stanno valutando alcune soluzioni, tra le quali l’utilizzo di sistemi NLG in altre lingue, la creazione di testo naturale senza l’utilizzo di un sistema NLG oppure la traduzione a valle dei blog post tramite tool dedicati. 95 Conclusioni e sviluppi futuri 96 Bibliografia 10 Bibliografia [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] L. Cerami: “Applicazione di tecniche di reasoning per integrazione dati di profilo e di contesto in servizi context-aware”, Tesi di Laurea Specialistica in Ingegneria delle Telecomunicazioni, Politecnico di Torino, novembre 2006. M. Marengo, N. Salis, M. Valla: “Context Awareness: servizi mobili su misura”, Notiziario Tecnico Telecom Italia, marzo 2007. Online su: http://www.telecomitalia.it/TIPortale/docs/innovazione/012007/Pag11_22 %20contextawareness.pdf L.W. Goix, M. Valla, L. Cerami, P. Falcarin: “Situation inference for mobile users: a rule based approach”, 2007. L. Lamorte, C.A Licciardi, M. Marengo, A. Salmeri, P. Mohr, G. Raffa, L. Soffia, M. Pettinari, T. Salmon Cinotti: “A platform for enabling context aware telecommunication services”, in CAPS 2007, Third Workshop on Context Awareness for Proactive Systems. Guildford, UK, 2007. A.K. Dey: "Understanding and Using Context", Personal and Ubiquitous Computing, Vol. 5, 4-7, 2001. A. Schmidt, M. Beigl, H-W. Gellersen, “There is more context than location”, Telecooperation Office (TecO), University of Karlsruhe,Vincenz-Priessnitz-Str. 1, 76131 Karlsruhe, Germany, 2005. On-line su http://www.comp.lancs.ac.uk/~albrecht/pubs/pdf/schmidt_cug_elsevier_12 -1999-context-is-more-than-location.pdf RFC 4480. Online su http://www.rfc-archive.org/getrfc.php?rfc=4480. C. Venour, E. Reiter, “A tutorial for SimpleNLG (version 3.3)”. Maggio 2007, online su http://www.csd.abdn.ac.uk/~ereiter/simplenlg/simplenlgv34.zip ACL Special Interest Group on Generation, online su http://www.siggen.org/resources/ SimpleNLG, online su http://www.csd.abdn.ac.uk/~ereiter/simplenlg/ J. Allsopp, “Microformats: empowering your markup fow Web 2.0”, Marzo 2007 Microformats official blog, online su http://microformats.org 97 Bibliografia [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] Firefox Add-ons, online su https://addons.mozilla.org/ Wordpress, online su http://wordpress.org/ Wordpress mu, online su http://mu.wordpress.org/ XML-RPC home page, online su http://www.xmlrpc.com/ The Apache XML-RPC Client, online su http://ws.apache.org/xmlrpc/client.html MING, a SWF output library and PHP module, online su http://ming.sourceforge.net/ Ming functions for flash – Manual, online su http://us2.php.net/ming SimpleXML functions – Manual, online su http://us2.php.net/manual/en/ref.simplexml.php FFmpeg, online su http://ffmpeg.mplayerhq.hu/ Orangoo Labs, GreyBox, online su http://orangoo.com/labs/GreyBox/ O. Rodriguez Rocha: “Teamlife, a Web 2.0 portal to represent contextualized multimedia content.”, Master in Wireless Systems and Related Technologies thesis, Politecnico di Torino, 2006. J. Koolwaaij, A. Tarlano, M. Luther, P. Nurmi, B. Mrohs, A. Battestini, R.Vaidya: “Context Watcher - Sharing context information in everyday life”. In Proceedings of WTAS 2006, Calgary, Canada, 2006 W. M. Newman, M. A. Eldridge, M. G. Lamming: “PEPYS: generating autobiographies by automatic tracking”. In Proceedings of the second conference on European Conference on computer-supported cooperative work, Amsterdam, The Netherlands, 1991. A. Kröner, S. Baldes, A Jameson, M. Bauer “Using an Extended Episodic Memory Within a Mobile Companion”. In Proceedings of Pervasive WS on Memory and Sharing of Experience (MSE2004), 2004 K. Numaa, H. Takedab, H. Uematsuc, T. Nishimurad, Y. Matsuod, M. Hamasakid, N. Fujimurad, K. Ishidad, T. Hoped, Y. Nakamurad, S. Fujiyoshif, K. Sakamotof, H. Nagatag, O. Nakagawag, E. Shinborig: “A Weblog Grounded to the Real World”. In Proceedings of AAAI-2006 Spring Symposium on Computational Approaches to Analyzing Weblogs, Stanford, USA, marzo 2006. H. E. Byun, K. Cheverst, “Exploiting User Models and ContextAwareness to Support Personal Daily Activities”. Workshop in UM2001 on User Modelling for Context-Aware Applications, Sonthofen, Germany, 2001. E. Reiter, C. Mellish, J. Levine: “Automatic Generation of Technical Documentation” in Applied Artificial Intelligence vol 9, 1995. J. Gemmell, G. Bell, R. Lueder, S. Drucker, C. Wong: "MyLifeBits: Fulfilling the Memex Vision". In Proceedings of the tenth ACM international conference on Multimedia, Juan-les-Pins, France, 2002. 98 Bibliografia [31] [32] [33] GeoNames webservice and data download, on line su http://www.geonames.org/export/ S. Guha, R. Rastogi, K. Shim: “ROCK: A Robust Clustering Algorithm for Categorical Attributes”. In 15th International Conference on Data Engineering, 1999. J. B. MacQueen: "Some Methods for classification and Analysis of Multivariate Observations", In Proceedings of 5-th Berkeley Symposium on Mathematical Statistics and Probability, Berkeley, University of California Press, 1:281-297, 1967. 99 Bibliografia 100 Ringraziamenti 11 Ringraziamenti Un ringraziamento speciale va a tutto il gruppo Context Awareness and Ambient Intelligence del Telecom Italia Lab in cui il presente lavoro di tesi è stato svolto. Un grazie particolare a Carlo Alberto Licciardi e a Laurent Walter Goix, che hanno supervisionato il mio lavoro guidandomi in questi mesi trascorsi all’interno del gruppo. Vorrei ringraziare tutti i “beta tester” del blog contestualizzato: Carlo Alberto Licciardi, Laurent Walter Goix, Massimo Valla, Marco Marengo, Sergio Rolando, Danilo Dolfini e Nicoletta Salis. Durante questi mesi hanno dato preziosi consigli su come migliorare l’applicazione (e risolvere i bug!). Un grazie affettuoso va ovviamente a tutti i miei compagni di ufficio: Oscar Rodriguez Rocha, Carmen Criminisi, Claudio Venezia, Hegazy Nizar e Danilo Dolfini. Grazie anche ad Alessia Salmeri, Cristina Frà, Luca Lamorte, Marco Marchetti e Anna Papurello per i consigli e il supporto che mi avete dato. Un ringraziamento (e un in bocca al lupo!) anche a Maurizio, Federica, Paolo e Carmen Catalano. Sumita si merita un ringraziamento speciale… Grazie per avermi sempre appoggiato e motivato in questi anni passati insieme. D’ora in poi non avrò più la scusa degli esami! Grazie ovviamente ai miei genitori. E’ merito del vostro affetto se sono arrivato fin qui: grazie di cuore. Grazie anche a Marco che mi sopporta da sempre! Posso solo dirti che ora è il tuo turno, fratellino! Volevo anche ringraziare lo zio d’America Prusso, Diego, Tony, Paolino, Bergie, Tane, Bully, Panna e tutti gli altri ragazzi del corso: grazie per l’amicizia e il sostegno che mi avete dato in questi anni. Infine, un ringraziamento speciale va al Torre70, senza il quale non avrei mai potuto provare l’ebrezza della ricostruzione di un legamento crociato anteriore, ma neanche la felicità della vittoria del prestigioso campionato amatoriale… grazie di cuore anche a voi. 101