Relazione di Tirocinio
SuperAdmin ............................................................................................................. 26
Gestione ...................................................................................................................................... 27
Admin ...................................................................................................................... 30
Gestione comprensorio ............................................................................................................... 32
Gestione scuola ........................................................................................................................... 34
Gestione utenti ............................................................................................................................ 34
Gestione scuola (Didattica) ......................................................................................................... 35
Gestione comunicazioni .............................................................................................................. 37
Insegnante ............................................................................................................... 39
Registro di classe ......................................................................................................................... 41
Registro personale ....................................................................................................................... 46
Supplenze .................................................................................................................................... 49
Studente .................................................................................................................. 50
Materie ........................................................................................................................................ 51
Bibliografia .......................................................................................... 67
Riferimenti GWT ....................................................................................................... 67
Riferimenti JDO ........................................................................................................ 67
Riferimenti Cloud Computing .................................................................................... 67
Sitografia .............................................................................................. 69
Indice delle figure .............................................................................. 71
Indice .................................................................................................... 73
Appendici: strumenti utilizzati....................................................... 75
Google Web Toolkit (GWT) ....................................................................................... 76
Il compilatore Java-to-JavaScript..................................................................................................76
GWT Shell e Hosted Mode Browser .............................................................................................78
Librerie Grafiche per il Web: i Widget ..........................................................................................78
Comunicare con il server ..............................................................................................................79
Anatomia di un’applicazione GWT ...............................................................................................80
JSON ........................................................................................................................ 81
Utilizzare JSON in GWT .................................................................................................................83
Ringraziamenti ................................................................................... 93
Cap.1
Introduzione
Lo stage si è svolto nell’ambito della collaborazione tra l’Università degli Studi di Torino e
l’azienda di sviluppo e consulenza informatica Bnc s.p.a..
Obiettivo
L’obiettivo del progetto OvunqueScuola è lo sviluppo di un’applicazione web per la
gestione di scuole che sfrutti le recenti opportunità offerte dal Cloud Computing ed in
particolare dalle infrastrutture hardware e software di Google.
L’idea
L’idea del progetto è nata dall’opportunità di far fronte a problematiche nella gestione
delle scuole. Attualmente, infatti, il sistema di gestione produce una gran quantità di
documentazione cartacea che rende spesso necessario replicare più volte lo stesso dato in
documenti diversi. Questo porta a delle inefficienze legate sia alla necessità di dover
trascrivere manualmente la stessa informazione in più posti, sia alla possibilità che si creino
delle inconsistenze tra le varie versioni documentarie.
Oltre a questo si è notato che un sistema informatizzato potrebbe rendere più efficace e
agevole la comunicazione tra scuola, genitori e studenti.
Da queste idee abbiamo poi analizzato altre problematiche relative alla gestione e alla
comunicazione e come queste si sarebbero potute ridurre, se non risolvere, con un sistema di
tipo informatico. La tabella seguente mostra un’analisi ad alto livello dello stato attuale di
gestione, tradizionale, e un’ipotesi di gestione attraverso un sistema informativo.
Quando lo studente riceve un voto lo scrive Il voto viene registrato una sola volta nel
sul diario ma non ha una visione generale sistema e lo studente può visualizzare tutti i
dell’andamento scolastico. voti divisi per materia con le medie e una
5
Capitolo 1
serie di grafici.
Comunicazioni scuola-genitori
TRADIZIONALE INFORMATIZZATA
La segreteria invia una circolare che viene La segreteria pubblica l’avviso sul sistema,
fatta girare in tutte le classi, gli studenti questo invia un messaggio ai destinatari
riportano il testo sul diario e lo fanno selezionati, singolarmente o per gruppi di
leggere ai genitori. utenza (ad esempio a tutti i genitori di una
classe).
Promemoria
TRADIZIONALE INFORMATIZZATA
Studenti e professori gestiscono con Il sistema crea dei promemoria per
registri, diari e documenti cartacei le verifiche e interrogazioni programmate, sia
interrogazioni e le verifiche programmate. per gli alunni che per i professori.
Statistiche
TRADIZIONALE INFORMATIZZATA
Il sistema cartaceo rende difficile calcolare Il sistema mette a disposizione il pannello
delle statistiche sui dati. delle statistiche in cui è possibile creare dei
report su voti, assenze e altri dati
disponibili.
6
Introduzione
Al fine di svolgere un buon lavoro, per la parte grafica del nostro progetto ci siamo ispirati ai
layout e ai contenuti dei registri di classe ed ai registri personali dei professori.
7
Capitolo 1
8
Introduzione
Il progetto OvunqueScuola
Il progetto nasce perciò come sistema di gestione per le scuole accessibile da web e ospitato
su un’architettura di tipo Cloud, descritta nel dettaglio più avanti.
Per ogni tipologia sono state individuate delle funzionalità caratteristiche, in particolare:
9
Capitolo 1
Dalla pagina principale l’utente può autenticarsi oppure scegliere la scuola d’interesse
attraverso un menù a tendina e visualizzare così gli avvisi generali relativi a quella scuola: ad
esempio chiusure straordinarie, cambiamenti di orario, ecc…
Dalle suddette pagine principali, ogni utente può accedere alle funzionalità messe per lui a
disposizione dal sistema. La struttura delle pagine è uguale per tutti gli utenti ed è suddivisa
in tre aree principali:
Per rendere più agevole la navigazione e l’usabilità del sito sono stati adottati degli
accorgimenti. Al fine di utilizzare al massimo l’area disponibile per l’applicazione sono stati
ridotti al minimo gli spazi vuoti tra i vari elementi della pagina, mantenendo comunque
una disposizione strutturata per permettere di trovare agevolmente le diverse funzionalità.
Inoltre l’intestazione cambia dimensione dalla pagina principale rispetto a quella specifica di
un tipo d’utenza; nella pagina principale è più alta, per identificare immediatamente il sito e
il nome del servizio, mentre nelle pagine specifiche si abbassa per lasciare posto ai contenuti
e agli elementi dell’applicazione.
Le fasi di progettazione
Il progetto è stato avviato a Luglio 2009 ed è tuttora in corso. Lo sviluppo si è svolto in
diverse fasi.
Inizialmente si sono svolti degli incontri con il relatore e i tutor aziendali in cui si sono
definiti gli obiettivi, le specifiche del progetto e una prima panoramica generale degli
strumenti da utilizzare. Nel corso degli incontri si sono definiti meglio gli obiettivi e i
10
Introduzione
Le prime due settimane sono state dedicate all’approccio con gli strumenti e con le librerie
che sono state utilizzate nel progetto. Lo studio di questi strumenti è stato seguito dai tutor ed
è avvenuto principalmente per mezzo di libri/manuali[1-7] e tutorial, tra cui quelli ufficiali
forniti dalla stessa Google[w1].
La fase successiva è stata lo sviluppo vero e proprio che ha riguardato l’analisi dei requisiti,
lo sviluppo completo dell’interfaccia grafica e l’inizio dell’implementazione delle
funzionalità di backend.
Allo stato attuale il progetto è completo per quanto riguarda l’interfaccia grafica e la
navigazione nelle pagine. Per la parte del backend sono state implementate tutte le
funzionalità ad eccezione di quelle relative alla gestione del registro di classe e dei corsi. E’
inoltre stato fatto il deploy su Appengine della parte già sviluppata.
Ambiente di sviluppo
Sistema operativo
Il progetto è stato sviluppato su due macchine con sistemi operativi differenti, Ubuntu 9.04
e Mac Os X 10.5.8. Nonostante questa differenza non si è riscontrato alcun problema di
compatibilità tra i due sistemi. Questo grazie alla scelta di utilizzare Java come linguaggio di
programmazione e lo stesso framework disponibile per i due sistemi operativi.
Linguaggio di programmazione
Si è scelto di usare Java. Questa scelta è derivata principalmente da tre motivazioni. La
prima è che Java, insieme a Python, è uno dei due soli linguaggi per cui sono disponibili le
librerie GWT. In secondo luogo, sia noi che i tutor aziendali, avevamo già una certa
esperienza con questo linguaggio, abbiamo potuto quindi dedicare più tempo allo studio
della libreria e alla metodologia di sviluppo dell’applicazione anziché all’aspetto più tecnico
del linguaggio implementativo. Infine si è scelto Java per la moltitudine di librerie open
source che sono messe gratuitamente a disposizione online da altri sviluppatori.
Framework
Abbiamo utilizzato Eclipse[w2], in particolare la versione Galileo (nei primi mesi abbiamo
utilizzato la precedente versione Ganimede, per problemi di incompatibilità con i plugin). La
scelta di questo framework è derivata principalmente dal fatto che si integra facilmente con
la libreria GWT tramite un plugin fornito dalla stessa Google. Oltre a questa motivazione
principale ve ne sono altre, comunque significative. La prima è che questo framework è open
source e, essendo un progetto nato da diversi anni e molto utilizzato, offre allo stato attuale
una notevole robustezza. Inoltre, per Eclipse, sono disponibili numerosi tools che rendono
più agevole la programmazione, lasciando più tempo da dedicare agli aspetti di
progettazione. Un’ulteriore aspetto che ha determinato la scelta di questo framework è che
11
Capitolo 1
Figura 4: l'ambiente
ambiente di sviluppo Eclipse sul sistema operativo MacOs X
Software di versionamento
Sviluppando
viluppando in team è nata la necessità di utilizzare uno strumento per sincronizzare il
nostro lavoro. A tale scopo abbiamo utilizzato SVN Subversive[w3],[w3], plugin fornito da
eclipse e quindi completamente integrato nel framework, con l’aggiunta del Connectors di
Polarion[w4]. Questo sistema ci ha permesso di lavorare in parallelo al progetto senza il
problema di avere versioni differenti
differenti sui due computer e potendo lavorare anche a distanza
con una versione sempre consistente e aggiornata del progetto.
12
Cap.2
Analisi funzionale
Analizzando l’alto numero di requisiti per il tempo a nostra disposizione, si è deciso di
realizzare OvunqueScuola come prototipo evolutivo, puntando ad incrementare la velocità
di fornitura del prodotto per fornire un’applicazione, anche se inizialmente dimostrativa, da
mostrare a possibili clienti, quali presidi, personale delle segreterie didattiche e professori.
Adottando questo metodo, siamo stati in grado di valutare a fondo le reazioni e le esigenze
degli utenti destinatari del prodotto.
Abbiamo perciò affrontato il problema partendo dalla parte grafica (utilizzando Google Web
Toolkit) e fissato obiettivi intermedi per concentrarci di volta in volta su parti specifiche.
Contemporaneamente abbiamo costruito, giorno dopo giorno, la struttura della base di dati
che deve sostenere la logica applicativa.
Per quanto riguarda la parte grafica, abbiamo deciso di dividere la pagina web in 3 parti:
Come possiamo vedere, un utente, appena si collega al sistema, può consultare la bacheca
pubblica di tutte le scuole registrate nel sistema ed effettuare il login. Per consultare la
bacheca deve inserire i dati relativi alla scuola e il sistema, dopo aver effettuato la ricerca, gli
fornisce le comunicazioni globali pubbliche.
13
Capitolo 2
Effettuando il login invece, in caso di successo (utente registrato) l’utente viene reindirizzato
all’homepage relativa al gruppo a cui appartiene. Utente registrato è quindi una
generalizzazione esclusiva di superadmin, admin, insegnante, studente e genitore.
Proseguendo con l’analisi, riscontriamo i seguenti casi d’uso in comune per tutti i tipi di
utenti registrati:
14
Analisi funzionale
Come si può osservare, ogni utente registrato deve essere in grado di:
15
Capitolo 2
A seguito di vari incontri con i tutor e dopo aver ricevuto feedback da esperti del settore,
abbiamo creato questa versione del diagramma preliminare delle classi:
16
Analisi funzionale
17
Capitolo 2
In particolare, si può notare che la gerarchizzazione tra i vari tipi di persone e la superclasse
Persona è stata eliminata, lasciando soltanto le classi concrete (cioè eliminando la
superclasse spostando i propri attributi nelle sottoclassi). Questo perché ogni classe riferita
ad un particolare tipo di utenza ha associazioni con classi differenti.
Allo stesso modo sono state eliminate anche le gerarchizzazioni sui Giudizi (VotoVerifica e
VotoInterrogazione), sulle Comunicazioni (ComGlobali, ComGruppo e ComPersonali) e sui
RapportiDisciplinari (DiClasse e Personali).
E’ stata introdotta la classe Materia che, come la classe TipoUtente, diventerà sul database
una tabella con contenuti statici.
Allo stesso modo è stato eliminato il contenitore Registro, lasciando solamente la classe
RecordRegistro (rinominata in Registro); ogni suo record conterrà i dati del registro di classe
relativi ad una particolare ora (ad esempio, se una classe segue ogni giorno 6 ore di lezione,
possederà 6 record per giorno).
La relazione molti-a-molti tra Studenti e Genitori è stata semplificata con una classe
aggiuntiva, chiamata Parentela.
Anche la relazione molti-a-molti tra Corso e Orario è stata semplificata con un’ulteriore
classe, chiamata OrarioLezione che conterrà un record per ogni ora di lezione settimanale dei
corsi (ad esempio, se un corso deve essere seguito per 3 ore scolastiche alla settimana,
possederà 3 record nella tabella relativa).
Durante una particolare fase dell’analisi, abbiamo individuato che esistono due tipi di
supplenze: giornaliere e lunghe (spiegate in dettaglio nell’analisi dell’insegnante). Dal punto
di vista del database, abbiamo deciso di conservare una sola classe e non due, trasformando
perciò l’intera gerarchia di classi in una singola tabella “superclasse” contenente tutti gli
attributi (ovviamente, in un caso o nell’altro, i record conterranno dei valori nulli).
Nella classe Login si può osservare la presenza di un attributo password; questo attributo non
conterrà direttamente la password inserita al momento della registrazione (quindi “in
chiaro”), ma per ragioni di sicurezza conterrà un hash della stessa. Di conseguenza, i
controlli nella logica applicativa verranno effettuati sugli hash e non sulle password in
chiaro.
18
Analisi funzionale
Per rispettare quanto più possibile il modello MVC, abbiamo inserito la parte relativa al
pattern model e al pattern view nel package “client” e quella relativa al pattern control nel
package “server”. In particolare, nelle sotto-cartelle del package client abbiamo:
in model, le classi del pattern che mappano il nostro database e, per ognuna
di esse, un’altra classe con le istruzioni JSNI per la deserializzazione dei dati
JSON ricevuti dal server;
in service, le interfacce degli oggetti relativi al control, utilizzate per le
chiamate asincrone alle servlet del server;
in view, le classi del pattern che creano l’interfaccia grafica
dell’applicazione.
in dao, le classi del pattern per eseguire le operazioni atomiche sugli oggetti
del database, una per ogni classe contenuta nel model;
19
Capitolo 2
Funzionalità generali
Come per l’homepage di benvenuto di OvunqueScuola (disponibile per tutti gli utenti), per
gli utenti registrati viene mantenuto, in tutta l’applicazione, il layout con in alto l’header, a
sinistra il menu e a destra/centro il content.
Per quanto riguarda il menu, nella parte in alto saranno visibili le informazioni riguardanti il
proprio profilo (nome e immagine avatar) e il login (bottone per eseguire il LogOut). Subito
sotto, verrà posto l’elenco delle funzionalità disponibili per il proprio profilo utente, che gli
permetteranno di accedere ai relativi contenuti, inseriti di volta in volta nel content.
Ora vediamo in dettaglio come funziona il LogIn e quali sono le funzioni disponibili per tutti
i tipi di utenti registrati.
Login
Durante il modo d’uso “Effettuare il login”, il sistema controlla tramite il database i dati
inseriti dall’utente generico (username e password) e, in caso ci si trovi di fronte ad un utente
registrato, lo ridirige nella homepage relativa al gruppo di appartenenza. In questa fase,
vengono anche inviati dal server alcuni dati relativi al contesto in cui l’utente si trova, per
poter accedere in qualsiasi momento, ma soprattutto in qualunque parte del codice client-
side, alle informazioni relative all’utente loggato. Queste informazioni includono username,
codice identificativo, gruppo ed eventuali domini e sottodomini di appartenenza dell’utente
stesso.
Attori Utente
Flusso Principale Dal lato client parte una richiesta asincrona alla servlet AuthServiceImpl
che controlla la presenza dell’utente nel database (Login). In base al suo
gruppo di appartenenza (SuperAdmin, Admin, Insegnante, Studente o
Genitore), vengono ricercate nel database le informazioni relative al
proprio “contesto” e inviate al lato client.
20
Analisi funzionale
Flussi Alternativi Se l’utente non è presente nel database (utente non registrato), viene
segnalato l’errore.
È interessante osservare attentamente il diagramma di sequenza per questo caso d’uso per
comprendere a fondo come client e server interagiscono tra di loro.
Come descritto anche nell’analisi delle singole classi, siccome per ragioni di sicurezza nel
database viene salvato l’hash (SHA-1) delle password degli utenti, anche i controlli vengono
effettuati confrontando gli hash.
Calendario
Ogni utente registrato ha la possibilità di consultare il calendario con le proprie note
annotate. Inoltre, in base al gruppo di appartenenza, ogni utente visualizza altre informazioni
utili alla vita scolastica, come descritto qui di seguito:
21
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
22
Analisi funzionale
Tutte le comunicazioni provengono solo ed esclusivamente dagli utenti admin della propria
scuola accedendo al relativo pannello di
amministrazione. Per quanto riguarda le
comunicazioni personali, oltre ad
includere quelle ufficiali come
dichiarazioni di sospensioni, richiami
all’ordine o altre simili, includono anche
quelle ufficiose di risposta alle richieste
effettuate dai singoli utenti insegnanti,
studenti o genitori. Questi particolari
utenti possono effettuare richieste dal
pannello di gestione dei messaggi
descritto qui di seguito.
Messaggi
Un’altra importantissima funzionalità per gli utenti registrati è l’invio e la ricezione di
messaggi email-like; il relativo pannello è diviso in tab, il primo contenente la “Gestione
Posta” e i successivi offrono la possibilità di inviare messaggi scegliendo il destinatario tra i
vari gruppi di utenze.
La “Gestione Posta” consiste in un Widget StackPanel per dividere la posta “In Arrivo”,
quella in “Archivio” e i “Messaggi Inviati”. L’elenco dei messaggi è inserito in tabelle
paginate in cui vengono visualizzati i dati salienti del messaggio e vi è la possibilità di
archiviare o cancellare il messaggio (nella posta in arrivo) oppure solamente cancellarlo
(nella posta archiviata). È da notare anche l’intuitività nella parte grafica per quanto riguarda
i messaggi ancora non letti: infatti nella posta in arrivo si differenziato da quelli letti grazie ai
dati visualizzati in grassetto mentre, nella posta inviata, si riconoscono dalle icone poste al
fondo di ciascuna riga. Inoltre, premendo su una qualunque riga, viene aperto un pop-up
contenente i dati completi del messaggio; per la posta ricevuta è possibile anche rispondere
direttamente al messaggio premendo sull’opportuno pulsante all’interno del pop-up.
23
Capitolo 2
Per inviare i messaggi ad una particolare persona è inoltre possibile farlo dai successivi tab,
che contengono, divisi per gruppo di appartenenza, gli utenti disponibili in base al proprio
contesto (e gruppo di appartenenza):
24
Analisi funzionale
Gli studenti e i genitori non possono comunicare tra di loro anche se facenti parte dello
stesso contesto “classe”, per evitare di creare situazioni illegali quali la pedofilia.
Inoltre, tra genitori di figli appartenenti alla medesima classe si può comunicare solo se
accettano espressamente di farlo. Verrà sviluppato più dettagliatamente nell’analisi
dell’utente Genitore.
Appunti
Come per il calendario, è possibile per gli utenti registrati prendersi delle note; in questo
caso non sono legate ad un particolare orario, ma alle materie. Dal relativo pannello di
gestione è possibile perciò crearne di nuove e visualizzare, modificare e cancellare quelle già
presenti.
All’apertura della pagina, vengono visualizzati tutti i propri appunti in una tabella paginata:
in ogni riga sono presenti i dati salienti della nota (come titolo, ultima modifica e materia di
riferimento) e un bottone per eliminarla; premendo su una qualunque riga, viene aperto un
nuovo tab in cui è possibile modificare l’appunto.
25
Capitolo 2
Faq
Come in ogni applicazione che si
rispetti ci deve essere un “help” o delle
“Frequently Asked Question” a cui ci si
può affidare in caso di dubbi o
problemi. In OvunqueScuola ci saranno
delle F.A.Q., suddivise in base
all’utenza che le richiede, sull’utilizzo
dell’applicazione e sui principali dubbi
che potrebbero sorgere alle persone che
la utilizzano.
SuperAdmin
L’homepage relativa al superadmin si apre con un riassunto settimanale delle proprie note
sul calendario, posto nel content. Nel menu di sinistra, oltre la voce principale (“HOME”),
troviamo, in ordine, bottoni per accedere alla gestione completa del proprio calendario
(“Calendario”), alla gestione di admin e comprensori (“Gestione”), alla gestione dei propri
appunti (“Appunti”), all’invio e alla ricezione di messaggi email-like (“Messaggi”) e alla
consultazione delle domande/risposte frequenti (“FAQ”).
26
Analisi funzionale
Gestione
La funzionalità più importante per il superadmin è la gestione degli admin, dei comprensori e
delle associazioni tra di essi. La pagina che si apre alla pressione del bottone del menu
“Gestione” è principalmente formata da due tab, in cui gestire rispettivamente Comprensori e
Admin. In entrambi, il contenuto grafico è pressoché uguale, in modo da creare un senso di
omogeneità e coerenza; sono 3 oggetti disposti verticalmente nel seguente ordine: maschera
di ricerca, bottone per l’inserimento di un nuovo oggetto e tabella paginata contente i risultati
dell’interrogazione al database con alcuni bottoni per ogni riga per effettuare modifiche sul
relativo oggetto.
27
Capitolo 2
Nel contesto “admin”, similmente, si possono effettuare ricerche per corrispondenza univoca
dell’identificativo dell’admin o del cap oppure per corrispondenza parziale del codice
fiscale, del cognome o del nome. I risultati dell’interrogazione al database vengono inseriti
quindi in una tabella paginata contenente, in ogni riga, il cognome e il nome dell’admin e
una serie di bottoni per l’assegnazione, la modifica e la cancellazione dell’admin stesso.
Attori superadmin
28
Analisi funzionale
Come si può vedere, dal codice del pattern “view” lato client (cioè dall’oggetto/classe
SuperAdminPanel) parte una connessione asincrona verso il server, più precisamente verso
la servlet AssociazioniServiceImpl che effettua 4 chiamate a due oggetti del pattern “dao”
che eseguono operazioni atomiche sul database. Le operazioni richieste sono:
29
Capitolo 2
Intanto, subito dopo la chiamata, prosegue l’esecuzione del codice del pattern “view” che
visualizza pop-up indicante la connessione al database in corso. Appena giunge una risposta
dal server, viene chiuso il pop-up e, in caso di successo, viene visualizzata la corretta
associazione, altrimenti viene segnalato il tipo di errore riscontrato.
Admin
L’homepage relativa all’admin si apre con un riassunto delle ultime comunicazioni ufficiali
della segreteria e una vista settimanale delle proprie note sul calendario, posti nel content.
Nel menu di sinistra, oltre la voce principale (“HOME”), troviamo, in ordine, bottoni per
accedere alla gestione completa del proprio calendario (“Calendario”), alla gestione del
comprensorio e delle scuole (“No domain” se l’admin non è associato a nessun
comprensorio o “<nome-comprensorio>” se l’admin è associato), alla visualizzazione delle
comunicazioni ufficiali ricevute (“Comunicazioni”), alla gestione dei propri appunti
(“Appunti”), all’invio e alla ricezione di messaggi email-like (“Messaggi”) e alla
consultazione delle domande/risposte frequenti (“FAQ”).
30
Analisi funzionale
Come accennato in precedenza, durante la creazione del pannello menu, vengono effettuate
delle chiamate asincrone per la creazione del bottone relativo al comprensorio a cui l’admin
è associato. Se non è associato ad alcun comprensorio, verrà visualizzato un bottone
disabilitato contenente tale informazione (ad esempio “No domain”). Se invece è associato
ad un comprensorio, verrà creato un un Widget di tipo DisclosurePanel (vedi immagine a
lato) nella cui intestazione sarà visualizzato il nome del comprensorio; all’interno di questo
31
Capitolo 2
pannello ci sarà un elenco contenente, come prima voce, un bottone “Generale” (dal quale si
accede alla gestione del comprensorio) e tanti bottoni quante sono le scuole associate al
comprensorio stesso (dai quali si accede alla gestione della scuola a cui fa riferimento).
Ovviamente, se non ci sono scuole associate, il pannello conterrà solamente il bottone
“Generale”.
Gestione comprensorio
Una delle funzioni principali di un utente admin è sicuramente quella di poter gestire il
proprio comprensorio di scuole. Premendo
l’apposito pulsante del menu (“Generale”,
all’interno del pannello con il nome del
proprio comprensorio), si apre nel content un
TabPanel, in cui si possono notare 4 tab:
Scuole, Amministratori, Statistiche, Stampe.
32
Analisi funzionale
Nel tab “Amministratori”, si trova il pannello di gestione degli admin. È molto simile a
quello del superadmin, con la differenza che non è possibile assegnare un admin ad un
comprensorio diverso da quello del contesto dell’utente admin che sta visualizzando la
pagina. Infatti, quando si crea un nuovo oggetto Admin, esso viene creato già associato al
comprensorio del contesto. Analogamente, anche le ricerche (e di conseguenza modifiche e
cancellazioni) vengono effettuate automaticamente filtrando solo ed esclusivamente gli
oggetti che appartengono al dominio (o comprensorio) del contesto.
Ad esempio, controllare i voti di una classe per un certo professore è utile al fine di rilevare
un eventuale approccio alla didattica errato da parte dell’insegnante; infatti, avere la quasi
totalità degli studenti con voti troppo alti o troppo bassi, potrebbe essere sintomo di un
estremo buonismo nell’assegnazione dei voti stessi o di una carenza in materia di
insegnamento.
Graficamente abbiamo deciso di utilizzare un Widget StackPanel per poter navigare tra i vari
tipi di statistiche e di utilizzare un tipo di grafico, fornito online da Google, per la
visualizzazione dei risultati delle interrogazioni al database.
33
Capitolo 2
Dall’incontro è emerso anche il fatto che, a fine anno, la segreteria didattica debba stampare
su carta tutti i registri di classe e quelli personali dei professori. Per risolvere questo
problema, all’interno del tab “Stampe” è possibile creare file pdf stampabili dei registri di
classe e dei professori; in aggiunta è possibile crearli anche sulla base di altre viste, come ad
esempio l’elenco delle assenza per ogni alunno e così via.
Gestione scuola
La gestione di una singola scuola è il punto fondamentale per un utente admin. Come
osservato nel diagramma dei casi d’uso, si può suddividere in 3 macro funzionalità: la
gestione degli utenti, la gestione didattica della scuola e la gestione delle comunicazioni
ufficiali. Bisogna tenere presente che tutte le funzionalità che mostreremo in dettaglio in
seguito faranno riferimento ad un contesto Scuola, relativo al pulsante del menu premuto:
infatti, entrando nella gestione di una particolare scuola, tutte le comunicazioni, gli utenti o
qualsiasi altro oggetto che si andrà a manipolare farà riferimento ad essa.
Gestione utenti
Gli utenti, relativi ad una specifica scuola, che un admin può gestire sono gli insegnanti, gli
studenti e i genitori di quest’ultimi.
La pagina è suddivisa, come visto in precedenza per altri tipi di gestione, in 3 tab, ognuna
delle quali con il layout generale descritto in precedenza, ossia maschera di ricerca, pulsante
per creare un nuovo oggetto e tabella paginata per i risultati dell’interrogazione al database.
Per tutti è possibile effettuare una ricerca sugli attributi principali, cioè codice identificativo,
codice fiscale, cognome, nome e cap, con un filtro basato sull’abilitazione. Sui rispettivi
risultati è possibile eseguire classiche operazioni di modifica e disabilitazione/riabilitazione.
34
Analisi funzionale
Sia sugli studenti che sui genitori è inoltre possibile gestire le parentele che li accomunano,
abilitando così all’utente genitore quelle funzioni che gli permettono di esaminare
l’andamento scolastico del proprio figlio. Quest’assegnazione viene fatta inserendo il codice
fiscale del genitore (in caso di gestione dello studente) o il codice fiscale dello studente (in
caso di gestione del genitore).
Per quanto riguarda lo studente, è inoltre possibile applicare un ulteriore filtro sulle ricerche,
cioè l’eventuale assegnazione ad una classe. In caso non si applichi il filtro, sono comunque
facilmente individuabili gli studenti senza classe rispetto agli altri, grazie ad una piccola e
intuitiva icona posta nella relativa riga della tabella.
35
Capitolo 2
Le materie che gli studenti di una classe devono seguire, in OvunqueScuola prendono il
nome di “corsi”, mettendo in relazione classi, materie, professori e orari di lezione. Infatti,
durante la creazione, bisogna specificare tutti questi attributi, eccetto gli orari di lezione.
Nella modifica “classica”, si potranno modificare le classi, i professori e le materie relative
al corso; invece, per modificare gli orari di lezioni, occorre premere il relativo pulsante.
Questa divisione deriva dal fatto che, ad inizio anno, quando un admin crea le classi ed i
corsi nella base di dati, può non avere ancora deciso i relativi orari di lezione, permettendo
così di aggiornarli in un secondo momento, a situazione delineata.
Un’altra importante funzionalità è quella di poter gestire le supplenze. Come abbiamo visto
nella descrizione dettagliata delle classi, ne esistono di due tipi: giornaliere e lunghe. Nel
pannello di gestione vengono ricercate e visualizzate utilizzando le stesse maschere, ma
gestite (durante la modifica) ovviamente in modo differente. Vengono gestite
differentemente anche nella creazione di un nuovo oggetto Supplenza. Come si può inoltre
notare, la grafica è molta intuitiva nel differenziare i due tipi di supplenze nella tabella con i
risultati dell’interrogazione al database.
36
Analisi funzionale
All’inizio dell’anno scolastico un admin deve anche sistemare l’orario scolastico, in quanto
ogni scuola ha il proprio. Questo orario scolastico potrà essere modificabile durante tutto il
resto dell’anno, con conseguente ripercussioni sugli orari delle lezioni e sul layout del
calendario degli utenti collegati direttamente alla scuola (insegnanti, studenti e genitori).
Gestione comunicazioni
Tutta la segreteria didattica, il preside e gli altri suoi collaboratori devono essere in grado di
inviare comunicazioni ufficiali. Ne esistono di 3 tipi: globali, per gruppo di appartenenza e
37
Capitolo 2
personali, tutte indirizzate agli utenti nel contesto della scuola. L’interfaccia grafica è divisa
perciò in 3 tab, una per tipo, in cui sono inserite le comunicazioni in tabelle paginate che
visualizzano i dettagli principali e i bottoni per le relative modifiche e cancellazioni.
Per quanto riguarda le comunicazioni personali, nella tabella sono state inserite anche le
richieste che gli utenti della scuola hanno effettuato verso la segreteria didattica, dando così
la possibilità agli admin di rispondere a tali richieste con delle comunicazioni personali. Si
differenziano graficamente e funzionalmente, nel senso che:
38
Analisi funzionale
Insegnante
L’homepage relativa all’insegnante si apre con un riassunto delle ultime comunicazioni
ufficiali della segreteria, una vista settimanale delle proprie note sul calendario e un elenco
delle attività principali della giornata, posti nel content. Se l’insegnante, al momento del
login ha una lezione in corso, allora l’homepage si apre direttamente sul form di
compilazione del registro della relativa classe.
Nel menu di sinistra, oltre la voce principale (“HOME”), troviamo, in ordine, bottoni per
accedere alla gestione completa del proprio calendario (“Calendario”), alla gestione del
corso (“No class” se l’insegnante non è associato a nessun corso o “<nome-classe>” relativa
al corso se l’insegnante è associato), alla gestione delle supplenze (“Supplenze”), alla
visualizzazione delle comunicazioni ufficiali ricevute (“Comunicazioni”), alla gestione dei
propri appunti (“Appunti”), all’invio e alla ricezione di messaggi email-like (“Messaggi”) e
alla consultazione delle domande/risposte frequenti (“FAQ”).
39
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
40
Analisi funzionale
Registro di classe
Come accennato in precedenza, appena un utente insegnante effettua il login, se lo stesso
insegnante ha una lezione in corso viene aperta la pagina relativa alla compilazione del
registro di classe; in questo modo, può fare l’appello, segnare gli assenti e le giustificazioni,
segnare il programma effettuato nella giornata e annotare gli eventuali rapporti disciplinari.
L’insegnante avrà tempo per compilare il registro telematicamente solo ed esclusivamente
durante il proprio orario di lezione, in modo da escludere eventuali comportamenti dolosi.
Graficamente abbiamo cercato di rendere la compilazione del registro molto simile a quella
cartacea (di cui le immagini nell’introduzione); ovviamente, per ragioni di spazio, l’abbiamo
sviluppato in verticale anziché in orizzontale.
41
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale della Tesi
contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
42
Analisi funzionale
Graficamente abbiamo tenuto lo stesso layout ufficiale per i registri cartacei, per rendere la
consultazione agli insegnanti molto semplice e famigliare, aiutandoli perciò nell’individuare
con facilità le informazioni che cercano.
43
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale della Tesi
contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
44
Analisi funzionale
45
Capitolo 2
Nella consultazione è possibile anche, tramite i bottoni posti in alto, navigare di settimana in
settimana o di mese in mese. Di default, la vista che si apre all’utente quando vi accede, è
relativa al giorno/settimana odierno/a.
Registro personale
Oltre al registro di classe, un insegnante ha la possibilità di compilare e consultare il proprio
registro personale. L’attività principale relativa alla compilazione è l’assegnazione dei voti
riguardanti le verifiche, le interrogazioni e il materiale consegnato (ad esempio le ricerche a
casa, i progetti, e così via).
46
Analisi funzionale
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
47
Capitolo 2
studente; se si vuole aggiungere una piccola annotazione personale (come ad esempio dei
“+”, dei “-“ o simili) basta non inserire alcun voto e riempire il campo “commento”.
Per le consegne, è possibile crearne di nuove o consultare l’elenco degli studenti che hanno
consegnato del materiale (e visualizzare il relativo file); per questi studenti è inoltre possibile
assegnare un voto.
Nell’ambito delle verifiche è possibile creare nuove verifiche, che non sono altro che dei
contenitori per i relativi voti degli studenti; ovviamente è possibile anche consultare i voti
delle passate verifiche ed editarne il contenuto.
Sia per le verifiche che per le interrogazioni è possibile crearne di nuove con una data
successiva a quella odierna; in questi casi, la verifica/interrogazione è considerata come
“programmata” e sarà visualizzata come tale nei promemoria degli studenti e
dell’insegnante.
48
Analisi funzionale
Per ogni corso tenuto, è necessario per il professore essere anche in grado di compilare il
programma ministeriale e, soprattutto, una relazione di fine anno sul programma realmente
effettuato, che sarà analizzato dal personale della segreteria didattica.
Figura 26: form per l'inserimento del programma ministeriale e della relazione conclusiva
Inoltre ha la possibilità di fornire agli studenti del materiale didattico, come slide, appunti o
simili, in modo da fornire strumenti utili ai ragazzi al fine di una migliore preparazione
scolastica.
Supplenze
Come visto precedentemente nelle note del diagramma delle classi, di supplenze ne esistono
di due tipi: giornaliere e lunghe. Le supplenze giornaliere sono quel tipo di supplenze che
nascono e si esauriscono nel giro di una giornata scolastica; solitamente il professore
supplente non esegue lezioni ma rimane a controllare il comportamento degli studenti e
compila il registro di classe.
49
Capitolo 2
Studente
L’homepage relativa allo studente si apre con un riassunto delle ultime comunicazioni
ufficiali della segreteria, una vista settimanale delle proprie note sul calendario e una mini-
vista del classwall, posti nel content. Nel menu di sinistra, oltre la voce principale
(“HOME”), troviamo, in ordine, bottoni per accedere alla gestione completa del proprio
calendario (“Calendario”), alla visualizzazione delle informazioni principali relative ai
corsi che deve seguire (“Materie”), alla visualizzazione dell’andamento scolastico
(“Valutazioni”), alla visualizzazione delle comunicazioni ufficiali ricevute
(“Comunicazioni”), alla gestione dei propri appunti (“Appunti”), all’invio e alla ricezione di
messaggi email-like (“Messaggi”), alla partecipazione al classwall della propria classe
(“Class Wall”) e alla consultazione delle domande/risposte frequenti (“FAQ”).
50
Analisi funzionale
Osserviamo il caso d’uso “Visualizzare voti di una materia” dal punto di vista di un
diagramma di attività per comprenderne il funzionamento:
Materie
Per poter visualizzare le informazioni relative ad una materia, uno studente deve premere sul
pulsante “Materie” del menu e selezionare nel contenuto aperto l’icona della materia.
51
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
52
Analisi funzionale
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
53
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
54
Analisi funzionale
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione
integrale della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
55
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
56
Analisi funzionale
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
57
Capitolo 2
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
58
Analisi funzionale
Alcune funzionalità non possono essere pubblicate, se sei interessato/a alla versione integrale
della Tesi contattami al +39 346 30 79 548 oppure a passaghe[]gmail.com.
59
Cap.3
Conclusioni e sviluppi
futuri
Nella fase conclusiva della progettazione abbiamo ipotizzato delle opportunità di sviluppo
che, in futuro, potrebbero essere implementate per aumentare l’usabilità e il numero di
potenziali acquirenti dell’applicazione.
accessibilità,
internazionalizzazione,
miglioramento delle performance,
sicurezza.
Le prime due permettono di raggiungere un numero più consistente di utenti e, per entrambe,
GWT offre classi e metodologie che ne agevolano l’implementazione. Il terzo punto si
potrebbe ottenere sfruttando una novità messa a disposizione da GWT dalla versione 2.0, lo
Speed Tracer. Infine la sicurezza, un punto su cui abbiamo già posto attenzione ma che
potrebbe essere ulteriormente migliorato.
Gli screen readers sono strumenti che permettono di interpretare ciò che viene mostrato
sullo schermo ai non vedenti e agli utenti con handicap visivi, tramite sintesi vocale o un
display braille. Questi strumenti si interfacciano con delle API specifiche di ogni sistema
operativo (ad esempio Microsoft Active Accessibility e Linux Access Toolkit).
Le applicazioni Ajax sono scritte in un modo che le rende a volte difficili da interpretare per
uno screen reader. A questo scopo è nata ARIA, una specifica del W3C per rendere
accessibili le Rich Internet Applications.
Rendere accessibile un widget GWT significa aggiungere le proprietà ARIA agli oggetti
DOM dell’applicazione. Tali proprietà possono essere di due tipi: ruoli e stati. I ruoli
indicano il tipo di elemento, sono specificati una volta sola all’inizio dell’applicazione e non
cambiano più. Alcuni esempi di ruoli sono: tree, menubar, menuitem, tab. Gli stati
invece descrivono appunto lo stato di un oggetto; ad esempio un checkbox può essere negli
stati aria-checked e aria-unchecked. Lo stato è dinamico e va aggiornato durante
l’interazione dell’utente. Inoltre, affinché un wiget sia accessibile, è necessario configurare il
supporto per la tastiera. Gli screen readers leggono quale elemento ha l’input focus, bisogna
61
Capitolo 3
quindi settare quale elementi possono averlo e in quale ordine. Tutte queste proprietà sono
assegnabili con i metodi setRole e setState della classe
com.google.gwt.user.client.ui.Accessibility e con il metodo setFocus [w1][w18].
Internazionalizzazione
GWT offre diversi tools per agevolare la traduzione delle applicazioni:
Il metodo più semplice da implementare è quello con stringhe statiche. Questo metodo
utilizza interfacce Java e property files, in particolare Constants,
ConstantsWithLookup e Messages.
@DefaultStringValue("insegnante")
String insegnante();
@DefaultStringValue("teacher")
String insegnante();
A questo punto, nel codice dell’applicazione, al posto della stringa basterebbe inserire
propertyFile.insegnante() e il la parola verrebbe visualizzata nella lingua di
default impostata nel browser.
Una metodologia simile si adotta per i messaggi parametrizzati, come ad esempio: “Il nome
’M@rio83’ contiene caratteri speciali”[w1].
62
Conclusioni e sviluppi futuri
GWT e sicurezza
Le applicazioni Javascript sono in generale vulnerabili a diversi tipi di attacchi se non
vengono prese alcune precauzioni. Siccome Gwt produce codice Javascript i widgets non
sono immuni a questo tipo di rischi.
La politica Same Origin Policy (SOP), ), adottata dai web browser, dovrebbe garantire che il
codice di una pagina caricata dal sito A nonnon possa accedere ai dati di una pagina caricata sul
sito B. Con Javascript è però possibile aggirare questa protezione, questa vulnerabilità è
chiamata Cross-site
site scripting (XSS).). Un XSS permette ad un attaccante di inserire codice al
fine di modificare ill contenuto della pagina web visitata. In questo modo si potranno sottrarre
dati sensibili presenti nel browser degli utenti che visiteranno successivamente quella pagina.
Questa vulnerabilità è dovuta a errori dei programmatori, che molto spesso trascurano trascuran
completamente la validazione delle informazioni passate in input con le richieste
HTTP[w19].
Security Token
Per proteggere i dati registrati nel sito, e fare in modo che le richieste al servizio siano
soddisfatte solo per gli utenti
utent registrati,, è stato necessario distinguere tali richieste da quelle
provenienti da fonti non autorizzate. Per fare questo abbiamo utilizzato il metodo del
security token.
Quando un utente effettua il login viene memorizzato in una variabile di sessione HTTP una
stringa costruita calcolando lo SHA1 di username e password, il token. token Quando viene
effettuata una richiesta al web service oltre ai parametri della chiamata va inserito anche il
token preso dalla sessione utente. In questo modo solo gli utenti effettivamente
effettivamente autenticati
possono interagire con i servizi offerti da OvunqueScuola.
63
Capitolo 3
Usando Speed Tracer è possibile farsi un’idea dei punti nei quali l’applicazione spende più
tempo. Questi potrebbero
rebbero essere causati, ad esempio, dall’esecuzione e parsificazione di
Javascript, dal ricalcolo di stili CSS, dalla gestione di eventi DOM, dal caricamento di dati
dalla rete, dal ridisegno dell’applicazione, ecc….
64
Conclusioni e sviluppi futuri
altamente stimolante che ci ha forniti di un know-how non indifferente e fatti diventare dei
pionieri, almeno in Italia, sull’uso e la conoscenza di queste nuove tecnologie in ambito
Cloud Computing.
In totale, abbiamo prodotto più di 20.000 righe di codice, di cui 13.500 relative al pattern
view, 3600 relative al pattern model (frontend) e 2900 relative al pattern controller
(backend).
65
Bibliografia
Riferimenti GWT
[1] Robert Cooper Robert, Charles Collins. “GWT in Practice”. Manning Publications Co.,
2008.
[2] Bram Smeets, Uri Boness, Roland Bankras. “Beginning Google Web Toolkit: From
Novice to Professional”. Apress, 2008.
[3] Prabhakar Chaganti. “Google Web Toolkit. GWT Java Ajax Programming”. Packt
Publishing, 2007.
[4] David Geary. “Google Web Toolkit Solutions”. Pearson Education Inc., 2008.
[5] Robert Hanson, Adam Tacy. “GWT in Action: Easy Ajax with the Google Web Toolkit”.
Manning Publication Co., 2007.
[6] Jeff Dwyer. “Pro Web 2.0 Application Development with GWT”. Apress, 2008.
Riferimenti JDO
[7] Robin Roos. “Java Data Objects”. Pearson Education Inc., 2003.
67
Sitografia
[w1] Pagina ufficiale di GWT (http://code.google.com/webtoolkit/overview.html)
[w11] Alfonso Maruccia. “Google App Engine punta a gestire l'intero Web” (http://punto-
informatico.it/2250079/PI/News/google-app-engine-punta-gestire-intero-web.aspx).
9/04/2008
[w12] Stefano Bellasio. “Google App Engine, scopriamo la cloud di Google per le nostre
applicazioni” (http://www.hostingtalk.it/articoli/cloud-computing/3325/google-app-engine-
scopriamo-la-cloud-di-google-per-le-nostre-applicazi). 17/02/2009
[w17] Robin Roos, traduzione di Lorenzo Felici. “Usare JDO 2.0: JDOQL”
(http://www2.mokabyte.it/cms/article.run?articleId=9OP-MBN-MA4-FU3)
69
Indice delle figure
Figura 1 registro personale dei professori ................................................................................ 7
Figura 22: casi d'uso utente Insegnante................................... Error! Bookmark not defined.
71
Indice delle figure
Figura 27: valutazione dello studente ..................................... Error! Bookmark not defined.
Figura 29: form per l'inserimento del programma ministeriale e della relazione conclusiva. 49
Figura 33: materie dello studente ........................................... Error! Bookmark not defined.
Figura 34: andamento scolastico complessivo ....................... Error! Bookmark not defined.
Figura 35: andamento scolastico per materia ......................... Error! Bookmark not defined.
Figura 36: casi d'uso utente Genitore ..................................... Error! Bookmark not defined.
Figura 37: diagramma di attività "Visualizzare orari di lezione del figlio"Error! Bookmark
not defined.
Figura 38: screenshot calendario del genitore, suddiviso per figlioError! Bookmark not
defined.
Figura 39: screenshot impostazione privacy genitore ............ Error! Bookmark not defined.
72
Indice
GWT, 11, 19, 57, 58, 59, 60, 63, 65, 72,
Accessibilità, 57 73, 74, 75, 76, 77, 79
Admin, 20, 27, 28, 30, 31, 33
Ajax, 57, 63, 71, 73, 74 homepage, 14
AJAX, 65, 71, 72, 75, 77 hosted mode, 12
Ambiente di sviluppo, 11 Hosted Mode, 74
Andamento scolastico, 51
AppEngine, 60, 65, 81, 82, 83, 86 Insegnante, 20, 39, 40
applicazioni RIA, 71 Internazionalizzazione, 58
Appunti, 25
ARIA, 57 Java, 11
Java Data Object. Vedi JDO
Bacheca, 22 JavaScript Object Notation. See JSON
BigTable, 80 JDO, 17, 60, 63, 65, 81, 84, 85, 86
JDOQL, 86
Calendario, 21 JSON, 19, 60, 65, 73, 77, 78, 79
casi d’uso in comune, 14
chiamata asincrona, 71 Login, 20
ClassWall, 52
Cloud Computing, 1, 5, 61, 63, 79, 80, 81, MapReduce, 80
82, 83 materiale didattico, 48
Materie, 50
diagramma delle classi, 16, 17 Messaggi, 23
Faq, 26 package, 19
fasi di progettazione, 10 Posta. Vedi Messaggi
funzionalità, 9 programma ministeriale, 47
funzionalità dell' insegnante, 40
Funzionalità generali, 20 Registro di classe, 41
Registro personale, 45
Genitore, 20, 22, 25, 53 Rich Internet Application. See
Gestione comprensorio, 32 applicazioni RIA
Gestione comunicazioni, 37
gestione degli admin, 27, 33 SaaS, 80
Gestione dei comprensori, 27 Screen readers, 57
gestione del corso, 39 Security Token, 59
gestione della scuola, 5 sicurezza, 59
gestione delle supplenze, 39 Software as a Service. Vedi SaaS
Gestione didattica, 35 Speed Tracer, 60
Gestione scuola, 34 Statistiche, 60
Gestione utenti, 34 Statistiche scuola, 33
Google Web Toolkit, 13, 19, 63, 72, 87 Struttura del progetto. Vedi Package
73
Indice
74
Appendici: strumenti
utilizzati
La necessità di creare un’applicazione web per la gestione delle scuole nasce dai molteplici
vantaggi che le applicazioni RIA (Rich Internet Application) possiedono nei confronti
delle tecnologie alternative. Infatti, rispetto alle applicazioni desktop, non richiedono
installazione, gli aggiornamenti sono automatici, sono indipendenti dalla piattaforma
utilizzata, più sicure in quanto girano nel ristretto ambiente del web browser e maggiormente
scalabili perché la maggior parte del lavoro computazionale viene eseguito dal server.
Con l’avvento della tecnologia AJAX (Asynchronous JavaScript and XML), lo sviluppo di
applicazioni web si basa su uno scambio di dati in background fra web browser e server, che
consente l'aggiornamento dinamico di una pagina web senza esplicito ricaricamento da parte
dell'utente. AJAX è asincrono nel senso che i dati extra sono richiesti al server e caricati in
background senza interferire con il comportamento della pagina esistente. Infatti, rispetto
alle applicazioni web tradizionali, sono più reattive perché non tutte le azioni compiute
dall’utente richiedono comunicazione con il server e rendono più efficiente l’utilizzo della
rete in quanto le applicazioni RIA possono inviare richieste al web server per ottenere solo i
dati che sono necessari (generalmente XML e JavaScript per mostrare la risposta del server
nel browser) riducendo sensibilmente la quantità di dati scambiati e il tempo di elaborazione
da parte del web server poiché la maggior parte dei dati della richiesta sono già stati
elaborati.
75
Appendici
Rilasciato da Google nell’estate 2006 sotto licenza Apache, Google Web Toolkit è un set di
tool open source che permette agli sviluppatori web di creare e gestire complesse
applicazioni frontend Javascript scritte in Java. Il codice sorgente Java può essere compilato
su qualsiasi piattaforma con i file Ant inclusi. I Punti di forza di GWT sono la riusabilità del
codice, la possibilità di realizzare pagine web dinamiche mediante le chiamate asincrone di
AJAX, la gestione delle modifiche, il bookmarking, l'internazionalizzazione e la portabilità
fra differenti browser[w6].
Il compilatore Java-to-JavaScript
La necessità di scrivere codice in Java, invece di JavaScript, è radicata nella sempre
crescente dimensione e complessità delle applicazioni RIA. Infatti le applicazioni di grandi
dimensioni sono difficili da gestire, e Java è stato progettato proprio per renderle gestibili.
GWT, oltre a riunire tutti i benefici di Java, consente comunque di interagire con codice
JavaScript esterno e con servizi server-side già esistenti.
76
Strumenti utilizzati
utilizzato all’interno del modulo, evitando cosi di trasferire codice JavaScript mai utilizzato
al client. Questo procedimento richiede più tempo della normale compilazione Java, in
quanto GWT crea un codice JavaScript altamente ottimizzato.
Il risultato della compilazione è una serie di file che, per un esempio “Hello World”, risulta
come segue:
Oltre al compilatore, GWT comprende anche una vasta libreria di widget e pannelli,
rendendo lo sforzo di costruire un’applicazione web simile a quello per la realizzazione di
un’applicazione desktop. La libreria di widget comprende i soliti oggetti come caselle di
testo, menu a discesa, e altri campi del modulo, più widget complessi come barre di menu,
finestre di dialogo, pannelli a schede e molti altri.
Quando si tratta di comunicazione con il server, GWT possiede uno strumento per ogni
esigenza. Il primo è l'inserimento di alcuni involucri di varia complessità e capacità attorno
all'oggetto JavaScript XMLHttpRequest, un oggetto spesso associato allo sviluppo Ajax. Un
altro strumento fornito da GWT è un insieme di classi per sostenere il formato JavaScript
Object Notation (JSON) del messaggio. JSON è un formato di messaggio popolare, noto
per la sua semplicità e la sua diffusa disponibilità. Come se non bastasse, GWT fornisce un
ulteriore strumento che permette di inviare oggetti Java tra il browser e il server, senza la
necessità di tradurli in un formato intermedio.
77
Appendici
La console della shell fornisce un’ottima interfaccia per il log e per le GUI.
Il browser integrato è in grado di invocare le classi Java direttamente dagli eventi generati,
ignorando cosi nella fase di debug la compilazione in JavaScript; in tal modo è possibile
utilizzare un debugger Java standard per il codice Ajax, invece di affidarsi esclusivamente ai
JavaScript compilati per i test e le interazioni.
Il server Tomcat Lite facilita lo sviluppo locale e la sperimentazione di server con database.
Dalla versione 2.0, il browser Hosted Mode viene rimpiazzato dal Development Mode che,
rispetto alle versioni precedenti, consente di poter effettuare il debugging dell’applicazione
web direttamente in un browser vero e proprio, invece di utilizzare il browser dell'SDK.
Altra particolarità del development mode è quella di poter scrivere il codice in un sistema
operativo e testarlo su un altro[w7].
78
Strumenti utilizzati
L’elenco dei widget disponibili è lungo e potenzialmente infinito, considerando il fatto che,
grazie all’apertura del codice, utenti e comunità ne rilasciano di nuovi ogni giorno. Possiamo
trovare calendari, tabelle ordinabili, calcolatrici, pannelli per disegnare e molto altro ancora,
senza considerare
derare i più classici oggetti contenuti nelle form. Inoltre sono disponibili anche
una serie di widget costruiti su già esistenti librerie JavaScript, come Google Maps API,
Google Search API e effetti Scriptacolous.
Essendo classi Java, ovviamente, i Widget possono essere estesi per crearne di nuovi e
possono gestire gli eventi generati da mouse e/o tastiera per interagire con l’utente.
79
Appendici
Utilizzando GWT RPC, tutte le chiamate effettuate dalla pagina HTML al server sono
asincrone. Questo significa che le chiamate non bloccano il client mentre aspettano una
risposta dal server, ma viene eseguito il codice immediatamente successivo.
I vantaggi di effettuare chiamate asincrone rispetto alle più semplici (per gli sviluppatori)
chiamate sincrone, si riscontrano in una migliore esperienza per gli utenti finali: innanzitutto,
l’interfaccia utente è più reattiva; infatti, a causa del fatto che nei browser web il motore
JavaScript è generalmente di tipo single-thread, una chiamata sincrona al server genera un
“blocco” fino alla conclusione della stessa, rovinando cosi l’esperienza dell’utente finale.
Altro vantaggio delle chiamate asincrone è che risulta possibile eseguire altri lavori in attesa
della risposta da parte del server; per esempio, è possibile costruire l’interfaccia utente e
contemporaneamente recuperare i dati dal server per popolarla, riducendo cosi il tempo
complessivo necessario all’utente per visualizzare i dati sulla pagina. Ultimo vantaggio, ma
non meno importante, è che è possibile effettuare chiamate multiple al server nello stesso
tempo; tuttavia questo parallelismo risulta fortemente limitato dall’estremamente piccolo
numero di connessioni che in genere i browser web concedono alle singole applicazioni[w1].
80
Strumenti utilizzati
file in una gerarchia MVC tradizionale, ma bisogna tenere conto di alcuni aspetti
fondamentali.
Innanzitutto troviamo il
descrittore del modulo, in formato
XML, che GWT utilizza per
individuare la configurazione
dell’applicazione; al suo interno
occorre prestare molta attenzione
a due tipi di voci: i moduli
ereditati (inherited modules),
paragonabili alle importazioni
nelle normali classi Java, e il
nome della classe principale a cui
l’applicazione deve accedere
all’inizio dell’esecuzione (Entry
Point Class).
Nell’esempio a fianco, il file si trova nella cartella principale “src/helloworld”, con il nome
“<nome-progetto>.gwt.xml”.
Nella cartella “server”, invece, troviamo il codice Java server-side, ossia il backend della
nostra applicazione. Al suo interno si possono inserire i servizi (le servlet per le chiamate
RPC) e i DAO (classi che rappresentano un’entità tabellare di un database ed effettuano su di
esso operazioni atomiche CRUD).
Notare inoltre come, nell’immagine sopra, per ogni servizio (o servlet) occorre creare
un’interfaccia sincrona e una asincrona da inserire nella cartella “client”.
Come in tutte le applicazioni web, si trova anche la cartella “war”, cosiddetta pubblica, in
quanto viene riportato tutto il codice (HTML e CSS) e gli oggetti (immagini e file) pubblici,
oltre ad un file “web.xml” contenente, tra le altre cose, l’elenco e la configurazione delle
servlet del progetto.
JSON
Molti sviluppatori di applicazioni AJAX hanno adottato JSON come formato dei dati per la
comunicazione con il server. Si tratta di un formato relativamente semplice basato sulla
notazione letterale di oggetto in JavaScript.
81
Appendici
JSON (JavaScript
JavaScript Object Notation)
Notation) è un semplice formato per lo scambio di dati. Per le
persone è facile da leggere e scrivere, mentre per le macchine risulta facile da generare e
analizzarne la sintassi. Si basa su un sottoinsieme del Linguaggio di Programmazione
JavaScript, Standard ECMA-262
262 Terza Edizione - Dicembre 1999.
Nel formato JSON, un oggetto è una serie non ordinata di nomi/valori. Inizia nizia con {
(parentesi graffa sinistra) e finisce con } (parentesi graffa destra). Ogni nome è seguito da :
(due punti) e la coppia di nome/valore sono separata da , (virgola). I valori, se alfanumerici,
sono interposti tra “ (virgolette).
Un array invece è una raccolta ordinata di valori. Comincia con [ (parentesi quadra sinistra)
e finisce con ] (parentesi quadra destra). I valori sono separati da , (virgola).
82
Strumenti utilizzati
[
{
"symbol": "ABC",
"price": 47.65563005127077,
"change": -0.4426563818062567
},
]
Una volta ricevuta la risposta, dal lato client occorre utilizzare la funzione eval() di
JavaScript e convertire cosi la stringa JSON in un oggetto JavaScript:
A questo punto, bisogna scrivere un metodo per utilizzare gli oggetti JavaScript, in questo
modo:
Quando il codice client-side verrà compilato in JavaScript, i metodi Java verranno tradotti
con codice JavaScript del tutto simile a quello riportato sopra[w10].
Cloud Computing
Il Cloud Computing è in sostanza l’evoluzione di varie tecnologie che, usate in sincronia, hanno
modificato l’approccio nel costruire l’infrastruttura IT dei servizi offerti su Internet[9].
83
Appendici
Il termine Cloud Computing si riferisce sia alle applicazioni distribuite come servizi (SaaS)
su Internet, sia ai sistemi hardware e software nei datacenter che offrono questi servizi. I
sistemi hardware e software nei datacenter sono chiamati semplicemente Cloud; se sono resi
disponibili al pubblico attraverso una politica “pay per use” sono chiamati Public Cloud, e il
servizio venduto Utility Computing. Se un’azienda possiede un’infrastruttura propria e non la
rende disponibile all’esterno si parla invece di Private Cloud. Sono possibili anche soluzioni
ibride[8].
Componenti chiave
SaaS
Software as a Service (SaaS) è un modello di pubblicazione del software su Internet che
rende l’applicazione interamente fruibile via web.
84
Strumenti utilizzati
Per utilizzare AppEngine è perciò necessario tenere a mente che non si può usare un tipico
database relazionale, in quanto il Cloud è ridondante. Un modo per ovviare a questo
problema in ambito Java consiste nell’utilizzare la tecnologia JDO.
Vantaggi e svantaggi
Vantaggi
Possibilità di allocare una grande quantità di risorse on demand: con il Cloud Computing le
aziende hanno accesso a una quantità di risorse che, fino a poco tempo fa, era a disposizione
di pochi leader nel settore.
Stima della domanda iniziale: spesso è difficile stimare la domanda, soprattutto per un
nuovo servizio; in questo modello, un errore di stima iniziale non si traduce in un potenziale
investimento sbagliato sia per eccesso che per difetto.
85
Appendici
Svantaggi
Disponibilità del servizio: alcuni casi eclatanti di interruzione dei servizi di Cloud (ad
esempio Gmail che l’8/11/08 è rimasto sospeso un’ora e mezza a causa della scadenza di
contratti di sistema oppure AppEngine che è rimasto parzialmente inattivo per circa cinque
ore a causa di un errore di programmazione) hanno sollevato preoccupazioni sull’affidabilità
di tali sistemi. Tuttavia le infrastrutture Cloud possono considerarsi sicure per la maggior
parte delle applicazioni.
Portabilità dei dati (e barriere all’uscita): una problematica ancora aperta è la portabilità dei
dati fra le diverse infrastrutture Cloud. Attualmente non esiste infatti uno “standard” tre i vari
sistemi e le API sono tutte proprietarie. Questo potrebbe essere una limitazione per la
diffusione del Cloud in quanto le aziende e gli utenti sono vulnerabili ad aumenti di prezzo
del servizio, problemi di disponibilità del servizio e fallimenti del provider.
Sicurezza e privacy dei dati: due questioni centrali per l’adozione di un’infrastruttura Cloud
da parte delle aziende sono la sicurezza e la privacy dei dati. Il fatto che i dati dell’azienda
siano “da qualche parte nel Cloud” è una barriera psicologica all’adozione di tale
infrastruttura. Queste problematiche possono però essere facilmente risolte con l’adozione di
tecnologie collaudate come l’encrypted storage, le VLAN e i network middleboxes.
Efficienza nel trasporto dei dati: le applicazioni tendono a diventare sempre più data-
intensive; nel Cloud Computing tutti questi dati devono essere trasportati sulla rete e questo
può creare un collo di bottiglia e un costo elevato di trasporto.
Amazon EC2
A un estremo dello spettro c’è la proposta di Amazon: EC2. Un’istanza di EC2 permette
infatti allo sviluppatore di controllare quasi tutto, dal kernel, al software stack e alla
connettività IP. Il programmatore è libero di sviluppare qualsiasi applicazione. Questo rende
difficile per Amazon controllare la scalabilità e il failover perché la replicazione è
strettamente legata all’applicazione stessa.
86
Strumenti utilizzati
Microsoft Azure
La proposta Cloud di Microsoft si posiziona a metà dello spettro tra flessibilità e libertà per il
programmatore. Le applicazioni Azure sono scritte usando le librerie .NET e compilate in
Common Language Runtime. Il sistema supporta applicazioni di carattere generale anziché
di un tipo specifico. L’utente può scegliere il linguaggio di programmazione ma non il
sistema operativo sottostante.
Google AppEngine
All’altro estremo dello spettro c’è AppEngine di Google che offre una piattaforma per creare
applicazioni in uno specifico dominio, quello delle applicazioni web tradizionali. Questa
limitazione permette a Google di offrire una grande scalabilità e disponibilità di servizio in
automatico.
87
Appendici
JDO è estremamente trasparente nella mappatura degli oggetti tra codice applicativo e
database, permettendo quindii di archiviare direttamente gli oggetti model di Java sulla
propria base di dati. Fornisce inoltre la possibilità di includere direttamente file di I/O,
serializzazioni,, JDBC, Enterprise JavaBeans (EJB), Bean-Managed
Bean Managed Persistence (BMP) o
Container-Managed Persistence (CMP) entity beans e Java Persistence API.
I vantaggi derivanti dall’utilizzo di JDO sono numerosi: innanzitutto abbiamo una notevole
portabilità, cioè le applicazioni scritte con le API di JDO possono essere eseguite su
implementazioni
ioni multiple senza dover essere ricompilate o dover sostituire parte del codice
sorgente. Anche i Metadati, che descrivono il comportamento della persistenza all’esterno
del codice sorgente Java includendo le funzioni di mappaggio O/R più comunemente
utilizzate,
izzate, sono altamente portabili. Un altro aspetto fondamentale è la totale indipendenza
ndipendenza
dal Database: le applicazioni scritte con le API di JDO sono indipendenti dal database
sottostante. Le implementazioni di JDO supportanosupportano una gran varietà di datastore
data
transazionali, tra cui i database relazioni, i database di oggetti, i file system e i documenti
XML.
Le specifiche JDO definiscono una serie di interfacce che sovraintendono all'accesso delle
funzionalità. Queste sono:
88
Strumenti utilizzati
Le specifiche JDO inoltre definiscono 10 stati in cui l'oggetto coinvolto in JDO può passare
(sette obbligatori e tre opzionali), in funzione delle diverse chiamate ed operazioni che è
possibile eseguire. Questi sono:
89
Appendici
JDOQL
Per il recupero di oggetti che soddisfano una serie di criteri, JDO fornisce un linguaggio di
query, chiamato JDOQL, che agisce direttamente su classi e attributi dei dati JDO e include
il controllo dei tipi dei parametri e dei risultati delle query. JDOQL è simile a SQL, ma è più
appropriato in un ambito object-oriented, come appunto il datastore di AppEngine (che non
supporta le query SQL con interfaccia JDO).
In sostanza ogni query JDOQL ha un insieme di Candidates e, una clausola Filter, potrebbe
prevedere altre clausole che governano l'ordinamento dei risultati e la definizione dei
parametri.
I Candidates sono solitamente l'insieme di tutte le istanze persistenti di una classe stabilita
(sottoclassi comprese).
Per poter utilizzare JDO in AppEngine, occorre modificare gli oggetti model del progetto,
aggiungendo le Annotation alle classi e relativi attributi:
Una piccola nota negativa è che purtroppo non si possono utilizzare le seguenti funzionalità
dei JDO in AppEngine a causa di alcune incompatibilità:
90
Strumenti utilizzati
Attualmente ci sono anche altri bug di minore rilevanza e DataNucleus informa sul proprio
sito web di una incompatibilità con Google Web Toolkit, cioè un problema sulla
serializzazione di array di oggetti serializzabili[w14][w15].
91
Ringraziamenti
Durante questi anni, la presenza e il supporto di molte persone che hanno condiviso con me
non solo i momenti più belli, ma anche quelli più difficili, è stato per me di grande
importanza ed è per questo che desidero ringraziare tutti coloro che, anche solo con una
parola di incoraggiamento, mi sono stati vicini in questo mio percorso.
Desidero ringraziare Antonio Di Leva, relatore di questa tesi, per la grande disponibilità e
cortesia dimostratemi nonché per il tempo dedicatomi e per le conoscenze fornitemi durante
il suo corso.
Un sentito ringraziamento ai miei genitori, che, con il loro incrollabile sostegno morale ed
economico, mi hanno permesso di raggiungere questo traguardo.
Un ringraziamento particolare anche al mio collega nonchè amico Davide Micheletto per il
grande impegno e tempo dedicato a questo progetto, sperando in un futuro professionale
altrettanto proficuo.
Infine ringrazio tutti, ma proprio tutti, i miei amici e compagni di università che hanno
saputo allietare e rendere spensierate le mie giornate anche solo con una battuta o con un
sorriso, che hanno passato con me interi pomeriggi per preparare un esame, che mi hanno
aiutato nei lavori di gruppo e hanno condiviso con me ansie e paure prima di un esame.
93