Indice generale Introduzione................................................................................................................................ 3 Capitolo 1: La piattaforma Web 2.0............................................................................................9 1.1 Introduzione......................................................................................................................9 1.2 Il Web 2.0....................................................................................................................... 10 1.3 Tecnologia...................................................................................................................... 13 1.4 Compatibilità dei browser.............................................................................................. 16 1.5 Accessibilità................................................................................................................... 17 1.6 Stato dell'arte.................................................................................................................. 18 Capitolo 2: Progetto my.unife................................................................................................... 25 2.1 Introduzione....................................................................................................................25 2.2 Motivazioni.................................................................................................................... 25 2.3 Scopo del progetto..........................................................................................................26 2.4 Specifiche di progetto.....................................................................................................28 2.4 Architettura del sistema..................................................................................................30 2.6 Fasi di progetto...............................................................................................................32 Capitolo 3: Tecnologie..............................................................................................................35 3.1 Introduzione....................................................................................................................35 3.2 XML............................................................................................................................... 35 3.3 DTD o XSD....................................................................................................................37 3.4 Database......................................................................................................................... 39 3.5 Autenticazione................................................................................................................39 3.4 PHP.................................................................................................................................42 3.5 AJAX..............................................................................................................................42 Capitolo 4: Struttura dati...........................................................................................................45 4.1 Introduzione....................................................................................................................45 4.2 Tipi di dato generico.......................................................................................................46 4.3 Tipi di dato complessi.................................................................................................... 47 4.4 Costruzione della pagina................................................................................................ 56 4.5 Elementi..........................................................................................................................59 Capitolo 5: Database................................................................................................................. 61 5.1 introduzione....................................................................................................................61 5.2 Realizzazione..................................................................................................................61 Capitolo 6: Implementazione funzionalità lato server.............................................................. 66 6.1 Introduzione....................................................................................................................66 6.2 Login.............................................................................................................................. 67 6.3 Add_mod........................................................................................................................ 70 6.4 Configurazione moduli...................................................................................................71 6.5 Set_page......................................................................................................................... 72 6.6 Move_mod......................................................................................................................72 6.7 Remove_mod..................................................................................................................75 6.8 Agg_feed........................................................................................................................ 79 6.9 Agg_mail........................................................................................................................ 80 6.10 Logout.......................................................................................................................... 82 6.11 Indipendenza dalla piattaforma.................................................................................... 83 6.12 Sicurezza dei dati..........................................................................................................84 6.13 Servizi Unife.................................................................................................................85 1 Capitolo 7: Conclusioni............................................................................................................ 86 Capitolo 8: Applicazioni future.................................................................................................87 Bibliografia............................................................................................................................... 88 Note Bibliografiche.............................................................................................................. 88 Sitografia.............................................................................................................................. 88 Testi di riferimento...............................................................................................................89 Ringraziamenti.......................................................................................................................... 90 2 Introduzione Quando nel 1989 Tim Berners-Lee e Robert Cailliau ipotizzarono un sistema per la condivisione della documentazione elettronica in un formato indipendente dalla piattaforma in cui i documenti fossero collegati tra loro in modo da consentire una lettura non sequenziale, quello che conosciamo comunemente come ipertesto, diedero vita a una grande rivoluzione socio-economica che andrà a impattare sempre più sulla vita quotidiana. Questi ricercatori del CERN di Ginevra rielaborarono una vecchia proposta di Vannevar Bush contenuta nel libro “”As we May think” [VNB 01] datato 1945. Il sistema era basato sul linguaggio di marcatura HyperText Markup Language (HTML), figlio del ben più complicato Standard Generalized Markup Language (SGML) di IBM, per la rappresentazione delle informazioni ipertestuali dei documenti, e sul protocollo HyperText Transport Protocol (HTTP) , che a sua volta si basa sul protocollo di trasmissione dati TCP/IP, per il trasporto delle informazioni. Inizialmente questo sistema supportava solamente pagine statiche collegate tra loro da link ipertestuali anche a causa delle limitate capacità dei software dedicati (browser) alla lettura di questi testi e inoltre anche le infrastrutture di rete non permettevano di caricare oggetti eccessivamente “pesanti” in tempi ragionevolmente brevi. La semplicità con cui si potevano creare documenti e condividerli, unita alla diffusione dei personal computer e di Windows come sistema operativo dotato di interfaccia grafica e user friendly, decretarono ben presto il successo di questo sistema facendo cosi nascere quello che oggi conosciamo come Web. Ricordiamo che il Web non è altri che il servizio più usato di Internet, ovvero Internet è il supporto di rete su cui viaggiano vari servizi tra cui il Web con le 3 sue pagine, ma anche la posta elettronica solo per citare i due più diffusi. Nei primi anni novanta il Web iniziò a popolarsi non solo di documenti accademici e di ricerca, ma anche di siti “commerciali”. Questo impose un concetto estraneo all'ipertesto ma legato al business: il layout grafico e quindi la necessità di iniziare a rendere più gradevoli e accattivanti i siti Web. Da qui nacque la cosiddetta guerra dei browser: questa guerra infarcì il neonato Web di marcature proprietarie ben lontane dal concetto di indipendenza dal supporto che è insito nel World Wide Web (WWW). Si arrivò a un'anarchia nell'HTML e a un allontanamento dal concetto di standard che era alla base dell'idea dei due ricercatori del CERN di Ginevra. Per tentare di porre un freno all'escalation di queste marcature proprietarie nel 1994 Berners-Lee fondò il World Wide Web Consortium (W3C) per consociare i produttori di software e non solo, allo scopo di dare delle linee guida per lo sviluppo dei siti Internet; un primo passo verso la standardizzazione avvenne, però, solo nel novembre 1995 quando fu rilasciato l'HTML 2.0. Nel frattempo la guerra tra Netscape e Interner Explorer finì con la vittoria schiacciante della casa di Redmond e questo facilitò, in un qualche modo, una standardizzazione più marcata nata con l'uscita di HTML 4.01 nel dicembre 1999 diventata poi ISO (ISO/IEC 15445:2000) nel maggio 2000. La staticità dell'HTML, già superata in parte dalle Common Gateway Interface (CGI), cede il passo alla dinamicità dei linguaggi interpretati lato server come PHP, ASP, Python, Coldfusion, etc. La dinamicità delle pagina è data anche da un uso massiccio di database relazionali come Oracle, MySQL, Postgres etc, etc. Inoltre i browser iniziano a dotarsi di strumenti lato client per interagire con l'utente come javascript, applet etc etc. 4 Come già visto l'HTML inizia a essere un po' troppo rigido vista l'evoluzione che il Web sta avendo; da qui la nascita di eXtensible Markup Language (XML) come sottoinsieme di SGML, con il quale si andrà poi a riscrivere l'HTML dando così origine all'eXtensible HyperText Markup Language (XHTML). L'evoluzione verso XML è dovuta alla necessità di avere un linguaggio di marcatura flessibile e adattabile alle varie situazioni, in particolare grazie ad XML si è potuto riscrivere le specifiche di HTML dando appunto origine a XHTML, a questo vengono affiancati i Cascade Style Sheet (CSS), creando una netta distinzione tra presentazione del documento a carico dei CSS, e il contenuto del documento descritto dall'XHTML. Ovviamente XML non è servito solo alla riscrittura di HTML ma anche a creare strumenti molto complessi come XFORM, o XSL e vari altri. La dinamicità delle pagine unite ad applicazioni XML come gli Really Simple Syndication (RSS) ci pongono di fronte a un Web non più come semplice strumento di fruizione, in cui la maggior perte degli utenti si limita a leggere ciò che trova, ma a un Web come strumento interattivo, in cui gli utenti, grazie a strumenti come i Forum e ai più recenti Weblog (Blog) e Wiki, hanno la possibilità di porre domande, dare risposte, aiutare alla costruzione della pagina come nei Wiki (basti pensare a wikipedia), crearsi home page come diari in modo semplice e veloce con il concetto Blog, in più si permette a tutti di poter raccogliere le proprie idee e di ridistribuirle grazie appunto agli RSS. Ci troviamo di fronte, quindi, a un evoluzione sostanziale del concetto di Web da semplice contenitore per pochi appassionati a un punto di incontro di comunità, di persone che concorrono alla creazione di contenuti in modo interattivo e comunitario. Nelle comunità di sviluppatori, si usa identificare questo stato del Web come Web 1.5. 5 Nell'ultimo anno, grazie soprattutto all'avanzamento delle infrastrutture tecnologiche, in particolare della banda disponibile al singolo utente, dai 14/28 Kbps degli anni novanta agli attuali 2/4 Mbps, e alla luce delle nuove tecnologie disponibili e alla nuova filosofia di libero scambio di contenuti che attraversa il WWW ci troviamo di fronte a una nuova fisionomia del Web: il Web 2.0. Web 2.0 è una formula ideata dalla casa editrice americana O'Reilly [ORY 01], specializzata in pubblicazioni riguardanti le nuove tecnologie e Internet in particolare, per indicare il passaggio dai siti ai servizi, nel senso che il Web come lo conosciamo sta per sparire e per lasciare il posto a un nuovo Web, inteso come piattaforma per lo sviluppo e l'erogazione di servizi. Il sito come oggi lo conosciamo non ha più senso, almeno in questa filosofia, ha senso invece fornire un servizio con cui l'utente può interagire facilmente. Ad esempio un servizio può fornire all'utente la possibilità di condividere le sue conoscenze, o recepire le conoscenze altrui e riformularle per poi andare a condividere di nuovo. Si mira, in sostanza, a costruire un Web collaborativo (social networking). In questa nuova ottica si colloca il progetto my.unife dell'Università di Ferrara, con cui si mira alla costruzione di un Web desktop, ovvero a un unico punto di aggregazione di servizi, che siano dell'Università o che vengano da server terzi. Per definire il concetto di Web desktop, partiamo della metafora del desktop, ovvero il desktop è la rappresentazione della nostra scrivania sul monitor, dove posizioneremo i nostri documenti e cartelle in un nostro ordine logico. Dalla metafora definiamo il concetto di desktop tradizionale, quello a cui siamo tutti abituati. Il desktop è un interfaccia grafica che rappresenta l'area di lavoro dell'utente, 6 in cui sono presenti i propri documenti e cartelle e da cui si possono lanciare gli applicativi di cui l'utente necessita per il lavoro quotidiano. Questo modello di desktop è però residente su una specifica macchina, il passo successivo, il nostro scopo, è quello di virtualizzare il concetto di desktop in modo che questo sia fruibile indipendentemente dal dispositivo che si andrà ad utilizzare. Per fare questo dovremo fare in modo che i dati e le directory siano residenti su un server remoto (spazio disco virtuale) in modo che siano raggiungibili via Web, inoltre dovremo realizzare dei servizi Web che implementino gli applicativi di uso comune. I vantaggi che questa applicazione porterà all'utenza sono vari tra cui: • accesso a tutti i servizi con un singolo login; • servizi e dati raggiungibili ovunque e con dispositivi diversi; • backup automatico. Condizione necessaria per la fruibilità della applicazione sarà di avere una rete a banda larga ma soprattutto affidabile. Per la realizzazione dell'applicazione dovremo scegliere gli strumenti più idonei, ed in particolare questi strumenti dovranno essere permettere di estendere le funzioni che andremo a creare in modo semplice. Scopo di questa tesi è di creare le basi, il nucleo, di questa applicazione, facendo uno studio sui servizi che potremo incorporare, e dando una prima implementazione lato server di un set iniziale di servizi. Per fare questo abbiamo studiato lo stato dell'arte delle applicazioni Web 2.0, cercando di capire quali sono le possibilità che ci si propongono. Da queste, dopo uno studio di fattibilità, abbiamo selezionato un insieme che consideriamo 7 di base, su cui poi si andranno a creare i futuri servizi. Abbiamo, inoltre, concentrato la nostra attenzione sull'implementazione delle funzioni lato server e sull'architettura su cui queste si baseranno. Non da ultimo ci siamo posti il problema della sicurezza dei dati personali che inevitabilmente transiteranno dal browser verso il server e viceversa, come ad esempio i dati per autenticarsi sul servizio (user e password). 8 Capitolo 1: La piattaforma Web 2.0 1.1 Introduzione Web 2.0 è un'espressione inventata dalla casa editrice americana O'Reilly, specializzata in pubblicazioni riguardanti le nuove tecnologie e Internet in particolare. Si tratta di uno slogan efficace, e appropriato, per indicare il superamento del Web così come è stato finora e l'entrata in una nuova fase del Word Wide Web. L'espressione Web 2.0 identifica il passaggio dai siti ai servizi, nel senso che il Web come lo conosciamo sta per sparire e per lasciare il posto a un nuovo Web, i cui casi di successo e i cui parametri saranno diversi da quelli utilizzati finora. Questa nuova filosofia sta rapidamente cambiando il modo di avvicinarsi alla fruizione della Rete. Il fine ultimo del Web 2.0 è svincolarsi dall'architettura client-server che ha caratterizzato il Web fino a oggi per portarsi verso l'erogazione di servizi basati sul WWW. Sostanzialmente l'idea è quella di centralizzare i servizi e distribuirli sul Web eliminando di fatto l'installazione di software sulla propria macchina per fruire dell'applicativo remoto, usare quindi il Web come piattaforma per lo sviluppo e l'erogazione di servizi. I vantaggi di quest'ottica sono facilmente intuibili, tra cui i più importanti: • software sempre aggiornato in modo totalmente trasparente all'utente; • manutenzione centralizzata con un conseguente abbattimento dei costi; • possibilità di avere un unico punto di accesso a tutti i servizi e quindi un unica username e password per accedervi; • le aziende non dovranno più avere una singola licenza d'uso per ogni singolo applicativo, ma si potrà pagare un abbonamento al servizio, con un probabile abbattimento dei costi. 9 Tutti i vari passaggi intermedi che stanno portando dalla vecchia concezione del Web al concetto di Web come piattaforma per lo sviluppo di applicazioni, non solo sono noti, ma sono sotto gli occhi di tutti: fenomeni come i blog, il social networking, la condivisione e la collaborazione online, a livello di sito, servizio o piattaforma stanno avanzando velocemente. Il filo conduttore del Web 2.0 è, infatti, la collaborazione e la condivisione, l'interazione sociale, culturale e professionale realizzata grazie alla tecnologia. È da notare che non si tratta in alcun modo di un'evoluzione tecnologica della suite di protocolli TCP/IP alla base di Internet, ma si parla di mezzi, di strumenti e di servizi, normalmente appannaggio del Web, che è bene ricordarlo, è diverso da Internet in quanto è un suo servizio, sebbene il più diffuso e usato insieme all'e-mail. Sulla nomenclatura si sta dibattendo da un po' di tempo: alcune comunità di sviluppatori ritengono limitativo parlare di Web. Infatti, l'annunciata rivoluzione comporterà l'accesso a Internet da una serie di dispositivi diversi dal PC, dai cellulari al televisore alla radio. Tutto ciò che sfrutterà il digitale. Questi proporrebbero di parlare di Internet 2.0, ma è una questione leziosa e poco importante, il vero punto è il cambiamento di mentalità, di approccio al Web, e su questo tutti sono d'accordo. 1.2 Il Web 2.0 Grazie all'uso di queste tecnologie e alle loro combinazioni, sono possibili servizi integrati che sfruttano singole applicazioni da diversi siti Web. Piena possibilità di comunicazione e interazione tra i vari siti e servizi, infatti, sono le coordinate su cui si instaurano nuove applicazioni e servizi, spesso sviluppati o utilizzati in modalità condivisa e collaborativa. Questo sistema, insieme a tutte le sue derivazioni e a tutte le sue declinazioni (dall'interazione sociale alla programmazione collaborativa), è il Web 2.0. Una rivoluzione annunciata, ancora in corso, che cambierà il WWW sia per gli utenti sia per le aziende. 10 Questa nuova fase di sviluppo del Web si basa su alcuni concetti fondamentali: • Il Web è la piattaforma • servizi e non più di software dedicati • architettura orientata alla partecipazione • libero scambio di contenuti • servizi indipendenti dallo strumento Figura 1.1: Web 2.0 mappa La figura 1.1 mostra i concetti fondamentali menzionati prima, in alto, invece vengono citati i servizi con le loro caratteristiche principali, mentre in basso 11 vengono distribuite le nuove potenzialità degli strumenti e i concetti della filosofia. La figura 1.1 rappresenta il primo schema mentale che Tim O'Reilly ipotizzò quando è stato divulgato il concetto di Web 2.0 [ORY 02]. Figura 1.2: Web 2.0 visione utente Una visione più incentrata sull'utente di quello che è oggi il Web 2.0 è mostrato in figura 1.2 in cui si può vedere al centro la comunità degli utenti (people), sulla destra l'interfaccia verso il server, in alto (partecipation, right to remix, software as a service etc) i concetti filosofici che sono alla base del Web 2.0, mentre a sinistra possiamo vedere i vari servizi che li implementano. Da notare, come già detto, che alla base di tutto questo nuovo modo di vedere il Web vi è l'interattività, tutto funziona se e solo se l'utente da semplice utilizzatore passa alla partecipazione, all'interazione, al concetto di comunità in cui condividere, rielaborare e ridistribuire contenuti. 12 1.3 Tecnologia Il Web 2.0 non è l'evoluzione di una tecnologia, come detto, ma poggia su una base tecnologica in continua evoluzione. In particolare, le tecnologie alla base del Web 2.0 sono: • XML o eXtensible Markup Language [W3C 01]- Linguaggio che è un insieme di regole per la strutturazione e la comprensione logica dei dati tramite computer. Estensibile, indipendente dalla piattaforma e supporta i parametri internazionali e locali. Si compone di tag e attributi, ma si limita a delimitare i dati, lasciando l'interpretazione all'applicazione che li legge. • RSS (Really Simple Syndication o Rich Site Summary, o ancora RDS Site Summary). Sono in realtà un sottoinsieme di XML ma meritano una menzione a parte visto il fiorire di versioni (RSS .92, RSS 2.0, ATOM, RDF), questi sono un sistema per condividere contenuti del sito tramite aggregatori che possono essere on-line, stand-alone o integrati nei client di posta. • API o Application Program(ming) Interface - È un insieme di procedure standard disponibili per i programmatori. Di norma, sono raggruppate a formare un set di strumenti specifici per un certo compito. Possono essere private o pubbliche: si può dire che le API di un certo programma o servizio consentono agli sviluppatori di creare software o servizi a complemento di quel programma o servizio. • Web Services - Sistema software per il Web progettato per supportare la piena interoperabilità tra diverse applicazioni su una stessa rete. L'interfaccia software di un Web Service è tale da garantire la piena interoperabilità tra diverse applicazioni su diverse piattaforme sia software che hardware. Questo sistema permetterà l'interoperabilità tra le 13 varie applicazioni. • XMLHTTP request: è un API fornita dal browser, residente quindi su quest'ultimo, viene introdotto originariamente in Interner Explorer 5 come ACTIVE X, accessibile da qualsiasi linguaggio client side. Questa API permette di trasferire in modo asincrono XML, o altri dati, tra client e server, senza quindi dover ricaricare la pagina. XMLHTTP request non è uno standard W3C, che propone nel Dinamic Object Model (DOM) level 3 “load and save”, già raccomandazione del World Wide Web Consortium, funzionalità simili ma, attualmente, non supportare da nessun browser. Quindi allo stato attuale XMLHTTP request e considerato standard de facto. In figura 1.3 possiamo vedere lo schema logico di una comunicazione client-server realizzata tramite questo strumento 14 Figura 1.3: comunicazione client-server tramite XMLHTPP request • AJAX o Asynchronous JavaScript and XML. - È una tecnica per sviluppare applicazioni Web interattive e dinamiche usando una combinazione tra diversi linguaggi di programmazione e oggetti. In figura 1.4 si rappresenta lo schema di massima di come queste varie tecnologie vanno a interagire per realizzare applicazioni Web 2.0 Figura 1.4: tecnologie 15 1.4 Compatibilità dei browser Questo nuovo mondo è in pieno sviluppo, il che è insito nel concetto stesso di Web 2.0 dove tutto è sempre e rigorosamente in “beta”, è quindi doveroso affrontare il capitolo della compatibilità con gli attuali sistemi, in particolar modo dei browser. Il Web 2.0, infatti, poggia su basi tecnologiche in continua evoluzione, ma già presenti da molto tempo, quindi per quanto riguarda la compatibilità all'indietro (sistemi legacy) non abbiamo particolari problemi. L'unico problema è il supporto da parte dei browser di XMLHTTP request. Questa API viene supportata, e non sempre in modo standard, solo dai browser di ultima generazione. In tabella 1.1 si mostra la compatibilità dei browser verso questo strumento: Browser Interner Explorer Mozilla FireFox Opera Netscape Safari Dalla Versione 5 1 8 7 1.2 Tabella 1.1: compatibilità dei browser Come si può notare, a parte Interner Explorer che ha introdotto il metodo, i browser lo hanno implementato solo da versioni piuttosto recenti, indicativamente nell'ultimo anno. È quindi necessario avere un browser aggiornato per poter fruire a pieno delle potenzialità degli strumenti messi a disposizione dal Web 2.0. In realtà, stando alle statistiche che si trovano in rete, chi utilizza browser alternativi, quindi non IE, tiene aggiornato il proprio browser, mentre chi utilizza Interner Explorer, sempre stando alle statistiche, usa la versione 6, ovvero l'ultima release. Alla luce di questo possiamo dire che gli strumenti sviluppati in questa nuova 16 ottica saranno fruibili dalla larga maggioranza degli utenti. 1.5 Accessibilità Per accessibilità si intende la possibilità di poter fruire del contenuto di un sito Web da chiunque e con qualsiasi strumento. L'accessibilità viene spesso associata alla problematica degli utenti disabili, che siano questi ciechi, ipovedenti, con limitazione nei movimenti o con limitate capacità di cognizione, ma in realtà l'accessibilità ha un ambito ben più ampio. L'accessibilità riguarda tutti gli utenti del Web. Basti pensare, ad esempio, ad un utente normodotato che fruisce di un sito tramite palmare magari con una connessione GPRS, questo utente non ha disposizione uno strumento limitato sia nelle dimensioni dello schermo che sulla banda disponibile. Se il servizio che si sta consultando sarà costruito con gli accorgimenti necessari, l'utente ne potrà fruire a pieno. Da queste considerazioni in seno al W3C è nata la Web Accessibility Iniziative (WAI) [W3C 02] con il fine ultimo di dare delle linee guida per rendere accessibili i siti Web. È da rimarcare che l'accessibilità è cosa diversa dall'usabilità, la prima è una questione tecnica da valutare quindi in fase di realizzazione delle pagine. L'usabilità, definita dall'ISO come l'efficacia, l'efficienza e la soddisfazione con le quali determinati utenti raggiungono gli obiettivi prefissati in determinati contesti, valuta l'interazione tra l'utente il prodotto e le finalità e non è, quindi, una caratteristica intrinseca dello strumento e va quindi valutata in fase di progettazione. Per quanto riguarda il Web 2.0 l'accessibilità è un punto dolente, visto l'uso massiccio di javascript nell' utilizzo di AJAX. 17 Le Web Content Accessibility Guidelines 1.0 (WCAG 1.0) [W3C 03] , che sono raccomandazione del W3C dal 1999, al punto di controllo 6.3 recita: “Assicurarsi che le pagine siano utilizzabili quando script, applet, o altri oggetti di programmazione sono disabilitati oppure non supportati. Se questo non è possibile, fornire informazione equivalente in una pagina accessibile alternativa.” E' facile capire che questo punto di controllo non potrà essere soddisfatto facilmente, e considerato che è un punto di controllo di priorità 1 (indispensabile per l'accessibilità), la pagina difficilmente potrà considerarsi accessibile rispetto a questo standard. Anche la legge italiana (legge 04/2004) [DL 01], o meglio nel decreto attuativo di questa (D.M. 8/luglio/2005 Requisiti tecnici e i diversi livelli per l'accessibilità agli strumenti informatici) [DM 01], al requisito 15 ricalca il sopracitato punto di controllo delle WCAG. In realtà nelle WCAG 2.0 [W3C 04], attualmente in working draft, si pensa di togliere questo punto di controllo anche considerato che ormai le tecnologie assistive per i disabili gestiscono tranquillamente gli script, che la percentuale di utenti, a livello mondiale, che naviga con gli script disabilitati e molto bassa (circa un 10% ma in continuo calo) e che anche molte altre applicazioni, non necessariamente accomunabili al Web 2.0, fanno uso massiccio di programmazione client, un esempio su tutti l'e-learning SCORM compliant. 1.6 Stato dell'arte Attualmente il mondo del Web 2.0 è in pieno fermento, escono a scadenze quasi settimanali nuovi toolkit e servizi. Anche le “grandi” hanno iniziato a sviluppare seguendo questa filosofia come ad esempio Microsoft® che ha già in test Windows live [WIL 01], mostrato in figura 1.5, e, solo per gli Stati Uniti, Office 18 live. Windows live è un servizio mira ad essere una home page personalizzabile dove potremo trovare funzioni di ricerca nel Web, lettura di feed RSS, previsioni meteo, etc. Il tutto personalizzabile tramite drag&drop. Figura 1.5: Windows Live La figura 1.6 mostra Writely [WTL 01] che è un word processor, ovvero un editor di testo simile a Word, che permette la condivisione di documenti tra più utenti in modo da scrivere un documento a più mani ed eventualmente permette la pubblicazione diretta su un blog. Questo strumento permette anche il salvataggio del file in vari formati sul proprio PC. È quindi un' alternativa online, anche se ancora limitata e sperimentale, al classico word. 19 Figura 1.6: Writely Un altro servizio spiccatamente Web 2.0 è delicious [DEL 01], ovvero un servizio di bookmark condiviso in cui è permesso taggare il link, ovvero si possono associare una o più parole identificative del sito in modo che possano essere poi raggruppate sotto queste. Inoltre tutti bookmark possono essere monitorati via RSS. Questo servizio permette all'utente di avere il proprio bookmark ovunque si trovi, in più permette di rendere questo bookmark pubblico in modo da poter condividere le proprie fonti di conoscenza. FlikR [FLR] è un servizio sulla stessa linea di delicious, solo che invece di avere un bookmark virtuale in questo caso avremo una foto gallery virtuale, dove si possono, anche in questo caso, taggare le foto per poterle associare a categorie 20 in modo automatico, inoltre le foto pubbliche sono sotto licenza creative commons quindi riutilizzabili da chiunque. Questo servizio viene spesso menzionato perchè uno dei primi servizi nati sotto l'ala Web 2.0. Netvibes [NVB 01] è il servizio attualmente sviluppato che più si avvicina al concetto di Web desktop, infatti in questo servizio possiamo aggregare varie funzioni, tra cui il controllo delle proprie caselle di posta elettronica (ma non la gestione), ci si può agganciare al servizio servito da writely, da flikr e da delicious. In figura 1.7 si può vedere la nostra pagina su questo servizio Figura 1.7: Netvibes Anche Google nell'ultimo periodo ha rilasciato una serie molto interessante di 21 servizi, cronologicamente Google Maps [GOG 01] (figura 1.8) una mappatura fine della terra sia dal punto di vista satellitare che dal punto di vista di pura mappa stradale, permette di calcolare percorsi, e di essere integrato, grazie alle API pubbliche, in altre applicazioni. Pagina personalizzata di Google [GOG 02], uno strumento per personalizzare le home page di Google a piacimento dell'utente. Google Pages [GOG 03] (figura 1.9), un servizio che permette agli utenti di costruirsi il proprio sito Web basandosi su template fissi e pubblicandoli direttamente on-line. La cosa veramente lodevole dei servizi Google è il single sign on, con l'user di gmail si può accedere direttamente a tutti i servizi che necessitano di autenticazione. Figura 1.8: Google Maps 22 Figura 1.9: Google Pages Il servizio che, però, esemplifica di più il concetto di Web 2.0 è housingmaps che altri non è che l'unione dei servizi Google Maps e Craiglist; questo servizio permette di acquistare o affittare una casa scelta per prezzo vedendo da satellite esattamente dov'è l'immobile. Lo screenshot del servizio è mostrato in figura 1.10 23 Figura 1.10: HousingMaps 24 Capitolo 2: Progetto my.unife 2.1 Introduzione Il progetto my.unife si propone la realizzazione di un Web desktop, ovvero si mira a far confluire in un unico servizio i servizi di base che il generico utente utilizza nel normale uso del PC. Questi servizi possono essere aggregatori di feed RSS piuttosto che un client di posta elettronica o ancora un editor di testo What You See Is What You Get (WYSIWYG), come word, e vari altri servizi che vedremo in dettaglio in seguito. In fase di progettazione abbiamo vagliato le caratteristiche fondamentali che l'applicazione dovrà implementare e stabilito i passi che la realizzazione dovrà seguire, non abbiamo invece potuto stabilire delle tempistiche in quanto il progetto nella sua interezza è molto ampio e verrà svolto in tesi successive e quindi i tempi non sono stimabili a priori. 2.2 Motivazioni L'Università di Ferrara distribuisce vari servizi ai propri utenti: posta elettronica, spazio Web, liste d'esame, spazio disco virtuale, news di ateneo. Questi servizi sono fruibili via Web ma ognuno con il proprio sito dedicato e quindi ognuno con un proprio form di autenticazione. Inoltre gli utenti necessitano sempre più spesso di assistenza in loco per problematiche relative ai comuni strumenti di lavoro come ad esempio la configurazioni dei client di posta. Queste considerazioni ci hanno portato a pensare di aggregare tutti questi servizi in uno unico, dando quindi un unico punto di accesso per tutti (single 25 sign on), in modo da aumentare le facilità d'uso degli strumenti e dandone un interfaccia estremamente usabile. Abbiamo pensato anche di poter aggiungere altre funzionalità prendendo spunto dal mondo Web 2.0 e quindi di andare a creare un vero e proprio Web desktop in modo che l'utente possa, ovunque si trovi, trovare il proprio ambiente personalizzato. 2.3 Scopo del progetto Come già detto più volte, lo scopo ultimo della nostra applicazione è di costruire un Web desktop. Finora ne abbiamo dato una definizione sommaria, ora invece andremo a chiarire il concetto che sarà lo scopo del progetto. Per modellare la nostra applicazione prenderemo spunto dal concetto di desktop che siamo soliti utilizzare nel proprio PC. Il desktop (desktop environment) è un concetto abbastanza recente divulgato in larga scala da Windows 3.1 anche se già presente su PC targati Apple/Macintosh. Il desktop è un interfaccia grafica che permette l'utilizzo del proprio PC grazie ai concetti di icone per avviare applicazioni, directory nelle quali è possibile archiviare i propri documenti e barre degli strumenti da cui aggiungere o richiamare applicativi. Il desktop è un interfaccia facilmente personalizzabile sia a livello grafico, sfondi e stili delle icone, che organizzativo grazie al drag&drop per il posizionamento degli oggetti. Questo concetto di ambiente deriva direttamente dalla metafora di desktop, ovvero il desktop è una rappresentazione della propria scrivania sul monitor, dove sono posizionati i documenti e le cartelle in un ordine logico per l'utente 26 stesso. Il nostro concetto di Web desktop ricalca il concetto di desktop ambiente. Realizzeremo un'interfaccia grafica, fruibile via Web, che servirà alla gestione dei servizi on-line che verranno implementati, dove le icone dei programmi saranno delle aree della pagina, moduli, in cui verranno aperti i servizi che l'utente configurerà, le directory non saranno locali ma remote, in modo che possano essere sempre raggiungibili ovunque l'utente sarà e con qualsiasi dispositivo, infine provvederemo all'implementazione di barre degli strumenti contestuali per l'inserimento di nuovi prodotti e la personalizzazione dell'area di lavoro. Cercheremo quindi di disaccoppiare il desktop dalla macchina fisica in modo che l'utente si disinteressi del luogo dove andrà a salvare i propri dati e dove sono residenti gli applicativi, perchè tutto questo sarà sempre fruibile ovunque e su qualsiasi dispositivo. Avremo quindi bisogno di una pagina Web che sia personalizzabile tramite drag&drop e che permetta di aggiungere contenuti da un menù residente sulla barra degli strumenti. Dovremo inoltre permettere il salvataggio di file in remoto e in vari formati, quindi avremo necessità di implementare un Web disk, dove l'utente abbia la possibilità di lavorare esattamente come fa sul proprio hard disk, ovvero dovrà avere la possibilità di creare e distruggere directory e in queste salvare o eliminare i propri file. Il salvataggio dei dati dovrà, per completezza, essere disponibile anche verso il dispositivo locale. Gli applicativi che abbiamo pensato di incorporare al servizio sono quelli base con cui ognuno di noi ha a che fare ogni giorno: 27 • strumenti tipici di Office; • Client di posta; • Un lettore di feed RSS. Ovviamente la nostra applicazione dovrà memorizzare lo stato in cui l'utente ha personalizzato la propria area di lavoro in modo da poterla ripresentare inalterata. Una volta stabilito il goal del nostro progetto vediamo ora stabilire in dettaglio le specifiche a cui la nostra applicazione dovrà attenersi. In figura 2.1 mostriamo lo schema di principio dell'applicazione Figura 2.1: Schema di principio Web desktop 2.4 Specifiche di progetto Entrando nel dettaglio del progetto andiamo ora a stabilire le specifiche a cui 28 l'applicazione dovrà rispondere. In primo luogo il servizio dovrà basarsi su una struttura estremamente flessibile, questo per garantire l'inserimento di nuovi servizi in modo semplice e pratico, senza dover rimaneggiare l'architettura dei dati ogni volta. Una caratteristica importante e che darà un valore aggiunto notevole all'applicazione sarà il single sign on, ovvero immettentendo una sola volta la propria username e password l'utente potrà utilizzare tutti i servizi che avrà configurato nella propria area di lavoro. Dovendo far transitare dati sensibili tra l'applicazione e il server, come ad esempio per l'autenticazione, dovremo prestare particolare attenzione per fare in modo che questi dati siano protetti, inoltre essendo l'applicazione personale dovremo garantire un elevato grado di sicurezza in modo che non sia possibile appropriarsi dell'identità virtuale altrui. In sostanza non dovrà essere possibile per l'utente x consultare i dati privati dell'utente y. L'applicazione dovrà essere personalizzabile dall'utente a piacimento in modo semplice ed intuitivo con semplici drag&drop e inserimenti da menù. Potendo essere lo schermo dello strumento con cui si consulta la propria area di lavoro variabile dallo schermo del PC allo schermo di un palmare dovremo prevedere zone di lavoro interscambiabili e facilmente accessibili (tab). L'applicazione dovrà potersi interfacciare anche a servizi forniti da terzi come ad esempio caselle di posta personali su altri domini. Dovremo dare la possibilità all'utente di utilizzare i comuni strumenti di lavoro quindi dovremo offrire applicazioni simil Office, che però possano salvare i file redatti sia in remoto che in locale, a scelta dell'utente. L'applicazione dovrà permettere di redarre documenti e renderli pubblici su Web in modo intuitivo. Si dovrà quindi prevedere un workflow per stabilire se 29 un documento è pubblico, privato o in bozza. Dovremo prevedere la possibilità di condividere la scrittura di documenti in modo collaborativo, da parte di più utenti. indicati dal creatore e possessore del documento. Infine la nostra applicazione deve tenere traccia di tutte le personalizzazioni dell'utente per poter riproporre l'ambiente di lavoro come è stato lasciato, e questo lo dobbiamo garantire indipendentemente dal dispositivo con cui questi accede al proprio Web desktop, che sia da casa o dall'ufficio, da PC o da palmare 2.4 Architettura del sistema Il sistema che abbiamo pensato è un servizio fruibile via Web tramite un browser. La pagina che il browser caricherà porterà con se una serie di meccanismi lato client che serviranno per l'interazione con l'utente e con l'application server. Verso l'utente, infatti, dovremo prevedere meccanismi di personalizzazione della pagina semplici ed intuitivi, questi saranno giocoforza implementati sul lato client dell'applicazione. Il client dovrà dialogare, tramite un linguaggio comune ad entrambi, con il nostro application server. L'application server è il server su cui girano le nostre applicazioni. Queste comunicazioni dovranno avvenire in modo asincrono, ovvero non dovremo andare a ricaricare tutta la pagina all'utente ma solo l'area di questa che viene aggiornata. L'unico momento in cui la pagina verrà caricata totalmente è all'atto del login, quando l'application server manderà i dati archiviati per la costruzione del Web 30 desktop dell'utente specifico. Quando l'utente manda i suoi dati per l'autenticazione, il client spedisce le credenziali all'application server, il quale le andrà a controllare con il meccanismo che andremo a scegliere, in caso positivo verranno inviate al client, nel linguaggio convenzionale che andremo a implementare, le informazioni specifiche dell'utente. Queste informazioni saranno residenti su un database che il nostro application server andrà ad interrogare o ad aggiornare ogniqualvolta ve ne sia la necessità. Il nostro application server è l'unico punto di contatto della nostra applicazione verso l'esterno. Il che significa che l'application server dovrà occuparsi di andare a reperire le informazioni sui servizi configurati su server terzi. Quanto detto sopra è schematizzabile come in figura 2.2 31 Figura 2.2: Architettura del servizio my.unife 2.6 Fasi di progetto Addentrandoci ancor più nel progetto vediamo le fasi principali di quest'ultimo. Come prima cosa dovremo andare a stabilire quali saranno le tecnologie che andremo a utilizzare per l'implementazione del nostro servizio. Una volta stabilita la base tecnologica dovremo andare ad implementare la struttura dei dati, ricordando, come da specifiche, che la struttura dovrà essere flessibile e facilmente espandibile. Data la struttura dei dati andremo a stabilire i metodi di archiviazione di questi. Il passo successivo sarà quello di implementare l'autenticazione dell'utente basandosi sugli strumenti già a disposizione. 32 A questo punto potremo implementare le funzioni lato server che serviranno a gestire l'applicazione, quindi tutto ciò che riguarda la memorizzazione dei settaggi dell'utente e le comunicazioni che dovranno avvenire da e per il client. Date le funzioni di comunicazione con il server si andrà a prototipare l'applicazione lato client, gestendo tutte le funzionalità di base come da specifiche: • drag&drop dei moduli • menu di inserimento • tabbing Una volta che avremo a disposizione il prototipo potremo andare a fare una prima fase di test per controllare se l'applicazione è fruibile o meno dai vari dispositivi e dai vari browser che abbiamo stabilito in fase di specifica, se questa fase non verrà superata si dovrà tornare alla fase di prototipazione. Finita la fase di test si andrà ad aggregare le varie funzionalità di cui si è discusso, come: • lettore di feed RSS • Client di posta • Word processor Una volta integrati questi primi servizi si dovrà ritestare l'applicazione per verificarne la compatibilità e l'usabilità dai vari dispositivi. Dopo aver realizzato il prototipo con i primi servizi aggregati potremo passare alla fase di beta testing da parte degli utenti. A questo punto si potrà iniziare ad aggregare tutti i servizi che si vorranno sviluppare e quindi si creerà un ciclo di integrazioni e test. 33 Vi è da notare che il progetto non ha una fine delimitata da, ad esempio, un certo set di servizi, questo è in linea con il concetto di perpetual beta insito nella filosofia del Web 2.0. La Figura 2.3 schematizza le fasi di progetto Figura 2.3: Fasi di progetto 34 Capitolo 3: Tecnologie 3.1 Introduzione Abbiamo scelto le tecnologie con cui andremo a costruire l'applicazione in base a quanto abbiamo a disposizione sul server, sulle conoscenze di base di chi stà sviluppando e sulla flessibilità che queste devono garantirci. Per quanto riguarda lo scambio dei dati tra client e server è naturale la scelta di XML, essendo questo un linguaggio di marcatura nato proprio per garantire l'interscambio dei dati tra applicazioni. Questo XML dovrà essere basato su una Document Type Definition (DTD) o su un XML Schema Definition (XSD), vedremo che sarà conveniente basarci sull'XSD per avere una maggiore flessibilità. Una volta definito lo schema dei dati tramite l'XSD abbiamo scelto di archiviare questi dati in un database relazionale, MySQL. Per quanto riguarda l'autenticazione degli utenti, avendo a disposizione un server LDAP. Per quanto riguarda il linguaggio di scripting lato server abbiamo usato PHP, per le conoscenze già acquisite e anche perchè ha una serie di librerie che ci faranno molto comodo per lo sviluppo, per quanto riguarda, invece, il lato client le funzioni saranno scritte utilizzando le tecnologie AJAX che ci permetteranno di aggiornare i moduli della pagina in modo asincrono, senza quindi mai dover ricaricare la pagina. 3.2 XML XML, eXtensible Markup Language, è un linguaggio estensibile realizzato per poter utilizzare in modo semplice i documenti strutturati, studiato per il Web e per superare i limiti di HTML (HyperText Markup Language), ma con possibilità di utilizzo in ambienti differenti. Sviluppato dal W3C, XML è un sottoinsieme di SGML, uno standard 35 internazionale che definisce le regole per scrivere markup language, volutamente non comprende alcune funzionalità complesse di SGML difficilmente implementabili su Web. Markup è tutto ciò che ha un significato speciale, che deve essere ben caratterizzato, ad esempio il testo scritto in grassetto, il testo sottolineato. In XML tutto ciò che è compreso tra i caratteri "<" e ">" (angled brackets, parentesi angolari) è considerato markup, viene detto anche tag (etichetta), ad esempio: <nome> è un tag. XML è un metalinguaggio, contrariamente ad HTML che è un linguaggio predefinito, non ha tag predefiniti ma consente di definire nuovi metalinguaggi (esiste oggi la versione HTML in XML), è estensibile. XML è stato studiato per consentire e facilitare scambi di dati anche tra applicazioni di tipo diverso, come ad esempio i database e i word processor . Queste, in sintesi, le motivazioni per cui abbiamo scelto XML: • consente di utilizzare documenti strutturati; • è estensibile, permette di aggiungere sempre nuovi marcatori; • offre un ottimo formato di scambio di dati, inoltre è un formato che probabilmente durerà a lungo poiché strutturato, estensibile, non ambiguo e completamente leggibile (non binario) e sarà comunque riutilizzabile, considerando anche che i programmi a ogni nuova versione cambiano formato; • la strutturazione e l’utilizzo di un linguaggio estensibile basato su tag consente una più semplice interazione con altri programmi, compresi i data base, e quindi un trattamento dei dati più semplice ed efficace; 36 • portabilità (indipendente dalla piattaforma e dal processore). 3.3 DTD o XSD Come detto XML ha bisogno di definire le regole con cui si dovranno andare a costruire i documenti: DTD o XSD. La DTD è il primo strumento che sia stato introdotto per definire la struttura di un documento XML, è caratterizzato da una sintassi piuttosto complessa, ma non è questo il vero problema, le vere limitazioni di questo approccio è il non riuscire a caratterizzare i dati complessi e la difficile estensibilità della definizione. Inoltre le DTD sono uno strumento estraneo al mondo XML. XSD è uno strumento più giovane e costruito appositamente per sopperire alle mancanze delle DTD; XSD non è altro che un XML che definisce come sarà lo schema dei documenti che lo riferiscono, ovvero è un XML che serve per validarne altri. Il grande vantaggio di questo approccio è la grande facilità con cui si possono estendere questi schemi, e visto il concetto di “perpetual beta” che caratterizza l'ambito del Web 2.0, questa caratteristica ha fatto la differenza sulla nostra scelta. XSD ha fondamentalmente un unico grande limite, ovvero la pesantezza del processo di validazione dei documenti, quindi dovremo limitare al massimo l'esecuzione di questa operazione. Senza entrare troppo nel dettaglio vediamo ora cosa ci permette di fare questo linguaggio, che è bene ricordarlo, serve esclusivamente a definire la struttura di un documento XML. Come già detto un XML Schema è un documento XML che utilizza un insieme di tag speciali per definire la struttura di un documento XML, da questa definizione emerge subito una novità interessante: viene utilizzato un documento XML per validare un altro documento XML. L'unico vincolo che 37 dobbiamo rispettare nella creazione di uno schema è l'uso dei tag definiti dall'XML Schema Language definito dal W3C: ad esempio l'elemento root dello schema, obbligatorio, è caratterizzato dal tag <xs:schema> con attributo xmlns. Una delle principali novità introdotte dagli XML Schema rispetto ai DTD è la possibilità non solo di definire il tipo di dato di un elemento, ma anche di poter personalizzare un tipo di dato. Esistono due categorie di tipi di dato: semplici e complessi. i tipi di dato semplici sono relativi a quegli elementi che non possono contenere altri elementi e non prevedono attributi. Sono previsti numerosi tipi di dato predefiniti, a questi possiamo, ad esempio, imporre il vincolo che un elemento contenga informazioni di tipo stringa, intero, booleano, data, ecc.; è inoltre possibile definire tipi semplici personalizzati derivandoli da quelli predefiniti: potremmo definire un tipo di dato come restrizione del tipo stringa, vincolando i valori ad uno specifico insieme di stringhe o ad un pattern individuato da un'espressione regolare. I tipi di dato complessi si riferiscono alla definizione degli elementi con attributi e che possono contenere altri elementi, la definizione del tipo complesso consiste generalmente nella definizione della struttura prevista dall'elemento. Se l'elemento può contenere altri elementi possiamo definire l'insieme degli elementi che possono stare al suo interno come sequenza, come insieme di valori alternativi o come gruppo. E' inoltre possibile dichiarare tipi di dato personalizzati e fare riferimento a tali dichiarazioni quando si definisce un elemento, in modo analogo a come avviene per la definizione di tipi nei linguaggi di programmazione. Questo consente di rendere più leggibile lo schema e di concentrare in un unico punto la definizione di un tipo utilizzato diverse volte. 38 Si può comporre schemi includendo o importando schemi diversi ed è possibile comporre documenti XML utilizzando tag definiti in schemi diversi. Ad esempio, possiamo integrare i nostri documenti XML che descrivono il desktop con l'introduzione di nuovi elementi che definiscono nuovi tipi di servizi che verranno implementati in seguito. Supponendo che tali elementi siano definiti in un apposito XML Schema, possiamo combinare i tag derivanti dai due schemi in un unico documento XML, sfruttando un meccanismo noto come namespace. Per utilizzare il nostro schema nella costruzione di un documento sarà sufficiente utilizzare un prologo del tipo: <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="tesi.xsd"> questo serve ai parser per validare i documenti che andremo a costruire, il tutto per verificare che l' XML sia ben formato. 3.4 Database Per immagazzinare i dati abbiamo scelto di utilizzare un database relazionale: MySQL. Abbiamo scelto questo prodotto perchè ben supportato, ne esistono versioni per qualsiasi S.O ed è distribuito sotto licenza GNU/GPL. Avremo potuto scegliere di usare direttamente un xml salvato ad esempio nella home dell'utente, ma questo ci avrebbe portato una dipendenza eccessiva del file system sottostante, inoltre avremo dovuto gestire letture e scritture su disco che avrebbero appesantito inutilmente la nostra applicazione. 3.5 Autenticazione L'Università di Ferrara dispone di un server LDAP sarebbe quindi 39 dispendioso ed inutile gestire le autenticazioni basandosi ad esempio si database. Senza volere entrare nel dettaglio, vediamo ora questo strumento di lavoro, per capire meglio quali attributi andremo a filtrare: LDAP (Lightweight Directory Access Protocol) è un protocollo standard per l'interrogazione e la modifica dei servizi di directory. Il termine di uso comune "directory LDAP" può essere fuorviante. Nessun tipo specifico di directory è una "directory LDAP". Si potrebbe ragionevolmente usare il termine per descrivere qualsiasi directory accessibile tramite LDAP e che possa identificare gli oggetti contenuti tramite nomi X.500, ma Directory come OpenLDAP, in uso nel nostro caso, anche se progettati espressamente per l'accesso tramite LDAP piuttosto che come come ponte verso X.500 non sono directory LDAP più di qualsiasi altra directory accessibile tramite protocollo LDAP. Un elemento in una directory LDAP è una collezione di attributi, e può essere referenziato in modo non ambiguo tramite un nome, detto distinguished name (DN), per esempio "cn=Luca Tebaldi, ou=people,dc=unife,dc=it". Questo in generale, nel nostro caso però, per evitare omonimie, l'attributo su cui si và a distinguere in modo non ambiguo è uid (user identifier) che altri non è che lo username assegnato per la posta elettronica; quindi il nostro esempio si trasforma in "uid=luca, ou=people,dc=unife,dc=it". Ognuno degli attributi dell'elemento è definito come membro di una classe di oggetti, raggruppati in uno schema. Ogni elemento nel database è associato a una o più classi di oggetti, che definiscono se un attributo sia opzionale o meno, e che tipo di informazioni questo contenga. I nomi degli attributi solitamente sono scelti per essere facilmente memorizzabili, per esempio "cn" per common name, o "mail" per un indirizzo e-mail. 40 Gli elementi di una directory LDAP presentano una struttura gerarchica che riflette confini politici, geografici o organizzativi. Nel modello X.500 originale, gli elementi che rappresentano gli stati appaiono in cima all'albero, con sotto di essi gli elementi per gli stati federali o le organizzazioni nazionali (normalmente nelle installazioni di LDAP vengono usati i nomi del DNS per strutturare i livelli più alti della gerarchia) . Più in basso potrebbero apparire elementi per rappresentare le divisioni all'interno di una singola organizzazione, singole persone, documenti, stampanti o qualsiasi altra cosa. L'architettura di un server LDAP è schematizzabile come mostrato in figura 3.1 Figura 3.1: Architettura LDAP Riassumendo il nostro servizio accetterà, per autenticarsi, lo stesso user e password della posta elettronica, il che entra perfettamente nella logica di single sign on (SSO) che vorremo dare all'applicazione. 41 3.4 PHP PHP è un linguaggio di programmazione server side interpretato, sotto licenza open source. Questo linguaggio, dalla versione 5 che noi useremo, è ad oggetti e fornisce una discreta quantità di API, inoltre è molto ben supportato ed utilizzato. PHP permette di interfacciarsi con un po' tutti i database di uso comune, inoltre supporta molto bene le tecnologie con cui andremo a modellare e scambiare i dati. Avendo inoltre una buona conoscenza del linguaggio ci è sembrata la scelta naturale per l'implementazione lato server. 3.5 AJAX Asynchronous JavaScript and XML, AJAX ne è l'acronimo, è una tecnica per sviluppare applicazioni Web interattive e attive usando una combinazione di: • XHTML e CSS per la parte visiva; • Document Object Model, DOM, modificato attraverso javascript per mostrare dinamicamente le informazioni e interagire con esse: • L'oggetto XMLHTTPrequest per interscambiare e manipolare dati in modo asincrono tra il browser dell'utente e il Web server (in genere viene usato XML e XSLT, anche se le applicazioni AJAX possono usare altre tecnologie. Come DHTML o LAMP , AJAX non è una tecnologia individuale, piuttosto è un gruppo di tecnologie utilizzate insieme. Le applicazioni Web tradizionali consentono agli utenti di compilare moduli, e quando questi moduli vengono inviati, viene inviata una richiesta al Web server. Il Web server agisce in base a ciò che è stato trasmesso dal modulo e 42 risponde bloccando o mostrando una nuova pagina. Noi invece vorremmo che la nostra applicazione risponda in modo asincrono alle richieste in modo da non dovere ricaricare la pagina, ma solo aggiornare i dati del modulo chiamante. Le applicazioni AJAX possono inviare richieste al Web server per ottenere solo i dati che sono necessari. Come risultato si ottengono applicazioni più veloci (dato che la quantità di dati interscambiati fra il browser ed il server si riduce). Anche il tempo di elaborazione da parte del Web server si riduce poiché la maggior parte di dati della richiesta sono già stati elaborati. In figura 3.1 viene mostrato come un'applicazione Web tradizionale elabora l'interazione dell'utente e come lo fa invece un'applicazione AJAX. 43 Figura 3.2: confronto tra tecnologie dinamiche e attive Come si può vedere in figura nell'applicazione AJAX vengono passati solo XML, quindi un file di testo, mentre nell'applicazione Web tradizionale vengono ripassati sia l'HTML che il CSS ovvero vengono ripassati tutti i dati di contenuto e di presentazione della pagina che verrà quindi renderizzata come se fosse una nuova pagina. Questo appesantisce sia il browser che il server, e si spreca inutilmente banda. Per concludere, quindi, l'utilizzo di tecnologie AJAX ci permetterà di rendere più fluida l'applicazione sul browser, ridurrà l'impiego di banda e alleggerirà il carico del server. 44 Capitolo 4: Struttura dati 4.1 Introduzione Vediamo ora le scelte che abbiamo fatto per l'implementazione dello schema, ovviamente queste scelte saranno il più generali possibili, ma non potranno astrarsi completamente dal progetto che l' XSD deve descrivere. Il nostro obiettivo è la costruzione di un Web desktop, quindi un area, una pagina Web, nella quale sia possibile avere un discreto grado di libertà nella personalizzazione della stessa, dove si possano inserire, eliminare spostare moduli; questi a loro volta possono contenere vari tipi di informazioni, o meglio servizi. Nel nostro caso abbiamo fatto delle scelte di prima istanza, influenzate dal tipo di servizi già presenti nel nostro Ateneo, e da quelli che già sono implementati in rete, cercando cosi di creare un aggregatore il più completo possibile. I moduli che noi abbiamo pensato come primo set di servizi sono: • RSS, ovvero la possibilità di aggiungere n feed alla pagina, ovviamente provenienti da qualsiasi sito non solo quelli delle news di ateneo. • Posta elettronica, l'utente potrà aggiungere n moduli contenenti le proprie caselle di posta elettronica, o meglio, una volta configurato il modulo con i parametri di connessione, si potranno monitorare tutte le proprie caselle E-mail da un'unica pagina. Anche in questo caso le caselle di posta elettronica possono essere anche diverse da quelle istituzionali dell'Università. • Rubrica, abbiamo pensato alla possibilità di aggiungere uno o più moduli che raccolgano i contatti che si desidera tenere a disposizione, abbiamo pensato a più moduli considerando che il singolo utente potrebbe voler 45 distinguere i vari tipi di rubrica, ad esempio la rubrica di lavoro, degli amici etc. Anticipando quanto diremo in seguito, abbiamo pensato che il modulo possa memorizzare le card dei contatti in due modi possibili, se si desidera memorizzare un indirizzo di un utente unife ci sarà l'apposito form di ricerca che restituirà tutti i dati presenti nei database e quindi riempire automaticamente le informazioni della card, altrimenti, nel caso di utenti generici, daremo la possibilità di riempire manualmente i campi e di memorizzarli. • Post-it, è comodo avere la possibilità di agganciare dei promemoria alla pagina, dei post-it appunto. • To-do, un altro strumento piuttosto comune nelle applicazioni di questo tipo è il to-do list ovvero la lista delle cose da fare, noi abbiamo previsto che se ne possano aggiungerne più d'una in modo da non dare limiti all'utente. Una volta stabiliti i vari tipi di elementi poi dovremo andare a costruire il documento vero e proprio che poi sarà passato all'applicazione client che a sua volta la interpreterà e da questo costruirà la pagina da presentare all'utente. 4.2 Tipi di dato generico In prima istanza andremo a costruire il tipo di dato astratto “modulo” dal quale poi deriveremo i tipi di moduli che ci serviranno per costruire il nostro documento. Il tipo generico “modulo” contiene le informazioni generiche che caratterizzano tutti i moduli e in particolare: • Titolo (title) del modulo di tipo stringa, con valore di default “titolo”. • Visibile (visible) identifica se il modulo è o meno espanso o se è collassato, di tipo booleano. Il valore di default è “false”. 46 • ID identificativo univoco del modulo di tipo id. • inpage, questo boolenano indica se il modulo è o meno agganciato alla pagina. Anche in questo caso il valore di default è “false”. Questo tipo di dato astratto è schematizzato in figura 4.1: Figura 4.1: tipo di dato generico modulo Da notare che ogni elemento ha cardinalità pari a uno, ovvero deve essere presente non più di una volta nella sequenza. 4.3 Tipi di dato complessi Vediamo ora come abbiamo derivato il tipo complesso modulo per creare i singoli moduli che ci serviranno per la nostra applicazione: • Modulo RSS, oltre alle caratteristiche tipiche dei moduli che deriveremo dalla classe astratta necessita delle informazioni, queste avranno una cardinalità pari a 1 47 • link indica a quale andare a prelevare il feed, che sarà di tipo stringa obbligatorio • aggiorna è un campo di tipo intero che rappresenta ogni quanti secondi dovrà essere aggiornato il feed, come valore di default abbiamo scelto 3600 (un'ora) • num rappresenta voci andremo a visualizzare, anche questo di tipo integer e con valore di default 10. Il tipo di dato è mostrato in figura 4.2: Figura 4.2: tipo di dato RSS 48 • Modulo e-mail: avremo bisogno delle informazioni • User campo di tipo stringa con cardinalità uno ed obbligatorio. • Imap elemento di tipo stringa obbligatorio con cardinalità 1 e con valore di default “imap.unife.it”. • Link parametro che indica l'indirizzo del client di posta Web per consultare le mail, sempre di tipo stringa, ma non obbligatorio e con cardinalità massima pari a 1. questo elemento non è obbligatorio in quanto non è detto che il server di posta che si sta andando a configurare abbia un interfaccia consultabile via Web. • Tipo, campo di tipo stringa che identifica se la connessione è pop3 o imap, il valore di default è imap In figura 4.3 si può vedere lo schema del tipo di dato: 49 Figura 4.3: tipo di dato e-mail • Modulo Rubrica, schematizzato in figura 4.4, per questo modulo necessiteremo delle informazioni aggiuntive: • item campo di tipo card, con una cardinalità infinita (unbounded) 50 Figura 4.4: tipo di dato rubrica • il tipo card è composto dagli elementi: • Nome, cognome, e_mail, home_page di tipo stringa, cardinalità pari a 1 e opzionale • da una sequenza di elementi con cardinalità infinita composta da via di tipo stringa, num_civico di tipo intero, e da una sequenza innestata opzionale con cardinalità infinita composta di prefisso, tel e fax tutti di tipo intero opzionali e cardinalità pari a 1 quanto detto può essere riassunto come in figura 4.5 51 Figura 4.5: tipo di dato card Queste scelte sono dettate dalla ricerca della generalità nel modulo, in questo modo per il singolo contatto avremo la possibilità di inserire zero o più recapiti telefonici, eventualmente l'indirizzo e-mail o della home page. Una visione di insieme del modulo rubrica è visibile in figura 4.6 52 Figura 4.6: tipo di dato rubrica esteso 53 • post-it, non è altri che un modulo contenente un testo quindi per implementarlo avremo bisogno solo di una elemento testo di tipo stringa con cardinalità 1 ma limitato a 255 caratteri, abbiamo fatto questa posizione di comodo per uniformarci al tipo varchar del database che useremo. Lo schema è mostrato in figura 4.7. Figura 4.7: tipo di dato post-it • to-do, questo modulo non è altri che la classica lista della spesa sarà quindi composto da una sequenza di campi di testo che saranno o meno chekati per indicare se l' azione è stata o meno compiuta. In altre parole avremo bisogno una sequenza con cardinalità infinita di: 54 • Testo, un campo di tipo stringa, di lunghezza massima 100 • Cheked, un elemento booleano con valore di default falso entrambi gli elementi, nella sequenza, hanno cardinalità 1; La figura 4.8 mostra lo schema di questo tipo di dato Figura 4.8: tipo di dato to-do per la costruzione della pagina avremo bisogno di un ulteriore tipo di dati: il tipo colonna. Le motivazioni di questa scelta le daremo per esteso quando parleremo della costruzione della pagina, per ora basti che questo modello servirà per limitare il drag&drop libero; gli elementi di questo tipo di dato non 55 sono altri che una sequenza con cardinalità infinita di scelte dei moduli sopra descritti, l'unico dato aggiunto è l'attributo name di tipo stringa che servirà all'applicazione client per varie operazioni. In figura 4.9 diamo una rappresentazione a diagramma del tipo di dato Figura 4.9: tipo di dato colonnaType 4.4 Costruzione della pagina Per costruire lo schema generale della pagina abbiamo optato per limitare le posizioni dei moduli limitandoli in al massimo tre colonne, questo per evitare il 56 drag&drop libero, la motivazione di questa scelta la si può trovare semplicemente pensando che l'applicazione potrebbe essere fruita da più dispositivi con risoluzioni dello schermo che possono variare di volta in volta, sarebbe facile allora, lasciando piena libertà di posizionamento, avere moduli che escono dal view port, o peggio che vadano a sovrapporsi gli uni agli altri rendendo cosi poco usabile l'applicazione stessa. Quindi la nostra pagina sarà costituita da un massimo di tre colonne, ma non obbligatoriamente, il cambio di stile a 1, 2 o 3 colonne sarà gestito da un semplice style switcher residente sull'applicazione client e memorizzato di volta in volta nel DB, il dato verrà poi reinviato alla sucessiva apertura del servizio tramite un apposito elemento. Il documento sarà quindi costituito da: • titolo della pagina, elemento di tipo stringa con valore di default “title” cardinalità 1 ed obbligatorio. • Style, un elemento di tipo stringa che indica lo style css da applicare alla pagina. • Num_col, elemento di tipo intero con cardinalità 1 e valore di default 3, questo campo ha volore ristretto al insieme [1..3]. • di tre elementi colonna di tipo colonnatype due dei quali opzionali lo schema che rappresenta questa struttura è visibile in figura 4.10. 57 Figura 4.10: elemento page 58 4.5 Elementi Per effetuare le trasmissioni da e per il server abbiamo istanziato degli elementi di comodo, in particolare: • Rss_item di tipo rss per la trasmissione e l'inserimento degli aggiornamenti dei moduli rss (figura 4.11) • Posta di tipo e-mail per l'inserimento dei moduli di tipo posta elettronica (figura 4.12) • Card di tipo card per inserire nelle rubriche gli elementi dei contatti (figura 4.13) • post-it per l'iserimento dei moduli post it (figura 4.14) • to-do per l'inserimento e l'aggiornamento dei moduli to-do (figura 4.15) Figura 4.11: elemento rss_item Figura 4.12: elemento posta 59 Figura 4.13: elemento card Figura 4.14: elemento post_it Figura 4.15: elemento todo 60 Capitolo 5: Database 5.1 introduzione Per realizzare il database con cui andremo a immagazzinare le scelte del''utente ci siamo basati sulla struttura che abbiamo dato ai dati nell XSD. Una volta modellato il database ci siamo preoccupati di portarlo in terza forma normale per evitare le problematiche relative ad anomalie di inserimento, cancellazione e aggiornamento, quindi in sostanza per garantire l'integrità e la correttezza dei dati che andremo ad archiviare 5.2 Realizzazione Il database che abbiamo pensato è schematizzabile come in figura 5.1: 61 Figura 5.1: database La tabella utenti contiene i settaggi generali della pagina utente (titolo, stile, numero di colonne); la tabella sequenza conterrà per ogni utente l'esatta sequenza dei moduli che questi ha settato, divisa per colonne, mentre la l'entità moduli ha una gerarchia is-a di specializzazione che considera i vari tipi di moduli che possiamo gestire, alcuni di questi poi sono in relazione con altre entità che caratterizzano i contenuti dei singoli moduli. 62 Vediamo ora di normalizzare lo schema del DB che abbiamo ipotizzato: in prima battuta dobbiamo togliere la gerarchia is_a dell'entità modulo, questo può essere fatto o includendo tutti i campi dei figli nell'entità madre oppure includendo le caratterizzazioni della madre nei figli, in quest'ultimo caso dovremo replicare le varie relazioni dell'entità madre per ognuno dei figli. La nostra scelta è andata sulla seconda ipotesi perchè se avessimo gestito tutti i possibili moduli con un unica entità avremmo sprecato inutilmente dello spazio avendo delle entry mezze vuote ed inoltre in questo modo abbiamo una maggiore flessibilità nel caso decidessimo di aggiungere eventuali servizi. Stabilito questo andiamo a scrivere le nostre entità nel dattaglio utenti (User, Titolo, Col, Stile) Sequenze (Id, mod_id, Col, Pos) Mod_RSS (User, Id, visible, in_page, title, link, num, aggiorna) Mod_mail (User, Id, visible, in_page, title, user, password, tipo, server, link) Mod_rub (User, Id, visible, in_page, title) Mod_post-it (User, Id, visible, in_page, title, testo) Mod_to-do (User, Id, visible, in_page, title) Card (Id, indirizzo) to-dolist (Id, testo, check) La tabella Card non è in prima forma normale in quanto indirizzo è un campo composto (nome, cognome, e-mail, home, via, tel, fax) e per essere in prima forma normale ogni dato deve essere atomico quindi la nostra tabella diventerà Card (Id, nome, cognome, e-mail, home, via, tel, fax) Per essere in seconda forma normale le tabelle con chiave primaria composta 63 non devono avere dati che dipendo da solo una delle chiavi, nel nostro caso le tabelle sono già in seconda forma normale. Per completare il processo di normalizzazione, la terza forma normale prende in considerazione le dipendenze transitive. Una dipendenza transitiva è una situazione dove esiste una colonna che non dipende direttamente dalla chiave primaria; il campo dipende da un qualche altro campo che a sua volta dipende dalla chiave primaria. In sostanza dovremo andare a vedere se ci sono colonne che vengono completamente identificate da altre colonne che non siano chiavi primarie. Nel nostro caso le Tabelle sono già in terza forma normale. È appena il caso di ricordare che si richiede la normalizzazione di un database per evitare anomalie di inserimento, cancellazione e aggiornamento, quindi in sostanza per garantire l'integrità e la correttezza dei dati che andremo ad archiviare. Concludendo il database normalizzato che abbiamo realizzato è descritto in figura 5.2. 64 Figura 5.2: database normalizzato 65 Capitolo 6: Implementazione funzionalità lato server 6.1 Introduzione Rimane ora da descrivere i vari metodi che abbiamo realizzato e che saranno richiamati dall'applicazione client. Per realizzare i nostri script abbiamo usato PHP: abbiamo scelto questo linguaggio perchè ben supportato e stabile, dispone di un'ampia serie di librerie che ci torneranno molto utili ed esiste una fornita documentazione di interazione tra PHP e AJAX I metodi principale che abbiamo implementato sono: • Login: autenticazione e ingresso nell'area privata • Add_mod: aggiunta di un generico modulo, questa a sua volta chiamerà poi la procedura di configurazione del modulo specifico • Configurazione moduli: abbiamo creato le funzioni di configurazione personalizzate per ogni tipo di modulo, il principio di funzionamento è sempre lo stesso, variano i parametri che vengono passati e qui moduli che memorizzano dati sensibili saranno sotto HTTPS • Set_page • Move_mod: memorizzazione del drag & drop dei moduli • Remove_mod: cancellazione modulo • Agg_feed: procedura di aggiornamenti di un feed RSS • Agg_mail: procedura check mail • Logout: uscita dal servizio 66 Andremo ora a descrive nel dettaglio i singoli metodi, dando per assunto che in ogni funzione, a parte il login, dovrà sempre essere considerato il cookie di sessione e che il parametro “user” sarà una costante nelle nostre procedure. 6.2 Login All'atto del login il client manderà i dati sul canale criptato e verranno intercettati dalla nostra funzione. Questa andrà a controllare sul LDAP le credenziali, se corrette andremo poi a recuperare le informazioni sul database che verranno poi restituite al client sotto forma di XML, oltre a questi al client verrà mandata anche la sessione che avremo aperto. In figura 6.1 lo schema delle transizioni dei dati Figura 6.1: schema di principio della funzione login 67 In particolare la funzione ha questo comportamento: innanzi tutto controlliamo user e password su LDAP, se il controllo non riesce la procedura restituisce un false ed esce, altrimenti si va a controllare sul db se l'utente è già presente, in caso affermativo andremo a recuperare i dati relativi al suo ultimo settaggio e li formatteremo in XML secondo il nostro schema ed infine li reinvieremo al client, se, invece, l'utente è alla sua prima visita creeremo la entry nel db e restituiremo un XML di default. Questo comportamento si può chiarire con il diagramma di flusso mostrato in figura 6.2. 68 Figura 6.2: flowchart della funzione login 69 6.3 Add_mod Questa funzione non deve fare altro che creare la entry nella tabella relativa al modulo che si sta inserendo, ed andare a sistemare la tabella sequenze visto il nuovo ingresso, a questo proposito abbiamo convenuto che un nuovo modulo viene aggiunto sempre nello stesso punto ovvero verrà agganciato in coda alla colonna centrale (che sarebbe colonna 2, che da caratteristiche di progetto della applicazione lato client è sicuramente sempre presente). Quindi la nostra funzione necessita dei parametri user, id del modulo (generato lato client al momento della creazione), tipo di modulo. Quanto detto è riassumibile nel diagramma di flusso di figura 6.3: Figura 6.3: flowchart della funzione Add_mod 70 In questo caso la funzione non fa transitare dati sensibili quindi il tutto avverrà sul canale HTTP. 6.4 Configurazione moduli Per quanto riguarda le funzioni di settaggio dei vari moduli abbiamo optato per la costruzione di una diversa funzione per ogni modulo, un po' perchè avremmo comunque fare varie diversificazioni visti diversi dati da immagazzinare per i diversi moduli, e anche per comodità nostra per portare le funzioni che devono archiviare dati sensibili nella directory che andrà sotto HTTPS. A parte le diversità dei dati e l'eventuale canale di trasmissione diverso, il meccanismo è identico per ogni modulo quindi lo descriveremo in modo generico. Avremo bisogno, come variabili in ingresso, dell id utente, l'id del modulo che ci serviranno per identificare univocamente il modulo ed i dati che dovremo settare. Il meccanismo della funzione è molto semplice ovvero non bisognerà fare altro che andare a selezionare nel DB la entry corrispondente ed andare ad inserire i dati che ci hanno passato. Nel diagramma in figura 6.4 mostriamo il flusso dei dati nel caso più complesso ovvero il settaggio del modulo E-mail 71 Figura 6.4: flusso dei dati nella configurazione dei moduli 6.5 Set_page Questa funzione, che serve sostanzialmente a impostare i parametri generali della pagina, accetta come input il titolo, lo stile e il numero di colonne impostati dall'utente; il suo funzionamento altri non è che una update sul database nella tabella utenti, nella riga dell'utente in questione, di parametri passati. Lo schema delle transizioni non si diversifica molto rispetto al caso citato in precedenza se non nel canale su cui avvengono le transizioni dei dati che in questo caso sarà il semplice HTTP. 6.6 Move_mod Ogni qual volta un modulo viene spostato sul client questo manderà una stringa al server per tenere traccia dell'avvenuto spostamento, la stringa, abbiamo convenuto sarà costituita dalla sequenza dei moduli separati da virgola 72 e nel caso siano settate più colonne queste saranno separate dal carattere “:”. se ad esempio ci trovassimo nella situazione descritta in figura 6.5 Figura 6.5: posizione iniziale e trascinassimo il modulo 2_2 come primo elemento della prima colonna come in figura 6.6 73 Figura 6.6: posizione finale la stringa che verrà mandata al server sarà: mod_2_2,mod_1_1,mod_1_2:mod_2_1:mod_3_1,mod_3_2 a questo punto non dovremo fare altro che fare il parsing la stringa andando a scomporre le varie colonne e nelle varie colonne andare a trovare la nuova sequenza dei moduli, una volta fatto ciò si andranno a memorizzare i nuovi valori nella tabella sequenze. Lo schema di principio della funzione è riassunto come in figura 6.7 che descrive il diagramma di flusso: 74 Figura 6.7: flowchart funzione move_mod Anche in questo caso la transizione dei dati avviene sul canale non criptato. Questo sistema, che può sembrare piuttosto astruso, è comunque necessario per poter ricreare l'ambiente che l'utente ha lasciato. È appena il caso di chiarire che l'uso dei cookie non sarebbe efficace perchè questi resterebbero legati alla macchina e quindi non appena cambiassimo dispositivo perderemo completamente l'ambiente settato. 6.7 Remove_mod A causa della struttura che abbiamo dovuto implementare per mantenere traccia del ambite utente anche il meccanismo di rimozione dei moduli è piuttosto complicato: questa funzione, infatti, deve andare a eliminare il modulo vero e proprio ma anche la entry nella tabella sequenze e riaggiornare la 75 sequenza delle posizioni sulla colonna modifica. Il modulo necessita, come parametri d'ingresso, del id del modulo, del tipo di modulo e della colonna in cui vado a sotrarre il modulo; questi parametri sono facilmente recuperabile dall'applicazione client all'atto della chiamata. Vediamo in dettaglio il meccanismo di questa funzione: dai parametri id e tipo possiamo facilmente andare a rimuovere la entry del modulo nella tabella relativa. Per quanto riguarda l'aggiornamento della tabella sequenze abbiamo due possibili alternative: Eliminare la entry del modulo, andare estrarre del DB la sequenza sulla colonna interessata ed infine andare a ricaricare sul DB la sequenza esatta. Estrarre dal DB la sequenza della colonna su un array ed eliminare il modulo dallo stesso tenendo traccia della posizione in cui si trovava il nostro modulo, infine eliminare dal DB le entry del modulo incriminato ed andare ad aggiornare solo le righe dei moduli in coda al nostro. La prima soluzione è sicuramente la più semplice da realizzare, ma a scapito delle prestazioni, infatti questa soluzione prevede di fare una prima query (delete) per eliminare il modulo, una seconda query (select) per estrarre su array la sequenza esatta dai moduli, lo dovremo scorrere per aggiornare aggiornare il campo posizioni, ed infine fare una terza query (update) su tutte le righe della colonna. La seconda soluzione prevede una prima query (select) per estrarre su array la nostra sequenza, una volta ottenuto il nostro vettore lo andremo a scorrere fintanto che non troveremo il record relativo all'elemento da eliminare tenendo traccia della posizione in cui si pone e se è l'ultimo, da questo in poi andremo ad aggiornare le posizioni degli elementi in coda; una volta fatto ciò andremo a fare 76 la seconda query (delete) per eliminare il modulo dal DataBase, infine faremo le terza query (update) solo sulle righe che hanno posizione successiva a quella del modulo eliminato. In questo secondo caso, quindi, la query di update è sicuramente più veloce perchè va ad intaccare un numero inferiore di linee, di più, nel caso in cui il modulo da eliminare questa non andrebbe neppure fatta, il tutto con una parte computativa (scansione e aggiornamento degli elementi del vettore) del tutto paragonabile. Il caso peggiore sarebbe quello in cui l'elemento da cancellare fosse il primo, in questo caso ricadremmo sostanzialmente nella prima soluzione. Per quanto ci riguarda, come per altro si può facilmente evincere, abbiamo scelto la seconda soluzione presentata. In figura 6.8 presentiamo il diagramma di flusso dell'intera procedura per meglio chiarirne il funzionamento. 77 Figura 6.8: flowchart funzione remove_mod 78 6.8 Agg_feed Come già accennato questa funzione ha portato dei problemi riguardanti le comunicazioni tra server, in sostanza il quando si cerca di fornire un contenuto ad una pagina che proviene da terze parti se il server non è ben configurato questo flusso di dati non viene lasciato passare. Il che è dovuto a ovvie problematiche di sicurezza e quindi abbiamo provato a cercare una soluzione alternativa. In questo ci è venuta in aiuto una libreria, magpierss, che ci permette di ottenere il flusso di rss aggirando l'ostacolo sopracitato, in pratica il feed rss viene catturato dal nostro server e rielaborato per essere servito alla pagina, eliminando di fatto il salto su terzo sito. La nostra funzione si compone di due metodi: 1. il primo controlla se l'url del feed è corretto, ovvero se il feed esiste, in caso contrario restituiremo un errore 2. il secondo altro non fa che andare a catturare il feed RSS e parsarlo, in modo da fornire al nostro client un XHTML ben formattato e pronto per essere renderizzato nel browser. Un altra particolarità di questa libreria è che gestisce una piccola cache in cui vengono caricati i feed, in questo modo sono subito pronti e disponibili a essere richiamati. Tutti questi dati viaggiano su canale non criptato. Il flusso dei dati viene schematizzato in figura 6.9: 79 Figura 6.9: flusso dei dati per la funzione di aggiornamento RSS 6.9 Agg_mail Per sviluppare questa funzione abbiamo la necessità del modulo IMAP di PHP, questo modulo non viene caricato di default . Questo modulo dipende dalla libreria c-client, se questa non fosse installata 80 basterà scaricarla dal sito ftp://ftp.cac.washington.edu/imap/ e compilarla, infine per istallare il modulo IMAP di php sarà sufficiente compilare, o ricompilare, PHP con il parametro –with-imap[=DIR] dove DIR è la directory dove è installata la libreria c-client; non richiederà ulteriori configurazioni di runtime, ovvero non si dovranno dare setteggi particolari nel file php.ini. Il modulo IMAP consente di aprire connessioni sicure sia su server IMAP4 che POP3, all'atto dell'apertura basterà indicare che tipo di connessione si vuole, ad esempio se volessimo aprire una connessione IMAP4 sul server di posta dell'Università dovremo scrivere: $mbox=imap_open("{imap.unife.it:143}INBOX","luca","p assword"); se invece volessimo aprire sullo stesso server una connessione POP3 dovremmo scrivere: $mbox=imap_open("{pop3.unife.it:110/pop3}INBOX","luca" ,"password"); per il resto le funzioni della libreria, una volta settata la connessione, saranno del tutto identiche in entrambi i casi. All'atto della chiamata dal client, la nostra procedura andrà a recuperare i dati di connessione sul DataBase user, password, tipo di connessione (imap o pop3) e server, una volta fatto questo si andrà ad aprire la connessione, recupereremo le informazioni che ci serviranno, in particolare la lista dei messaggi e relativo mittente etc., infine andremo a chiudere la connessione. A questo punto non dovremo fare altro che formattare i dati e inviarli al browser per essere renderizzati. La connessione imap verrà aperta in modalità sicura, visto che i dati che transitano sono da considerarsi sensibili. Per rendere più comprensibile il meccanismo proponiamo in figura 6.10 un 81 diagramma di flusso: Figura 6.10: flowchart aggiornamento mail box 6.10 Logout All'atto del logout il sistema non farà altro che chiudere la sessione aperta con 82 il login. Assunto che buona parte degli utenti tende a non sloggarsi ma semplicemente a chiudere la finestra del browser abbiamo dato un tempo di vita della sessione in caso di inattività dell'utente ragionevolmente breve, inoltre si potrebbe tentare, all'atto dello sviluppo lato client a gestire l'evento onUnLoad del Dom in modo che vada a chiamare la funzione di logout e quindi non preoccuparci più di eventuali sessioni lasciate pendenti, il tutto per aumentare il grado di sicurezza dell'applicazione. 6.11 Indipendenza dalla piattaforma Durante la fase di sviluppo abbiamo cercato di mantenerci totalemente indipendenti dalla piattaforma su cui il nostro framework andrà a poggiare. La scelta di PHP come linguaggio segue questa filosofia di programmazione in quanto questo linguaggio è disponibile per tutte le piattaforma, anzi viene spesso distribuito assieme ad apache in molte distribuzioni auto-installanti per Windows, mentre per molte distribuzioni linux viene inserito direttamente nel pacchetto di installazione del sistema, ovviamente attivabile a richiesta. Il fatto stesso che non basiamo nulla della nostra applicazione sul file system sottostante ci garantisce una certa trasportabilità. Noi abbiamo sviluppato il DataBase utilizzando MySQL, per vari motivi, ma ciò non ci vincola grazie alla libreria ADODB, che abbiamo utilizzato per la connessione al DB. ADODB permette di astrarre al programmatore il tipo di DataBase a cui si sta connettendo, questa libreria supporta sia MySQL, che ORACLE che Postgress. Basterà semplicemente specificare, all'atto dell'istanziazione della classe, il db e e parametri di connesione, poi le funzioni che abbiamo sviluppato saranno generali e funzioneranno su ogni tipo dei db menzionati. 83 6.12 Sicurezza dei dati Ci siamo posti il problema della sicurezza dei dati sensibili che transitano tra client e server. La prima soluzione, un po' brutale, che potrebbe essere adottata è quella di portare tutta l'applicazione sotto HTTPS, ovvero una connessione HTTP criptata, ma a nostro avviso potrebbe portare a un carico eccessivo per il server, basti pensare che i moduli RSS e posta richiedono un aggiornamento periodico e questo comporta una connessione criptata per ognuno di questi, per ogni utente. Un altra possibilità sarebbe quella di fare una doppia cifratura con chiave pubblica e privata dei dati sensibili, usando ad esempio l'algoritmo MD5, direttamente lato client; anche in questo caso però riteniamo che questa soluzione vada a caricare eccessivamente l'applicazione rendendola poco fluida e quindi poco usabile. La nostra decisione è stata quella di usare HTTPS solo nei casi in cui strettamente necessario, mentre il resto dell'applicazione andrà sotto una semplice connessione HTTP. Abbiamo identificato fondamentalmente due momenti in cui abbiamo una trasmissione di dati sensibili e che quindi andranno criptati: • all'atto del login • durante la configurazione di moduli che necessitano autenticazione, come ad esempio il modulo posta Configureremo quindi il server in modo che le funzioni che realizzano queste operazioni vadano sotto il canale protetto. Sempre a proposito di sicurezza, all'atto del login assegneremo un cookie di sessione, il che aumenta il grado di sicurezza del sistema. 84 6.13 Servizi Unife I servizi on line offerti dal nostro Ateneo sui cui possiamo agire sono essere: • Elenco Telefono/E-mail • Esami • News di Ateneo Attualmente questi servizi, a parte la posta elettronica, si basano sul linguaggio di programmazione server side PHP, si appoggiano su database ORACLE e restituiscono un semplice HTML 4.01 transitional, dovremo, allora, cercare di dare un valore aggiunto a questi servizi rendendoli aggregabili. In particolare abbiamo creato le funzioni per generare i feed RSS per le news di ateneo e per gli appelli d'esame. Inoltre abbiamo creato la base per il meccanismo di ricerca integrata nella nostra applicazione e per la memorizzazione di questi in rubrica. 85 Capitolo 7: Conclusioni Concludendo siamo partiti da una nuova filosofia della fruizione del Web che si sta facendo sempre più avanti sia nelle comunità di sviluppatori che nei semplici utenti, da questa abbiamo fatto nostri i concetti fondamentali. Abbiamo studiato la situazione del nostro ateneo in questa nuova chiave e abbiamo costruito un progetto per aggregare in un unica applicazione tutti i servizi on line offerti dall'unife e non solo, ipotizzando la costruzione di un Web desktop. Ci siamo posti il problema delle tecnologie scegliendo quelle che attualmente permettono un maggiore sviluppo e flessibilità Da queste tecnologie siamo partiti per l'implementazione della parte server della nostra applicazione. Come primo passo abbiamo strutturato i dati in modo da poterli passare in modo asincrono tra server e client. Abbiamo implementato il database per la memorizzazione degli stati dei desktop utente. Nell'implementazione dell'autenticazione abbiamo fatto particolare attenzione alla sicurezza dei dati sfruttando le sessioni e i cookie. Infine abbiamo implementato tutte le funzioni lato server che serviranno per l'interrogazione e l'update del database. 86 Capitolo 8: Applicazioni future Allo stato attuale, per completare le fasi di progetto, bisognerà implementare le funzioni lato client e in particolare tutte le funzioni che permettano all'utente di personalizzare il proprio Web desktop, inoltre bisognerà, sempre lato client, implementare l'engine per le comunicazioni con l'application server. Questo engine dovrà andare a fare le richieste al server e parsare le risposte per poterle poi mostrare all'utente. Fatto ciò si potranno andare ad incorporare le funzioni che si desiderano. Vi è da notare che visto il concetto di costante beta insito nel paradigma del Web 2.0 non vi sarà mai limite alle applicazioni e alle personalizzazioni possibili. 87 Bibliografia Note Bibliografiche [VNB 01] Vannevar Bush, As We May Think, Atlantic Mounthly, 1945 [DL 01] Legge 9 gennaio 2004, n. 4 "Disposizioni per favorire l’accesso dei soggetti disabili agli strumenti informatici" (G.U. 17 gennaio 2004, n. 13) [DM 01] DM 8 Luglio 2005 "Requisiti tecnici e i diversi livelli per l'accessibilità agli strumenti informatici" (G.U. 8 agosto 2005, n. 183) [ORY 01] Tim O'Reilly, http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web20.html [ORY 02] Tim O'Reilly, http://www.oreillynet.com/pub/a/oreilly/tim/news/2005/09/30/what-is-web20.html [W3C 01] W3C, XML,http://www.w3.org/XML/ [W3C 02] W3C, WAI, http://www.w3.org/WAI/ [W3C 03] W3C, WCAG 1.0, http://www.w3.org/TR/WAI-WEBCONTENT/ [W3C 04] W3C, WCAG 2.0, http://www.w3.org/TR/WCAG20/ Sitografia [WIL 01] Windows live, http://www.live.com [WTL 01] Writely, http://www.writely.com [DEL 01] Delicious, http://del.icio.us [FLR 01] FlickR, http://www.flickr.com 88 [NVB 01] Netvibes, http://www.netvibes.com [GOG 01] Google Maps, http://maps.google.com [GOG 02] Google pagina personale, http://www.google.it/ig?hl=it [GOG 03] Google pages, http://pages.google.com Testi di riferimento Dave Crane, Eric Pastello, Darren James, Ajax in Action, Manning Publication, 2005 Eric van der Vlist, XML Schema, O'Reilly, 2002 89 Ringraziamenti Ringrazio innanzi tutto Chiara per tutto il sostegno che mi ha dato in questi anni, i miei genitori e mio fratello per il tempo che mi hanno concesso e per la pazienza che hanno avuto. Vorrei ringraziare il mio relatore il Prof. Stefanelli per il supporto e l'aiuto che mi ha dato per il lavoro fatto. Una menzione particolare ai ragazzi della squadra di canoa polo del canoa club Ferrara, con i quali ho passato dei bellissimi momenti, comprese le sconfitte che sono fioccate nelle ultime stagioni. I ragazzi della Pizzeria Portamare: Chicco, Giulio, Max, Vito, i portapizze e personaggi vari che vi hanno transitato in questi anni. Ultimi ma non per importanza devo ringraziare i miei vecchi compagni di Università: Denis, Zanna, Mario, il Bestia, Gnappa e tutti gli altri con i quali ho passato anni bellissimi. 90