universita` degli studi di trento - Marco Ronchetti

Transcript

universita` degli studi di trento - Marco Ronchetti
UNIVERSITA’ DEGLI STUDI DI TRENTO
Facoltà di Scienze Matematiche, Fisiche e Naturali
Corso di Laurea
INFORMATICA
Elaborato Finale
UN REPOSITORY DISTRIBUITO PER LEARNING OBJECT
Relatore/1st Reader:
Laureando/Graduant:
Ronchetti Marco
Groff Matteo
Anno accademico 2010 - 2011
INTRODUZIONE.............................................................................................................3
Cos'è un Learning Object..................................................................................................4
Learning Object Metadata (LOM)................................................................................4
Implementazione di LOM........................................................................................5
JaxB..........................................................................................................................5
VCARD....................................................................................................................6
Esempio di file vCard..........................................................................................6
Caratteristiche di un buon repository.................................................................................7
Repositori già esistenti:.....................................................................................................7
Merlot:...........................................................................................................................7
Le Mill..........................................................................................................................8
Connexion.....................................................................................................................9
Ariadne..........................................................................................................................9
Generazione dei Metadati per Learning Object...............................................................10
Tipo Oggetto: .............................................................................................................11
Materia: ......................................................................................................................11
Argomento:.................................................................................................................11
Target:.........................................................................................................................12
Keywords:...................................................................................................................12
Organizzazione del Repository........................................................................................12
Architettura.................................................................................................................12
Core.............................................................................................................................14
Tecnologie Utilizzate..................................................................................................15
EJB .......................................................................................................................15
Web Services..........................................................................................................16
Database XML.......................................................................................................17
Utilizzo del Database XML nel Core:....................................................................19
Database Relazionale.............................................................................................19
Generatore di Metadati....................................................................................................20
Estrattore:....................................................................................................................21
Generatori...................................................................................................................21
Funzionamento del Repository........................................................................................22
Gestione degli Utenti..................................................................................................22
Gestione dei Meta-dati................................................................................................23
Generazione............................................................................................................23
Generazione Automatica:..................................................................................23
Completamento.............................................................................................23
Titolo:............................................................................................................23
Targhet, Tipo di Lezione Materia ed Argomenti...........................................23
Keywords......................................................................................................24
Tipo di applicazione......................................................................................24
Inserimento.................................................................................................................24
Licenza:...........................................................................................................................24
Licenza pubblica:........................................................................................................25
Licenza Privata:..........................................................................................................26
Ricerca:............................................................................................................................27
Ricerca Semplice:.......................................................................................................27
Approfondimento distanza di Levenshtein............................................................27
Ricerca Avanzata.........................................................................................................28
Search Options.......................................................................................................28
Funzionamento Software Distribuito...............................................................................28
Livelli di astrazione:...................................................................................................29
Possibile altra implementazione: Centralizzazione....................................................29
Interfaccia Web................................................................................................................30
Framework:.................................................................................................................30
JSF:.........................................................................................................................30
Framework per Ajax...............................................................................................32
IceFaces.............................................................................................................32
Registrazione:.........................................................................................................33
Login......................................................................................................................34
Pannello Utente......................................................................................................34
Aggiunta di un nuovo Learning Object:.................................................................34
I tuoi dati................................................................................................................36
Ricerca....................................................................................................................37
Risultati di una ricerca / I tuoi Learning Object.....................................................37
Dettagli di un Learning Object...............................................................................38
Integrazione Facebook................................................................................................38
Like Button:...........................................................................................................38
Comments:.............................................................................................................39
Rilevanza sociale...............................................................................................39
Distribuzione:....................................................................................................39
Launcher..........................................................................................................................39
Embedded Glassfish:..................................................................................................39
Avvio di SamgI e del Repository................................................................................40
Conclusioni......................................................................................................................41
Bibliografia......................................................................................................................41
Indice Analitico................................................................................................................42
INTRODUZIONE
Questa tesi nasce nell'ambito di un grande progetto che la Provincia Autonoma di Trento
sta sviluppando con lo scopo di innovare la didattica nelle scuole attraverso
l'introduzione di nuove tecnologie a supporto dei docenti e degli studenti.
Una parte di questo progetto, supportato dall'Università degli Studi di Trento riguarda la
diffusione di numerose Lavagne Interattive Multimediali (LIM) nella varie scuole
Trentine: SLIM4DIDA (Supporto all'introduzione di Lavagne Interattive Multimediali
per (4) la Didattica) è stato il progetto pilota, il quale sta continuando tuttora con il
progetto Wii4Dida.
Una LIM è un dispositivo elettronico ideato e realizzato per sostituire la tradizionale
lavagna didattica, sulla quale è possibile disegnare attraverso dei pennarelli virtuali o
con il metodo touch screen. Tipicamente questa lavagna è collegata ad un Pc
permettendo di unire il classico paradigma didattico incentrato sulla lavagna, con
l'integrazione di contenuti multimediali dinamici, quali software sviluppati ad Hoc per
facilitare e migliorare l'insegnamento.
Le possbilità offerte da una LIM rispetto ad una lavagna tradizionale sono enormi infatti
introdurre una lavagna interattiva in aula equivale ad "aprire" la classe al digitale;
significa, in qualche misura, invertire il senso di marcia della tecnologia. Non sono più
infatti gli allievi ad essere "portati" in sala per la classica "ora di informatica", ma è il
multimediale ad entrare in classe e a rendersi immagine, video, web, risorse interattive.
Mantenendo il classico paradigma centrato sulla lavagna e utilizzando metodi
tradizionali d’insegnamento come la lezione frontale, il docente potenzia la possibilità
d’utilizzare software didattico in modo condiviso, la propria attività; facilita la
spiegazione dei processi, la descrizione di situazioni e ambienti, l’analisi di testi.
Tutto ciò consentendo una visualizzazione diretta e condivisa dell’oggetto su cui è
convogliata tutta l’attenzione degli allievi, avendo anche la possibilità di salvare i
percorsi didattici proposti, per successivi utilizzi o per la distribuzione agli studenti
(inclusi quelli assenti).
Oltre che per la didattica frontale, la lavagna interattiva può essere impiegata in aula
per lezioni di tipo interattivo/dimostrativo: per condurre dunque attività collaborative
e laboratoriali, per svolgere le interrogazioni, per la navigazione e ricerca su web, per
presentare in modo innovativo studi ed elaborati realizzati dagli studenti.
Molti insegnanti hanno parlato di elevati indici di gradimento e di coinvolgimento
degli allievi.
E fra i "perché" hanno in particolare indicato la "proprietà" della LIM di allinearsi al
linguaggio, delle immagini, dei filmati, della fruizione interattiva, cui le nuove
generazioni e i loro stili d’apprendimento sono ormai abituate
Proprio tutti i possibili contenuti ( detti Learning Object ) sono stati il punto di partenza
di questa tesi in quanto la realizzazione di lezioni passa attraverso una fase di creazione
e sviluppo delle stesse. Ma anche di ricerca e di riutilizzo di quanto già creato, dato che
uno dei punti di maggiore forza degli strumenti elettronici per supportare la didattica è
proprio la possibilità di riutilizzare materiale, facilitando e velocizzando la preparazione
delle lezioni.
L'obiettivo di questo progetto è quindi realizzare un sistema che permetta lo scambio e
la ricerca di contenuti didattici, in particolar modo per lavagne interattive. Attraverso la
realizzazione di un repository che sia disponibile e accessibile ai docenti che desiderino
utilizzare contenuti per Lavagne Multimediali. Questo Repository è stato pensato per
essere installato su un server di una scuola, ma che abbia la possibilità di scambiare dati
con i repository installati sulle altre scuole, realizzando cosi un sistema distribuito per lo
scambio dei LO.
Questa tesi si suddivide in più parti principali: nella prima parte inquadreremo a fondo
l’ambiente in cui questa si sviluppa, analizzando gli obiettivi di questo progetto e
confrontandolo con quanto è stato già stato creato nel resto del mondo per risolvere il
medesimo problema.
La seconda parte parla dei metadati, cioè di come classificare e indicizzare i vari
Learning Objects, i metodi da me utilizzati comprendenti vantaggi e svantaggi del mio
approccio.
Nella terza parte iniziamo a parlare della realizzazione di questo progetto, descrivendo
le scelte architetturali prese, le tecnologie utilizzate e le basi del funzionamento di
questo progetto approfondendone tutti i punti fondamentali discutendone le scelte prese.
La quarta parte riguarda l'interfaccia utente, l'utilizzo e l'installazione del repository.
Comprende degli approfondimenti su alcune tematiche della programmazione di
applicazioni Web 2.0 e sulle tecnologie adottate per lo sviluppo dell’interfaccia utente.
Cos'è un Learning Object
Iniziamo a definire che cosa è un Learning Object. Un LO è definito come ogni risorsa
digitale utile a supportare l'apprendimento, cioè una mattonella di base per e-learning e
può essere qualsiasi cosa, come un file pdf, un documento, un’immagine, un file video o
audio, la cosa importante è che il contenuto abbia lo scopo di insegnare qualche cosa.
Le caratteristiche principali di un Learning Object sono:
Modulari: cioè posso essere aggregati e usati assieme ad altro LO.
Riusabili: significa che una risorsa può essere utilizzata infinite volte, anche in
ambienti e situazioni di apprendimento diverse.
Reperibili: cioè ricercabili e classificabili attraverso una fase di generazioni di
metadati.
Che cosa sono i metadati?
I metadati sono delle informazioni associate a un LO, ma che non si riferiscono
direttamente al contenuto ma hanno lo scopo di classificarlo e di raggrupparlo in
categorie assieme ad altri LO, Ad esempio contengono informazioni riguardo al titolo,
ma anche alla materia di cui si occupano, sul livello di difficoltà e di conoscenze
richieste per comprenderne il contenuto e cosi via.
Esistono degli standard internazionali per il formato dei metadati, quali ad esempio
Dublin Core o lo stand ieee LOM (Learning Object Metadata). Nel repository tutti i LO
inseriti saranno classificati e indicizzati attraverso un documento LOM.
Learning Object Metadata (LOM)
Per approfondire LOM è lo standard approvato dall'IEEE nel giugno 2002 e fissa il
minimo insieme di proprietà necessario per la gestione, l'allocazione e la valutazione dei
Learning Object.
LOM è nato con lo scopo di dare coerenza e di fornire uno standard internazionale in
modo che tutti i gestori di meta-dati abbiano un riferimento, potendo cosi condividere
informazioni fra loro.
Le radici di questo standard affondano in ARIADNE (Alliance of Remote
Instructional Authoring and Distribution Networks for Europe) associazione la
quale si occupa di indicizzare Learning Object già dalla meta degli anni 90 e punto di
riferimento internazionale per la generazione, gestione e soprattutto lo scambio di metadati fra i vari LO.
LOM composto di nove aree descrittive, contenenti gruppi di attributi strutturati ad
albero:
• Generale: racchiude le informazioni comuni sul Learning Object;
• Ciclo di vita: racchiude le informazioni sulla vita del LO (versione, data di creazione,
ecc.);
• Meta-metadati: fornisce informazioni sullo schema di meta-dati adottato;
• Tecnico: contiene informazioni sui requisiti e le caratteristiche tecniche del LO;
• Didattico: racchiude informazioni sulle proprietà didattiche del LO;
• Diritti: fornisce informazioni sui diritti intellettuali e simili del LO;
• Relazioni: contiene indicazioni sul legame tra l'oggetto e altre risorse;
• Annotazioni: contiene commenti sull'uso didattico del LO;
• Classificazioni: fornisce informazioni sulla materia e l'argomento affrontati
In totale questi nove gruppi racchiudono settanta elementi descrittivi.
Queste informazioni se correttamente compilate permettono di classificare in modo
completo una risorsa, e ne permettono cosi delle efficacie ricerche dello stesso.
Implementazione di LOM
I meta-dati sono rappresentati attraverso un nodo xml ben definito nelle specifiche ieee.
Un semplice esempio di un possibile meta-dato è il seguente:
<lom xmlns="http://ltsc.ieee.org/xsd/LOMv1p0">
<general>
<title>
<string xml:lang="sp">Julio Cesar</string>
<string xml:lang="it">Giulio Cesare</string>
</title>
<language>la</language>
</general>
<technical>
<location type="URI">
http://RepositoryDiLezioni/RepositoryGUI/UploadedLO/matteo/cesare.html
</location>
</technical>
</lom>
Ovviamente questo è un meta-dato molto incompleto dato che sono specificati
solamente 3 dei 70 elementi descrittivi possibili ma è un buon esempio per capire com'è
strutturato.
Per elaborare queste informazioni nell'ambiente Java ho trovato delle api LOM4J scritte
per fornire una semplice interfaccia per il formato LOM. Queste api sono usate anche
negli altri repository come Ariadne e si basano su JAXB unito a un supporto per la
gestione delle VCARD.
JaxB
JAXB è un parser XML che utilizza un approccio completamente differente rispetto a
SAX o Dom. Infatti, le API jaxb creano dei veri e propri oggetti Java a partire dalla
definizione del file XML, definizione che viene di solito fatta usando DTD o XML
Schema. Da queste definizioni sono create dinamicamente delle classi Java che poi
conterranno i dati riportati nel file XML.
Come potete vedere dall'immagine qui riportata il funzionamento è abbastanza
semplice: sono creati degli oggetti dalla definizione del file XML. Quest’approccio è
utilissimo perché rende invisibile al programmatore la presenza del file xml.
Si lavora semplicemente con degli oggetti java senza doversi preoccupare di
problematiche di parsing o di navigazioni fra nodi.
VCARD
è un formato di file per i biglietti da visita elettronici. I vCard possono essere allegati a
messaggi email, ma possono essere scambiati anche in altri modi, generalmente su
internet o tra due o più dispositivi mobili. Possono contenere informazioni come nome,
cognome, indirizzo, numeri di telefono, email, url, compleanno, immagini e perfino clip
audio. Queste vCard sono utilizzate nel documento LOM per identificare l'autore
dell'oggetto.
Esempio di file vCard
BEGIN:VCARD
VERSION:2.1
N:Matteo
NICKNAME:Matteogrf
TEL;HOME;VOICE:123456789
TEL;CELL;VOICE:123456789
TEL;HOME;FAX:123456789
ADR;HOME:;;Strada del Redebus 24 00100=0D=0AItalia
EMAIL;PREF;INTERNET:[email protected]
REV:20080817T172534Z
END:VCARD
Caratteristiche di un buon repository
Un repository per aver successo ed essere ben funzionante deve soddisfare
generalmente una serie di requisiti fondamentali, i quali oltre definire di direttive di
funzionamento devono comprendere argomenti quali la semplicità di utilizzo e
l'efficienza operativa. Poiché un sito web oltre ad essere funzionale, deve anche essere
semplice e veloce, è cosa nota che una grande complessità di utilizzo allontana molti
utenti, quindi:
•
Deve essere semplice e rapido, alcuni repository richiedono moltissime
informazioni per la creazione dei metadati, annoiando l'utente facendogli
compilare moltissimi campi e form, questo è un problema che scoraggia
l'inserimento di nuovi contenuti e perfino l'utilizzo.
•
La ricerca deve essere semplice e intuitiva, permettendo di trovare ciò che si
cerca con pochi click e poche azioni, infatti, una cattiva ricerca rende inutile un
repository
•
Deve essere disponibile un meccanismo di protezione dei contenuti,
permettendo all'utente di scegliere con chi condividere il proprio lavoro.
•
L'installazione deve essere semplice, ed eseguibile da un qualunque utente che
non possiede specifiche conoscenze informatiche, in tal modo questo repository
può essere installato su molti server permettendone una gran diffusione.
•
La gestione degli utenti deve essere sviluppata nel modo più semplice possibile,
chiedendo all'utente solamente le minime informazioni necessarie. E dimostrato
che più informazioni sono richieste, meno utenti decideranno di registrarsi e di
contribuire.
Il mio obiettivo è quindi realizzare un pacchetto software completo che sia funzionale e
utile per soddisfare nel miglior modo possibile questi requisiti.
Ora vorrei porre l'attenzione su cosa esiste già e su com’è stato realizzato.
Repositori già esistenti:
Esistono già molti repository per lo scambio dei LO, i quali fra loro presentano rilevanti
differenze che ne influenzano l'usabilità e l'utilità. Per esempio alcuni sono aperti e altri
invece sono chiusi a gruppi di utenti ben definiti, come membri di un’associazione o
università. Alcuni possono essere pensati per argomenti o materie ben definiti, altri son
più generali, in ogni modo la struttura base resta sempre la stessa.
Ho analizzato i repository di maggiore fama:
Merlot:
Merlot è un repository nato nel 1997 in California, è complemento aperto a tutti gli
utenti e al momento indicizza oltre 25.000 LO.
Analizzandone la struttura d’inserimento e ricerca è ipotizzabile che si basi su un
formato LOM per la descrizione dei contenuti.
Utilizzandolo si nota che durante la fase di registrazione cerca di avere la maggior
quantità possibile d’informazioni sull'ambito educativo dell'utente, richiedendo di
compilare numerosi form con menu a tendina, con la possibilità si scegliere elementi già
definiti. Le principali informazioni richieste sono l'ambito d’insegnamento, la materia e
il livello d’insegnamento.
In seguito, le informazioni raccolte saranno utilizzate per velocizzare la generazione dei
Metadati inserendo opportuni valori di default dei vari menu.
Quest’approccio è lo stesso che avevo pensato per il mio repository, rendendo pero
l'inserimento delle informazioni aggiuntive opzionale in modo da non rallentare e
scoraggiare la registrazione.
Il sistema d’inserimento delle risorse è simile alla registrazione, cioè una volta deciso di
inserire un LO si dovranno compilare numerosi form con menu a scelta rapida, per
descrivere nel modo più completo possibile la risorsa che si sta inserendo.
Il sistema utilizza una classificazione Materia – Argomenti, i quali selezionabili ma non
modificabili.
Fa anche una distinzione sui vari scopi del LO, quali lezioni, esercizi, esame, prova,
corso on-line.
Simulazione ecc...
Gli step per la descrizione sono i seguenti:
Titolo e URL
Descrizione
Categoria
Autore
Informazioni Opzionali (Copyright e informazioni Tecniche)
Interessante la possibilità di creare delle Collection, cioè un raggruppamento di LO che
servono per raggruppare in modo completo una lezione composta di più Learning
Objects. Esprimendo il concetto di Modularità di un LO.
La ricerca è molto strutturata, e comprende la possibilità di specificare tutti i possibili
dettagli di un filtro.
A mio parere è un ottimo repository, dal quale potrei prendere molti spunti, il difetto dal
mio punto di vista è l'utilizzo può diventare lento e noioso data la presenza di numerosi
campi nelle form.
Le Mill
Si tratta di uno dei più famosi repository di metadati e utilizza un approccio
completamente diverso da merlot: chiede sempre il minimo possibile, favorendo la
rapidità e la semplicità a discapito della completezza e della precisione nella
classificazione.
La registrazione è molto semplice e non richiede nessuna informazione aggiuntiva
rispetto ai dati base di un utente.
Provando a inserire un nuovo LO notiamo che il repository non permette un upload
locale della risorsa, ma accetta solamente un collegamento a essa.
Le informazioni necessarie per la creazione dei metadati comprendono Titolo, Autore
Descrizione e Parole chiave, poi sono presenti menu a scelta rapida per Lingua materia
Argomento target e licenza.
È interessante la possibilità offerta da questo sito di creare lezioni con dei tool da loro
proposti.
Offre anche un sopporto multilingua e per la creazione di collection di lezioni.
A differenza di Merlot offre una gran semplicità e velocita di utilizzo che viene pero
pagata nel momento della ricerca poiché son presenti meno informazioni che descrivono
l'oggetto e quindi è più difficile trovare ciò che si cerca.
Connexion
Questo repository è completamente diverso rispetto ai precedenti, è molto più
sviluppato, poiché oltre alle funzionalità di Repository realizza un sistema sociale,
curando la figura dell'autore e delle relazioni fra essi, con possibilità di recensione e
controllo dei contenuti.
Si occupa anche della creazione di contenuti, fornendo tool per la creazione e per
l'esportazione nel formato standard proprietario del sito.
Legate all'account utente ci sono funzionalità per il supporto e la gestione dei contenuti,
una cartella personale per i propri lavori e numerosi strumenti di personalizzazione a
essa associati.
Le risorse sono suddivise in moduli che possono essere composti di singoli Learning
Objects o raggruppamenti. Esistono anche le Colleciton di moduli, che rappresentano un
percorso formativo più completo.
Registrandoci si nota una procedura identica a Le Mill.
La creazione dei metadati è gestita nello stesso modo degli altri repository analizzati.
In conclusione possiamo considerare questo tipo di repository anche come un social
network che collega i docenti fra loro.
Ariadne
Ariadne è un’associazione europea aperta al mondo, per la condivisione e il riutilizzo di
Learning Object. Il cui cuore è una rete distribuita di repository i quali scambiano
informazioni fra loro.
E membro di globe, un sistema mondiale per lo scambio di Learning Object, di cui
fanno parte tutti i maggiori repository internazionali di metadati. Questo fa si che
indicizzi un numero immenso di risorse (quasi un milione) molto diverse fra loro,
provenienti da repository molto diversi. Questo porta a repository a lavorare a un livello
di astrazione altissimo il che crea solamente un caos generale che rende impossibile
trovare qualsiasi cosa si voglia cercare. Anche a causa alle poche possibilità di scelta.
Per l'indicizzazione si basa sul Generatore SamgI (sarà spiegato più avanti nel
dettaglio) il quale lavora ad un livello di astrazione alto, non permettendo cosi
ricerche riguardanti materie, argomenti e dettagli specifici molto importanti in un
Learning Object.
Come si può notare tutti questi repository presentano sia dei pregi sia dei difetti, non ho
trovato ancora un repository per cosi dire perfetto da poter prendere come esempio, ma
mi forniscono grandi spunti per l'implementazione del mio progetto, che ovviamente
non intende, essere migliore dei repository già citati, ma ho fatto del mio meglio per
renderlo il più funzionale e usabile possibile.
Ho portato questi 4 repository come esempio perché rappresentano tutti i possibili
approcci seguibili, difatti molti degli altri repository esistenti sono realizzati sono molti
simili a quelli presentati.
Analizzandone vantaggi e svantaggi possiamo affermare che esiste una regola che dice
che più informazioni si richiedono più la ricerca e la classificazione sarà precisa, ma più
noioso e difficile sarà il repository da utilizzare.
Per la creazione del mio repository cercherò quindi di trovare un giusto bilanciamento,
cercando di prendere il meglio da ogni repository analizzato.
Generazione dei Metadati per Learning Object
In questo capitolo parleremo di come il repository genererà i metadati associati a ogni
Learning Object, e discuteremo dei valori più importanti da considerare per una buona
classificazione.
Questo è necessario perché ogni Learning Object necessità d’informazioni (meta-dati)
in modo da poterlo classificare e inserire nell’ambiente cui esso appartiene. Ad esempio
data una presentazione multimediale è necessario conoscere chi l’ha creata, di che
argomento tratta, chi è il target di questa presentazione ecc... tutte queste informazione
sono i meta-dati associati all'oggetto.
La procedura per la loro generazione ha i seguenti requisiti per essere efficiente ed
efficace:
•
Deve generare meta-dati corretti e il più possibile completi e consoni per una
corretta ricerca.
•
Non deve causare all'utente uno spreco di tempo. Com’è noto a nessun utente
piace perdere tempo a inserire manualmente i meta-dati In quanti si tratta di una
procedura noiosa.
Per far questo ho scelto di utilizzare il tool SamgI di Ariadne, un generatore automatico
di meta-dati il quale dato un file in input cerca di estrarre la maggior quantità
d’informazioni possibili.
Presentano pero i seguenti problemi:
1. Non tutti i formati sono supportati
2. Presenta qualche errore di estrazione
3. Mancanza di alcune informazioni
Questa mi porta ad adottare un approccio misto, che riesca a fondere la generazione
automatica con un supporto manuale, in modo da richiedere poco tempo all'utente e di
porre rimedio ai limiti della generazione automatica. L'idea base di questo approccio è
di creare una generazione assistita di meta-dati
In pratica cercherò di affidare all'utente solo una funzione di controllo della correttezza
dei meta-dati generati, e nel caso di errori o d’impossibilità di generare
automaticamente alcune informazioni di primaria importanza cercherò di mettere
l'utente nelle condizioni di inserire questi dati nel modo più semplice veloce ad
automatico possibile, supportandolo con suggerimenti, menu a scelta rapida e cosi via.
Esistono dei formati standard per la creazione di questi meta-dati, io ho scelto di seguire
il formato LOM (Learning Object Metadata) giacché è il meglio supportato da SamgI e
a mio parere il più completo e specifico per le necessità del mio progetto.
Tipo Oggetto:
Questa informazione descrive di che tipo di oggetto si tratta. Ad esempio:
Presentazione, Pdf, Immagine, Ecc... questo metadato può essere estratto in modo
automatico in base all'estensione del file. Nel caso di estensioni sconosciute o di file
applicativi verrà chiesto all'utente di inserire manualmente questo campo. Per rendere
questo più efficiente l'applicazione sarà capace di imparare nuove estensioni quando un
oggetto sconosciuto sarà descritto.
Ci sono situazioni, come ad esempio documenti html generati da una servlet che sono
disponibili sul web senza estensione. Queste situazioni sono gestite analizzando l'url e
riconoscendo le servlet.
Materia:
Estrarre la materia in modo automatico non è semplice, e il generatore automatico non
mi aiuta molto, pero per cercare di individuarla si può procedere nelle seguenti
direzioni:
A)
In base alle informazioni sull'autore: per esempio se abbiamo altri oggetti con lo
stesso autore, i quali riguardano tutti lezioni di storia, è consono ipotizzare che si tratti
anche questa di una lezione di storia.
B)
In base alle informazioni su chi inserisce tale oggetto: per esempio se chi
inserisce quest’oggetto, è un professore di matematica si può ipotizzare che si tratti di
una lezione di matematica, oppure se l'utente in precedenza ha inserito lezioni di storia,
potrebbe trattarsi di una lezione di storia.
C)
Cercando nel titolo, parole chiavi e descrizione: in queste parti del testo in alcuni
casi è possibile trovare informazioni che riguardano le materie.
Ovviamente se questo porta a un risultato errato, è compito dell'utente correggerlo
cambiando la materia o aggiungendone una nuova.
Argomento:
si tratta di un punto specifico della materia, il quale potrebbe essere anche condiviso fra
più materie, ad esempio un personaggio storico presente sia in letteratura sia in storia
dell'arte.
Per ricavare questa informazione è necessario un approccio simile a quello per la
materia.
Target:
A chi è rivolta la lezione: studenti di scuola elementare, medie, superiore ecc...
Per completare questo metadato è possibile inserire un menu a scelta rapida con le varie
opportunità, inizializzato col valore suggerito, ricavato in base alle informazioni che si
hanno sull'autore dell'oggetto. I target potrebbero essere: Tutti, Asilo, Elementare,
Medio, Superiore, Università.
Keywords:
Parole chiave della lezione, sono estratte direttamente dal generatore, si potrebbe
chiedere all'utente un loro controllo di correttezza.
Per i dati di minor importanza lascerò solamente una generazione automatica,
poiché far perdere all'utente troppo tempo è più dannoso di qualche informazione
incompleta, giacché porterebbe l'utente a non inserire il Learning Object.
Organizzazione del Repository
Architettura
In questo capitolo parleremo di com’è stato costruito il repository, analizzando le varie
parti che lo compongono e approfondendo le tecnologie con le quali è stato
implementato.
Per prima cosa è necessario spiegare che il repository è stato realizzato come
un’applicazione stand-alone, cioè viene eseguito come un normale programma, questo
per dare una grande semplicità e facilità d’installazione.
Cosi facendo hanno la massima flessibilità: potrà essere cosi installato su un server di
una scuola, su un computer locale di un docente o anche su un server in internet.
E comunque possibile, per chi volesse, eseguire il respository in un normale web
container.
Analizzando l'applicazione possiamo affermare che è composta di 5 parti principali:
Core:
Si occupa di gestire tutte le richieste e le operazioni, interagendo con le altre parti.
Metadata Generator: E il motore SamgI per la generazione automatica dei metadati
XML Database: Database nel quale sono memorizzati i metadati, in formato XML
secondo lo standard LOM.
SQL Database: Database nel quale sono memorizzate in modo relazionale le
informazioni sugli utenti e su quanto gestito dal respository.
Interfaccia Web: interfaccia realizzata attraverso un sito web per interagire col
repository.
Il core e SamgI sono delle web application e devono essere eseguite in un Web
Container, per questo ho scelto di utilizzare Embedded Glassfish, non richiedendo
all'utente finale l'installazione e la conoscenza di un Web Server.
Lo schema che rappresenta come queste parti interagiscono fra loro e come il tutto è
strutturato è il seguente:
Approfondiamo le parti fondamentali:
Core
Nel core si concentra la logica di funzionamento del repository stesso, e fornisce tutti i
vari servizi e operazioni che sono necessarie nel repository.
Le operazioni fondamentali sono:
•
Gestione degli Utenti
•
Gestione dei Metadati
•
Ricerca
•
Suggerimenti per il completamento dei metadati
•
Scambio di dati con gli altri repository.
Tutto è realizzato in java, e in modo specifico tramite l'utilizzo degli EJB, e ad alto
livello ogni parte fondamentali è in generale organizzata su uno schema a 3 livelli in
modo da ottenere un buon livello di astrazione fra logica di funzionamento e
implementazione:
Al livello superiore c'è per ogni servizio fondamentale un Bean che fornisce l'interfaccia
di funzionamento, la quale ha lo scopo di essere utilizzata direttamente dall'applicazione
web.
Questi Bean per la maggior parte delle operazioni si appoggiano su altri EJB che
forniscono le interfacce per l'accesso e la modifica dei dati, i quali a loro volta
utilizzano degli Entity Bean per l'accesso diretto ai dati, oppure a classi che nello stesso
modo ne forniscono un’interfaccia, come il gestore del database XML e di SamgI.
In pratica l'applicazione è stata realizzata seguendo e utilizzando il semplice pattern
chiamato Facade che letteralmente significa "facciata" e indica un oggetto che permette,
attraverso un'interfaccia più semplice, l'accesso a sottosistemi che espongono interfacce
complesse e molto diverse tra loro, nonché a blocchi di codice complessi.
Prima di addentrarci nel particolare di ogni servizio approfondiamo le tecnologie scelte
e utilizzate nella creazione del repository:
Tecnologie Utilizzate
EJB
Gli Enterprise Java Bean (EJB) sono i componenti che implementano, lato server, la
logica di business all'interno dell'architettura Java EE. Nel mio caso realizzano il core
del repository, cioè il nucleo, ho scelto questa tecnologia perché fornisce
automaticamente molte caratteristiche utili a una veloce e solida implementazione, tra
cui la persistenza, il supporto alle transazioni, la gestione della concorrenza e della
sicurezza l'integrazione con altre tecnologie, come i Web Services. Lo standard attuale è
EJB 3.
Inoltre è una tecnologia ideale per il mio progetto poiché le specifiche EJB intendono
fornire una metodologia standard per implementare la logica di funzionamento delle
applicazioni di tipo enterprise, cioè che forniscono servizi via internet. Per realizzare
applicazioni di questo tipo è necessario affrontare una serie di problematiche tecniche
che possono rivelarsi molto complesse e laboriose da risolvere. Alle quali gli EJB
intendono fornire una soluzione a questi problemi in modo da semplificare lo sviluppo
di questo tipo di applicazioni.
Le specifiche EJB descrivono in dettaglio come realizzare un’applicazione server che
fornisca le seguenti funzionalità:
Persistenza
•
•
Elaborazione delle transazioni
•
Controllo della concorrenzialità
•
Servizio di directory per elencare e nominare gli EJB (JNDI)
•
Sicurezza
•
Installazione di componenti software in un application server
•
Invocazione di procedure remote tramite l'utilizzo di CORBA
•
Fornire servizi Web
Non tutte queste funzionalità sono utilizzate nel mio core, ad esempio l'unita che si
occupa della persistenza è utilizzata per il salvataggio dei dati riguardanti gli utenti, ma
anche per le materie e gli argomenti, cosi come per tutti gli altri dati che hanno bisogno
di essere salvati: ad esempio i possibili livelli di difficoltà di una lezione o i tipi di
applicazione che SamgI può gestire e analizzare. Non ho bisogno di JMS o di CORBA,
pure le transazioni e la concorrenzialità non sono molto importanti in questo progetto,
poiché non si tratta di operazioni critiche nelle quali un errore di questo genere può
causare seri problemi.
Invece utilizzo i Servizi Web per realizzare un software distribuito, e anche JNDI per
richiamare gli EJB dall'interfaccia Web.
Esistono tre tipi di EJB:
EJB di Entità (Entity EJB): il loro scopo è di inglobare gli oggetti sul lato server
•
che memorizzano i dati. Gli Entity Bean forniscono la caratteristica della persistenza.
Sono usati nel core per rappresentare gli utenti, le materie, gli argomenti e salvare i loro
dati in modo persistente su un DB.
•
EJB di sessione (Session EJB): gestiscono l'elaborazione delle informazioni sul
server. Generalmente sono un’interfaccia tra i client e i servizi offerti dagli
elementi disponibili sul server. Ne esistono di due tipi:
Con stato (stateful). I Bean di sessione con stato sono oggetti distribuiti che
•
possiedono uno stato. Lo stato non è persistente, però l'accesso al Bean è limitato a un
unico client. Questo tipo di Bean non è utilizzato pero nel mio progetto, poiché ho
preferito utilizzare solamente Bean stateless e gestirmi autonomamente le sessioni e lo
stato delle operazioni attraverso normali classi java, perché non richiedevo le
caratteristiche di un EJB, dato che sia la sessione sia le operazioni possibili sono
semplici e senza particolari problemi di concorrenza e di sicurezza.
•
Senza stato (stateless). I Bean di sessione senza stato sono oggetti distribuiti
senza uno stato associato, questa caratteristica permette un accesso
concorrente alle funzionalità offerte dal Bean. Non è garantito che il
contenuto delle variabili d’istanza si conservi tra diverse chiamate ai metodi
del Bean. Questo tipo di Bean è utilizzato per implementare tutte le
principali funzionalità offerte dal core, dalla gestione degli utenti alla ricerca.
•
EJB guidati da messaggi (Message driven EJB): sono gli unici Bean con
funzionamento asincrono. Tramite il Java Message Service (JMS), s’iscrivono a
un argomento (topic) o a una coda (queue) e si attivano alla ricezione di un
messaggio inviato all'argomento o alla coda cui sono iscritti. Non richiedono
un’istanziazione da parte dei client. Questi Bean non sono presenti nel
repository.
Per realizzare un software che sia distribuito, ho utilizzato dei Web Service Basati su
session Bean stateless che permettono alle varie istanze del repository di comunicare fra
loro attraverso internet.
Web Services
Un Web Service è un sistema software progettato per supportare l'interoperabilità fra
diversi elaboratori di una medesima rete. Caratteristica fondamentale di un Web Service
è di offrire un'interfaccia software (descritta in un formato automaticamente elaborabile
quale, ad esempio, il WSDL) utilizzabile da altri sistemi, nel mio caso un’altra istanza
del repository può interagire con il Web Service stesso attivando le operazioni descritte
nell'interfaccia tramite appositi "messaggi" inclusi in una "busta": tali messaggi sono,
trasportati sul protocollo HTTP, quindi viaggiano sulla porta 80, solitamente aperta in
tutti i router e le reti. Questo è stato uno dei motivi che mi hanno fatto preferire i Web
Service a sistemi operativo quali CORBA, i quali non lavorano attraverso la porta 80.
Tutti i messaggi fra i WS sono formattati nel formato XML. Quando mi si è presentata
la necessità di scambiare messaggi complessi fra i Web Service ho creato un Xschema
che definisse il formato corretto del messaggio scambiato e ne permettesse un miglior
parsing.
L'elenco dei vantaggi di un utilizzo dei Web Service è il seguente:
•
Sono indipendenti dalla piattaforma sulla quale sono eseguiti.
•
I protocolli sono open e in formato testuale, cosa che li rende di più facile
compressione e utilizzo.
•
Funzione mediante HTTP, non richiedendo modifiche alle regole del firewall.
•
Possono essere facilmente utilizzati in combinazione l'uno con l'altro per creare
servizi complessi.
Gli svantaggi sono principalmente legati a prestazioni generiche peggiori rispetto a RMI
e CORBA.
Database XML
Tutti i meta-dati, descritti nel formato LOM, sono contenuti in un file di tipo xml,
quindi il modo migliore e più semplice per effettuare operazioni su di essi, quali
modifiche, ricerche, inserimenti e cancellazioni è di gestirli attraverso un database
XML.
Io ho scelto di Utilizzare BaseX,
BaseX è un database gratuito, molto leggero e con ottime performance, il quale
implementa uno Xpath e Xquery processor molto avanzato, comprendendo tutte le
nuove specifiche W3C per l'update e specialmente per la ricerca full text all'interno dei
contenuti, parte fondamentale nella mia applicazione.
Schematizzando le caratteristiche di BaseX sono:
•
é un database XML completo di ottime prestazioni.
•
Offre un efficiente e completo supporto per Xpath Xquery.
•
Ha un’architettura client server con transazioni, logging e controllo della
sicurezza.
•
Offra numerosi API: REST/JAX-RX, XQJ, XML:DB.
•
E possibile integrarlo in un progetto attraverso la versione embedded.
Nel repository il database XML è stato integrato con la creazione di un piccolo software
che si occupa della sua installazione, avvio e gestione, la quale è richiamato al momento
dell'avvio del repository stesso. Il metodo di comunicazione fra il core e il Database si
basa attraverso le API JAX-RX, che in pratica sono un insieme di chiamate HTTP. Ogni
operazione richiesta al database dipende dal tipo di richiesta HTTP effettuata:
Per spiegare meglio questo funzionamento supponiamo che il Database sia attivo ed in
ascolto all'indirizzo http://localhost:8984/jax-rx/repositoryDB/: ogni richiesta inviata a
questo indirizzo web locale sarà una operazione effettuata sul database.
Metodo GET:
A richieste di tipo GET sono associate delle query Xpath oppure Xquery la quali devono
essere inserite come parametro di nome “query”.
Ad esempio la query: http://localhost:8984/jax-rx/repositoryDB?query=//LOM/*.
Ritornerà tutti i nodi di nome LOM presenti all'interno del database repositoryDB.
Questo metodo per eseguire le query però è disordinato e scomodo specialmente se si
utilizza Xquery, mentre è molto semplice se si utilizza Xpath. Fortunatamente anche il
metodo post permette di inviare query al database.
Metodo POST:
Attraverso il metodo POST è possibile eseguire 2 tipi di operazioni distinte sul
database: inviare query o comandi.
Per inserire una query si dovrà inserire nel corpo del messaggio un testo XML nella
seguente forma:
Ritorna 5 titoli dei LO presenti nel database.
<query xmlns="http://jax-rx.sourceforge.net">
<text>for $l in //LOM return $l/title</text>
<parameter name="count" value="5"/>
<parameter name="output" value="indent=no"/>
</query>
Questo modo per scrivere risulta, a mio parare più ordinato e comprensibile. Nello
stesso modo è possibile inviare comandi al database. Esempio:
<command xmlns="http://jax-rx.sourceforge.net">
<text>show users</text>
<parameter name="wrap" value="no"/>
</command>
Questo comando mostra tutti gli utenti del database.
Metodo PUT:
Tramite questo metodo si può creare un nuovo database o aggiungere elementi a esso.
Ad esempio per creare un nuovo database di nome Test basterà inviare una richiesta di
tipo PUT all'url http://localhost:8984/jax-rx/Test.
Se invece si volesse aggiungere un documento XML al database, è necessario inviare
una richiesta alla stessa URL, con il documento XML contenuto nel body della
richiesta.
Nello stesso modo, attraverso il metodo DELETE si compie l'operazione inversa.
L'update dei dati si effettua attraverso il metodo POST e un’operazione Xquery Update.
Utilizzo del Database XML nel Core:
Per effettuare tutte queste operazioni ho scritto un Enterprise Bean di tipo singleton che
si occupa di gestire la comunicazione e tutte le operazioni da e per il database, fornendo
una semplice interfaccia per le operazioni descritte in precedenza, in modo tale da poter
effettuare insert, delete, e query senza conoscere nulla del database.
Database Relazionale
Per mantenere le informazioni riguardanti gli utenti, e le altre informazioni che devo
essere memorizzate dall'applicazione ho scelto di utilizzare un database relazionale.
Dopo aver preso in considerazioni i più comuni database quali MySQL, Postgree ecc.,
la mia scelta è ricaduta su Apache Derby, detto anche Java DB, per il fatto di essere
molto leggero e già integrato in java. In questo il server ospitante il repository non deve
preoccuparsi di installare e configurare il database. Lo svantaggio è che Derby non ha le
performances degli altri database ma dato che la mole di dati che deve gestire non è di
grandezza critica questo non è un problema. Inoltre il tipo di database è completamente
separato dall'implementazione del core attraverso una persistence unit. Modificando la
Persistence Unit è possibile cambiare a piacimento il database senza dover modificare
minimamente il codice sorgente del core.
Questo è lo schema delle tabelle presenti nel database.
NextMetadataID: questa semplicissima tabella possiede solo una riga contenente l'id
da assegnare al prossimo LO che verrà inserito, in quanto il database XML non ha un
sistema di gestione automatico degli id, ed è necessario garantire che ogni LOM inserito
nel database sia univoco.
Type: contiene tutti i possibili tipi MIME utilizzabili nel repository. Questa lista è
dinamica e potrebbe espandersi nel caso SamgI riconosca nuovi tipi di applicazioni non
ancora inseriti o utilizzati nel repository. È inizializzata con dei valori standard durante
la prima esecuzione del repository. Es: Pdf, doc, html e altri vari Mime Type.
Target: questa tabella, inizializzata alla prima esecuzione del repository, contiene tutti i
possibili target di una lezione. Ad esempio Elementare, Medie, Superiori ecc...
User: Contiene le informazioni riguardanti un utente registrato, con dei puntatori alla
materia preferita e al target preferito per le sue lezioni.
Subject e Topic: Sono tutte le materie che posso essere scelte nel repository con una
relazione N a N con i possibili argomenti di una materia.
Generatore di Metadati
Il generatore di metadati (AMG) è un software open source nato nel 2005 pensato per
indicizzare la notevole massa di oggetti educativi di cui Ariadne poteva disporre;
analizzandone il contenuto e creando dei metadati.
E stato realizzato da sotto la guida di Erik Duval professore e ricercatore presso
l'università cattolica di Lovanio (Belgio) nonché presidente di Ariadne e membro del
consiglio IEEE LTSC (Il gruppo che si occupa dei Learning Object Metadata).
Si può certamente considerare come una delle più importanti e influenti persone
dell'ambito dei Learning Object.
SamgI è completamente realizzato in Java ed è composto di una serie di piccoli
generatori interni che si occupano dei vari ambiti da analizzare. Si basa su Apache
Lucene per l'estrazione e la ricerca dell’informazione dai vari testi.
Estrattore:
Come prima cosa il generatore cerca di estrarre il testo dai vari documenti, quali doc,
pdf ecc... per questo sono stati realizzati degli estrattori i quali analizzando un generico
file ne estraggono il testo e le proprietà.
Generatori
Successivamente entrano in azioni i vari generatori di metadati tra i quali possiamo
citare un Generatore d’informazioni riguardanti il Mime, uno riguardante le Keyword,
Titolo, Descrizione e anche informazioni base come durata dimensione.
Nonostante funzioni in un modo discreto, presenta dei limiti, che non permettono una
descrizione accurata del metadato.
Non tutti i file sono supportati: da alcuni tipi di file è oggettivamente molto difficile
estrarre numerose informazioni, quali immagini, archivi e file eseguibili.
Se pensiamo a questi tipi di file, risulta impossibile estrarre informazioni significanti in
modo automatico, anche perché potrebbe essere presenti nel codice o magari non esserci
per niente.
Impossibilità di Estrarre Alcune informazioni: di vitale importanza per una buona
classificazione sono la materia e l'argomento, purtroppo queste informazioni molte volte
non sono nemmeno contenute nel file, inoltre in AMG non esiste un sistema che
definisca cosa è una materia e cosa è un argomento, per questo, queste informazioni,
come altre non posso essere generate automaticamente.
Errori di Estrazione: può anche succedere che a volte AMG estragga delle
informazioni che non sono realmente corrette, poiché credo si basi su metodi
probabilistici per definire alcune informazioni.
Complessivamente analizzando i vantaggi e i difetti di questo generatore posso
affermare che fornisce una buona descrizione globale dell'oggetto, la quale pero è
insufficiente quando si scende più nel dettaglio, il quale deve essere inserito
manualmente da un utente che conosce a fondo la risorsa.
Nel progetto il repository è eseguito come un’applicazione web che fornisce delle
servlet per l'analisi di Learning Object. Il core quindi esegue una connessione http
locale per comunicare col generatore. Questo è dovuto al fatto che la distribuzione più
stabile e meglio funzionante che ho trovato di SamgI era quella fornita tramite un file
war dai creatori stessi.
Il generatore è avviato subito prima del caricamento del repository sullo stesso server
web.
Funzionamento del Repository
Gestione degli Utenti
L'utente ha un ruolo centrale nel repository, e questo schema mostra ciò che un utente
può fare:
L'interfaccia per la gestione degli utenti è fornita dal Session Bean UserManager, il
quale mette a disposizione tutte le possibili operazioni quali login, log out,
registrazione, modifica dati ecc...
Le politiche adottate per la gestione e la sicurezza degli utenti sono le seguenti:
•
La registrazione richiede solamente nome utente, password e indirizzo email,
tutte le altre informazioni potranno essere inserite in seguito, cosi facendo si
permette una registrazione veloce e senza problemi.
•
Il nome utente è un dato univoco e permanente, una volta registrati non sarà più
possibile cambiare il proprio nome utente.
•
Le password è salvata in maniera criptato nel database, in tal modo nessuno può
conoscere la password di un altro utente nemmeno se ha accesso al database.
•
Al momento del login è creata una sessione per ogni utente la quale è gestita
internamente in modo molto leggero tramite una tabella degli utenti loggati.
•
Ogni volta che un utente esegue un’operazione, deve fornire l'id che le e stato
assegnato durante il login, questo id viene controllato e se non è corretto
l'operazione non è consentita.
I dati degli utenti sono salvati nel database e gestiti dal rispettivo Entity Bean User in
quale si occupa automaticamente della gestione della persistenza e della tabella.
Gestione dei Meta-dati
Questa parte riguarda principalmente la generazione di meta-dati, il salvataggio nel
database e la loro cancellazione.
Generazione
Quest’operazione è fondamentale nel repository e viene suddivisa in 3 distinte fasi le
quali hanno bisogno dell’interazione dell'utente:
Generazione Automatica:
In questa prima fase viene analizzato dal Generatore SamgI il Learning Object che
dovrà essere inserito nel repository, ottenendo cosi una prima “grezza” versione. La
quale è salvata in sessione in attesa di essere raffinata nella seconda fase.
Completamento
In questa seconda fase vengono arricchiti i meta-dati generati automaticamente,
attraverso un inserimento e modifica dei campi ritenuti più importanti quali: Titolo,
Parole Chiave, Materia e Argomenti, Tipo di File, Target, Licenza e tipo di lezione.
Per aiutare l'utente nella scelta e nel complemento sono forniti automaticamente dei
suggerimenti attraverso un apposito sistema implementato nel Suggest Bean il quale
fornisce, per ognuno dei principali campi da analizzare alcuni suggerimenti e aiuti:
Titolo:
Ho pensato che i possibili titoli che il Learning Object può avere si possono estrarre in 2
modi: Il primo e solitamente più corretto è il titolo che viene estratto dal generatore
analizzando il LO, ma non sempre è possibile, per questo, viene anche inserito come
suggerimento il nome del file, opportunamente formattato e ripulito dell'estensione.
Esempio: un file di nome La_dinastia_Carpentigia_di_Francia.pdf diverrà: La dinastia Carpentigia di
Francia
In molti casi quanto viene suggerito tramite questi 2 modi è corretto, negli altri casi sarà
compito dell'utente scrivere un titolo consono.
Targhet, Tipo di Lezione Materia ed Argomenti
Questi dati possono essere accomunati perché presentano circa le stesse problematiche e
caratteristiche e sono informazioni che non possono essere individuate in nessun modo
dal generatore automatico. Per questo i suggerimenti si compongono nel seguente
modo:
Dapprima viene suggerito il valore di default per l'utente, successivamente sono inseriti
gli altri valori, in base alla loro frequenza di utilizzo da parte dell'utente e in generale
negli altri meta-dati inseriti.
Per il tipo di lezione inoltre viene analizzata l'estensione e associata all'evento più
probabile, ad esempio se si tratta di un file di testo è probabile che la lezione sia una
lettura, se è un foglio elettronico potrebbe trattarsi di un’esercitazione, se è una
presentazione potrebbe essere una lezione per l'autoapprendimento o di un’esposizione
in classe e cosi via.
Keywords
Le keyword vengono estratte automaticamente dal generatore, per questo all'utente è
solamente chiesto di controllare quanto già estratto, dando la possibilità di inserirle o
cancellarle in modo di avere un controllo di qualità delle stesse.
Tipo di applicazione
Questa informazione è estratta dall'estensione del file, in ogni modo è stato necessario
valutare la possibilità che siano inseriti elementi con estensione sconosciuta al
repository,
per
questo
dapprima
viene
suggerito
il
tipo
(MIME)
rilevato
dall'applicazione, ma vengono anche resi disponibili altri formati per la scelta
dell'utente.
Casi particolari: esiste un caso particolare ed è dato da risorse che sono generate
dinamicamente da servlet web. Questa situazione è stata gestita identificando le servlet
e analizzando quanto sa esse generato.
Questi metodi per i suggerimenti possono sembrare molto grezzi ma questo è dovuto
principalmente al fatto che un LO può essere qualsiasi cosa, da un video a una
presentazione o a widget per sankore, questo porta a lavorare a un altissimo livello di
astrazione rispetto alla risorsa non avendo idea di che cosa si tratti.
Ovviamente se si trattasse di un repository per soli file Pdf, si potrebbe pensare di
analizzare il file e fornire suggerimenti molto più esatti e complessi.
Inserimento
L'inserimento consiste nell'aggiunta dei meta-dati nel database XML, associando a
ognuno di essi un id e un riferimento all'utente in modo da garantirne l'unicità.
In questa fase viene anche gestita l'URL alla risorsa con una distinzione fra risorse locali
e remote.
L'indirizzo alla risorsa locale varia se cambia l'indirizzo IP del repository. Ma una
risorsa deve essere sempre disponibile e utilizzabile, per questo ad ogni indirizzo locale
verrà associato un pattern il quale indica che ogni volta che viene richiesta quella risorsa
l'URL deve essere trasformato in un indirizzo che punta alla macchina locale. Per
risorse remote invece non può eseguita nessuna operazione e viene utilizzato l'URL
inserito durante la fase di generazione.
Licenza:
Ai Learning Object presenti nel repository posso essere assegnate 2 tipi di licenza
diversi:
Licenza pubblica:
Con questa licenza di tipo creative commons una risorsa diventa pubblica e aperta a tutti
e tutti gli utenti che vogliono utilizzarla devono seguire le seguenti direttive imposte
dalla licenza:
Si è liberi di:
•
Riprodurre
•
Distribuire
•
Comunicare al pubblico
•
Esporre in pubblico
•
Rappresentare
•
Eseguire e recitare quest'opera
•
Modificare quest'opera
Alle seguenti Condizioni:
•
Devi attribuire la paternità dell'opera nei modi indicati dall'autore o da chi
ti ha dato l'opera in licenza e in modo tale da non suggerire che essi avallino
te o il modo in cui tu usi l'opera.
•
Non puoi usare quest'opera per fini commerciali.
•
Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi
distribuire l'opera risultante solo con una licenza identica o equivalente a
questa.
Prendendo atto che:
•
E' possibile rinunciare a qualunque delle condizioni sopra descritte se ottieni
l'autorizzazione dal detentore dei diritti.
•
Nel caso in cui l'opera o qualunque delle sue componenti siano nel pubblico
dominio secondo la legge vigente, tale condizione non è in alcun modo
modificata dalla licenza.
La licenza non ha effetto sui seguenti diritti:
•
Le eccezioni, libere utilizzazioni e le altre utilizzazioni consentite dalla legge sul
diritto d'autore;
•
I diritti morali dell'autore
•
diritti che altre persone possono avere sia sull'opera stessa che su come l'opera
viene utilizzata, come il diritto all'immagine o alla tutela dei dati personali.
Licenza Privata:
Con questa licenza il Learning Object resta confinato all'interno del repository e
solamente gli utenti registrati a esso potranno accedervi e utilizzarla e si è liberi di:
•
Riprodurre
•
Comunicare al pubblico
•
Esporre in pubblico
•
Rappresentare
•
Eseguire e recitare quest'opera
•
Modificare quest'opera
Alle seguenti Condizioni:
•
L'opera, può essere utilizzata, esposta, eseguita solamente all'interno del
contesto nel quale il repository si riferisce, ad esempio se si tratta di un
repository di Learning Object per l'Università di Trento l'opera potrà essere
utilizzata solamente all'interno ditale università, e non ci potrà essere nessun
utilizzo al di fuori di tale contesto.
•
Devi attribuire la paternità dell'opera nei modi indicati dall'autore o da chi
ti ha dato l'opera in licenza e in modo tale da non suggerire che essi avallino
te o il modo in cui tu usi l'opera.
•
Non puoi usare quest'opera per fini commerciali.
•
Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi
distribuire l'opera risultante solo con una licenza identica o equivalente a
questa.
Prendendo atto che:
•
E' possibile rinunciare a qualunque delle condizioni sopra descritte se ottieni
l'autorizzazione dal detentore dei diritti.
•
Nel caso in cui l'opera o qualunque delle sue componenti siano nel pubblico
dominio secondo la legge vigente, tale condizione non è in alcun modo
modificata dalla licenza.
La licenza non ha effetto sui seguenti diritti:
•
Le eccezioni, libere utilizzazioni e le altre utilizzazioni consentite dalla legge sul
diritto d'autore;
•
I diritti morali dell'autore
•
diritti che altre persone possono avere sia sull'opera stessa che su come l'opera
viene utilizzata, come il diritto all'immagine o alla tutela dei dati personali.
Ricerca:
Sono stati implementati 2 tipi di ricerca: Semplice e Avanzata.
Ricerca Semplice:
Consiste nel ricercare i LO secondo una parola o un insieme di parole, e si basa su una
ricerca di tipo full text scegliendo quelli che contengono la parola ricercata. Per
aumentare la possibilità di successo la ricerca è di tipo fuzzy, questo significa che viene
fatta anche una ricerca approssimata della parola ricercata, in modo da essere flessibile a
errori di scrittura da parte dell'utente, o a parole che potrebbero essere scritte al plurale
invece che al singolare ecc.
Questa ricerca approssimata è basata sulla distanza di Levenshtein, dove il massimo
numero di errori permessi in una stringa è calcolato dividendo la lunghezza della stringa
per 4, preservando pero un minimo di 1.
L'ordinamento di questi risultati tiene conto di quante volte la parola ricercata compare
all'interno del meta-dato.
Approfondimento distanza di Levenshtein
La distanza di Levenshtein, o distanza di edit, è una misura per la differenza fra due
stringhe. Introdotta dallo scienziato russo Vladimir Levenshtein nel 1965, serve a
determinare quanto due stringhe siano simili.
La distanza tra due stringhe A e B è il numero minimo di modifiche elementari che
consentono di trasformare la A nella B. Per modifica elementare s’intende
La cancellazione di un carattere,
•
•
La sostituzione di un carattere con un altro
•
L'inserimento di un carattere.
Per esempio, per trasformare "bar" in "biro" occorrono due modifiche:
1.
"bar" -> "bir" (sostituzione di 'a' con 'i')
2. "bir" -> "biro" (inserimento di 'o')
Ricerca Avanzata
Questo tipo di ricerca è più complesso, e permette, oltre ad inserire una parola di ricerca
full text di scegliere direttamente molte caratteristiche del LO, quali target, materia e
argomenti, tipo di applicazione e tipo di lezione.
Nell'esecuzione di questa ricerca vengono analizzati i campi specifici di ogni LOM e
sono confrontati con quanto scelto dall'utente.
Search Options
Queste informazioni sono fondamentali per la ricerca avanzata e servono per fornire
all'utente le possibili scelte sulle quali potrà effettuare una ricerca avanzata.
Ad esempio se nel repository sono presenti 3 lezioni pdf e 1 widget per Lavagne
Interattive nella scelta del tipo di applicazione ci sarà:
Esempio di Search Options riguardanti il
tipo di file.
Questi valori tengono conto anche di quanto è presente negli altri repository attraverso
un protocollo distribuito con il quale vengono scambiate queste informazioni.
Il risultato viene poi filtrato in base alle licenze, così un utente registrato vedrà le
opzioni riguardanti tutti i learning Object, mentre un utente non registrato vedrà solo
quelle riguardanti i learning object con licenza pubblica.
Cosi facendo ogni utente vede informazioni corrette e si riduce cosi la possibilità di
effettuare ricerche con risultato nullo.
La gestione e generazione di queste informazioni è gestita dall'enterprise Bean
SearchOptions il quale si occupa di creare queste informazioni analizzando il proprio
database e cercando quelle dei repository a esso collegati.
Generare queste informazioni è un’operazione complessa che richiede del tempo, per
questo è stato implementato un sistema di caching che le memorizza e le aggiorna
quando necessario, es: cancellazione o inserimento di un nuovo LO, e a tempo per
quanto riguarda le informazioni contenute negli altri repository.
Funzionamento Software Distribuito
Per far sì che i repository possano comunicare fra loro, in modo da favore lo scambio di
Learning Object fra le varie istanze e permettere una miglior disponibilità e diffusione
delle risorse è stato pensato di realizzare il repository in maniera distribuita.
I repository sono stati cosi organizzati in maniera gerarchica realizzando un albero dove
ogni elemento può avere un solo padre e un numero illimitato di figli. Non esiste un
repository server, ma sono tutte istanze identiche, le quali si occupano sia da fare da
padre ai propri figli, che da figlio al proprio padre, cosi facendo non sono necessarie
implementazioni differenti in base alla posizione gerarchica.
Esempio di Albero dei
Repository
All'avvio ogni repository tenta una connessione al padre. Se questa connessione dovesse
fallire, sarà riprovata a intervalli di 10 minuti, inoltre ogni repository è sempre in
ascolto delle richieste di connessione di un figlio.
Livelli di astrazione:
Ogni istanza comunica solamente con il proprio padre e i figli, tutti gli altri sono
nascosti poiché la comunicazione con quei repository è gestita in modo trasparente dal
padre o dal figlio. In tal modo un repository non deve conoscere tutta la topologia della
rete distribuita, ma comunica solamente con i suoi “vicini” i quali a loro volta si faranno
carico di comunicare con i loro “vicini” e cosi via.
Per esempio nell'esecuzione di una query distribuita il repository invia la richiesta al
padre i ai figli i quali faranno lo stesso estendendo cosi la query a tutta la rete di
repository, facendo sempre attenzione a non creare cicli i quali porterebbero a uno stallo
del sistema.
I risultati di una ricerca sono combinati con quelli degli altri repository creando il
risultato finale.
Questo tipo d’implementazione è semplice ma porterebbe ad avere scarse performances
in caso di una rete con molti nodi, e a mancanza di dati nel caso una delle istanze
dovesse andare off line.
Quindi nel caso la rete dovesse espandersi, sarebbe meglio modificare questa
implementazione con una centralizzata che sarà discussa nel prossimo paragrafo.
Possibile altra implementazione: Centralizzazione
Un'idea per sopperire ai limiti dell'implementazione completamente distribuita è quella
di centralizzare tutti i Learning Objects pubblici nella radice, in questo modo nei
repository figli restano solamente i LO privati che non devono uscire da esso, mentre
quelli pubblici sono copiati dal padre, in quale ne acquisisce i compiti di gestione. Cosi
facendo si avrebbe un grande repository centrale il quale gestisce tutte le risorse
pubbliche.
Le query verrebbero cosi effettuate su un solo repository, e non su un numero pari alla
grandezza della rete riducendo di molto i tempi. Inoltre in caso di caduta di un nodo le
risorse resterebbero comunque disponibili.
Interfaccia Web
Si tratta di un sito web realizzato per permettere l'utilizzo del repository con le
tecnologie JSF 2.0 e Ajax.
L'interfaccia permette di registrarsi, gestire il proprio account, inserire e ricercare i
Learning Object, ed è pensata per essere il più semplice e intuitiva possibile, rendondo
tutte le operazioni semplici veloci e naturali.
Iniziamo con un approfondimento riguardante le tecnologie e le scelte architetturali
utilizzate:
Framework:
Lo scopo di un framework è di risparmiare allo sviluppatore la riscrittura di
codice già steso in precedenza per compiti simili. In questo modo ho semplificato la
realizzazione del sito web riducendone il tempo di sviluppo.
Il principale framework utilizzato è JSF2
JSF:
Jsf è una tecnologia java basata sul pattern architetturale Model-View-Controller
(MVC). Il suo scopo è di semplificare lo sviluppo dell'interfaccia utente di una
applicazione Web.
Jsf prevede un ampio insieme di classi e relative API che permettono di:
•
Definire i componenti dell’interfaccia utente (UI), gestire il mantenimento del
relativo stato e il verificarsi dei relativi eventi.
•
Semplificare il sistema di gestione della navigazione tra le pagine della web
application;
•
Realizzare dei componenti personalizzati (Custom Component), che estendano e
potenzino le funzionalità delle classi base del framework;
•
Supportare l’internazionalizzazione e l’accessibilità dell'applicazione.
L'architettura di un'applicazione è stratificata su 3 livelli gerarchicamente
crescenti.
Alla base della gerarchia ci sono le servlet, mentre salendo troviamo il livello delle JSP
e all'apice la tecnologia JSF. L'utilizzo di JSF facilita lo sviluppatore nel suo lavoro
poiché consente di:
•
Gestire eventi, basandosi su Java Beans;
•
Utilizzare l’EL (Expression Language) per la realizzazione del valuebinding e il
method-binding, mediante il quale è possibile legare le proprietà dei componenti
dell’UI, rappresentati con tag nelle pagine, direttamente con la business logic.
•
Analizzare il ciclo di vita di una richiesta, ben definito attraverso una serie di
fasi, e recuperare in ogni istante le variabili d’interesse per la logica
dell'applicazione;
•
Utilizzare i backing beans (managed beans) costituenti la business logic, con la
possibilità di istanziarli in un qualsiasi momento on demand.
In JSF 2 è pero possibile sostituire il livello di JSP con un livello più avanzato, che e
facelets, permettendo cosi di realizzare pagine più ordinate ed efficienti:
Quest’opportunità di abbandonare JSP all'inizio mi è sembrata strana, in quando per
abitudine da sempre sia dai corsi universitari sia da quelli alle superiori mi hanno
sempre insegnato Java + JSP per realizzare un’applicazione web dinamica.
Ma Jsp ha sempre avuto dei limiti, che appaiono sempre più chiari nella realizzazione di
applicazioni Web 2.0 quali in primo luogo l’impossibilita di realizzare Template, ed
anche altri problemi riguardanti il ciclo di vita di una pagina: Java Server Facies a
differenza di JSP che processa gli elementi di una pagina nell’ordine in cui questi
appaiono, organizza i componenti in una complessa struttura ad albero.
Per questo è stato creato Facelets che risolve e migliora i seguenti aspetti riguardo a
JSP:
• indipendenza dal web container
• compatibilità con qualsiasi versione JSF
• tempi di compilazione più veloci
• supporto per il templating
• supporto di Expression Language
Le pagine di Facelets sono in formato Xhtml quindi sono well formed e non possono
contenere codice come jsp ma solamente tag. Questa cosa le rende molto piu ordinate e
comprensibili, inoltre migliora la distinzione fra visualizzazione e logica, riducendo cosi
anche gli errori di programmazione.
Framework per Ajax
Questa è stata la parte più e difficile nella scelta dei framework, poiché esistono
moltissimi framework tutti con diversi pregi e difetti. Io conoscevo già una libreria, con
la quale avevo già grande familiarità e confidenza: RichFaces.
Ho iniziato quindi a realizzare l'applicazione con richfaces, ma poi nei test ho notato che
era troppo dipendente dall'ambiente di esecuzione.
Quindi ho iniziato a testare altri framework per java e dopo numerose prove, ho scelto
di utilizzare IceFaces, perché è il piu semplice da configurare e offre una maggiore
portabilità fra i diversi container.
IceFaces
IceFaces è un framework open source che viene utilizzato dai programmatori Java EE
per creare Rich Internet Application (RIA) usando il linguaggio Java.
IceFaces sfrutta l'intero ecosistema di tool e ambienti di esecuzione basati su standard
JavaEE. Permette di sviluppare applicazioni RIA con numerose caratteristiche
sviluppate in Java senza bisogno di applet o plug-in proprietari da integrare nel
Browser. Le applicazioni IceFaces sono applicazioni JSF così che non ci sia bisogno
dell'utilizzo di Java script, inoltre il meccanismo che sta alla base (Ajax) è
completamente trasparente allo sviluppatore.
Il cuore di IceFaces è formato da tre elementi:
1.
Il Framework IceFaces
Questo è un'estensione del framework standard JSF con la fondamentale differenza con
cui è trattata la fase di rendering. Diversamente da JSF il rendering avviene nel DOM
lato server e solo cambiamenti parziali sono lasciati al browser e in seguito assemblati
con un bridge Ajax molto leggero. Il risultato è un render fluido, effettuato solo su certi
elementi della pagina. Ajax utilizza le Api inizializzate dal server e integra il
meccanismo similmente al cycle di JSF.
2. Il Bridge Ajax
Presenta elementi lato server e lato client che coordinano la comunicazione (basata su
Ajax) fra il browser del client e l'applicazione lato server. Il Bridge quindi si occupa di
apportare i cambiamenti alla presentazione dalla fase di rendering al browser del client e
del riassemblamento di questi cambiamenti nel DOM del browser per applicare i
cambiamenti. Inoltre ha il compito di rilevare le interazioni dell'utente con la
presentazione e di portare le azioni dell'utente indietro all'applicazione per essere
processate dal JSF lifecycle. Un meccanismo chiamato partial submit è integrato nei
componenti di IceFaces e facilita la generazione di eventi attraverso il bridge. La prima
volta che la pagina viene caricata viene creato il bridge Ajax e coordina gli
aggiornamenti della presentazione e la trasmissione degli eventi dell'utente per tutto il
lifetime dell'applicazione.
3. La Suite di componenti di IceFaces
La suite di componenti fornisce tutti i componenti per la costruzione dell'interfaccia
grafica dell'applicazione. Include sia i componenti standard di Jsf e una vasta gamma di
componenti che consente allo sviluppatore di costruire applicazioni sofisticate e
dall'interfaccia intuitiva. Oltre al meccanismo succitato dell'interazione diretta con il
DOM i componenti possono utilizzare un set di effetti come il drag and drop tutto ciò
con la semplice modifica di attributi così che non si debba mai ricorrere a Java script.
Purtroppo non tutto IceFaces è libero, tutti i componenti base sono liberi e accessibili,
invece alcuni componenti avanzati sono disponibili solo a pagamento, comunque con un
po’ di pratica nei componente base è possibile ricrearsi numerosi componenti avanzati.
Un altro punto di forza di IceFaces è la perfetta integrazione in NetBeans attraverso
un’estensione. In questo modo molte fasi d’installazione e configurazione sono
automatizzate rendendone semplice l'utilizzo e l'installazione.
Per riassumere questo è lo schema a livelli dell'applicazione web:
Presentation Tier
Request Controller
State Management
Funzionamento delle parti principali dell'applicazione web:
Registrazione:
La form di registrazione richiede nome utente, password ed email.
Questi dati sono controllati e in caso siano corretti, si viene registrati al repository e
automaticamente loggati.
In caso di errori essi saranno segnalati affianco del campo errato: Il nome utente deve
essere univoco ad avere almeno 4 caratteri, la password ha una lunghezza minima di 5 e
l'indirizzo email deve essere in un formato valido.
Dopo aver completato la registrazione, è consigliabile completare i propri dati per
ottenere un inserimento di risorse più agile e veloce.
Form per la registrazione al Repository
Login
Nel caso l'utente non sia loggato, nel box Pannello utente apparirà la form di login, la
quale permette anche di accedere alla registrazione.
Il login necessità di username e password e permette, attraverso l'opzione remember me
di essere loggati in automatico nei futuri accessi, questo avviene attraverso un popup
sicuro che viene salvato nel browser lato client con lo scopo di identificare l'utente. E
inoltra disponibile una procedura per il recupero della password, nel caso sia stata
dimenticata dall'utente, o inserita in modo errato in fase di registrazione.
Form per il login
Pannello Utente
Quando un utente è loggato, la form per il login è sostituita con una lista delle
operazioni che è possibile effettuare:
•
Aggiungere un nuovo Learning Object
•
Modificare i Propri dati
•
Modificare i propri Learning Object
•
Eseguire il Log out
Pannello Utente
Aggiunta di un nuovo Learning Object:
Quest’operazione è suddivisa in 3 diversi fasi:
La prima, riguardante l'upload della risorsa presenta la seguente schermata che ne
permette il caricamento da url oppure dal pc dell'utente:
Aggiunta di un nuovo Learning Object: Upload di una risorsa
L'inserimento da url è immediato, una volta cliccato su analizza verrà controllata la
correttezza del percorso inserito, in caso affermativo il learning object verrà analizzato
dal generatore SamgI e si potrà passare alla fase 2.
Nel caso che invece si esegue l'upload di un Lo dal pc locale, si aprirà un popup con lo
scopo di gestire quest’operazione. Una volta terminata, analogamente all'inserimento da
url la risorsa sarà analizzata e si potrà cosi procedere alla fase 2.
Upload di un Lo
La seconda parte riguarda il completamento dei metadati: dopo aver eseguito l'analisi
del Lo sono suggerite le varie opzioni e si richiede un controllo da parte dell'utente.
Aggiunta di un nuovo Learning Object: Inserimento dei Metadati
Come si può notare dall'immagine precedente è richiesto all'utente di controllare le
informazioni di maggiore importanza per la classificazione della risorsa, le altre
informazioni raccolte dal generatore, di minor importanza non vengono mostrate
all'utente, ma sono comunque salvate nel database per avere una più completa
descrizione del Lo.
Confermando questi dati si passa alla parte 3, nella quale viene semplicemente richiesto
di confermare l'inserimento e di scegliere la licenza da applicare al Learning Object
appena inserito:
Aggiunta di un nuovo Learning Object: Scelta della licenza
I tuoi dati
Questa pagina permette di modificare indirizzo email e password, inoltre offre la
possibilità di assegnare la materia e il livello d’insegnamento di default per le risorse
che saranno inserite dall'utente.
Non è invece consentito modificare il nome utente, perché trattasi di un dato univoco
nel repository, il quale è necessario per l'identificazione dell'utente.
Pagina per la modifica dei propri dati personali
Ricerca
Come già spiegato in precedenza, esistono 2
tipi di ricerca: Semplice e Avanzata la form per la ricerca è banale, e basta inserire la
parola e frase cercata, mentre per la ricerca avanzato è necessario scegliere i valori dei
campi desiderati come mostrato nella seguente immagine.
From per la ricerca
Risultati di una ricerca / I tuoi Learning Object
In questa pagina sono mostrati i risultati di una qualsiasi ricerca, mostrando i risultati e
le più importanti informazioni a essi associate, quali titolo, materie e argomenti, ecc...
Da qui è possibile scaricarli direttamente, oppure cliccando sul titolo si accede a una
pagina di approfondimento, contente maggiori informazioni, discussioni e pareri di altri
utenti riguardanti tale risorsa.
Risultati di una Ricerca
Nel caso della pagina che mostra i tuoi Learning Objects, per ogni risorsa vi è la
possibilità di cancellarla o modificarla attraverso degli appositi bottoni.
Dettagli di un Learning Object
Questa è la pagina principale e più dettagliata per la consultazione di un LO, vi sono
mostrate tutte le principali informazioni, i vari commenti e le recensioni date dagli
utenti come feedback. In questo modo oltre ad avere informazioni riguardanti la risorsa,
possiamo farci un’idea della sua qualità e dell'apprezzamento degli altri utenti che ne
hanno usufruito.
È inoltre data la possibilità di contattare direttamente l'autore per porre domande o
mandargli qualche segnalazione attraverso un popup disponibile solamente ai membri
della comunità. Per la sicurezza dell'autore non sarà mostrata la sua mail, ma l'invio
verrà gestito dal repository, in tal modo non viene reso pubblico l'indirizzo, evitando
cosi che spammer o malintenzionati possano disporre direttamente di quell'email. Cosi
facendo viene inoltra salvaguardata la privacy dell'autore.
D
ettagli riguardanti il Learning Object
Form per l'invio di una mail
all'autore
Integrazione Facebook
Per dare un feedback alle risorse e favorire la discussione, il confronto e il commento
delle stesse ho scelto di utilizzare alcuni plug-in sociali offerti da Facebook, in
particolare il famoso Like e la possibilità di aggiungere commenti.
In questo modo è data agli utenti la possibilità di segnalare le risorse migliori o quelle
scadenti, realizzando cosi un sistema di controllo della qualità.
L'integrazione di questi componenti è stata relativamente semplice: Facebook mette a
disposizione delle api per gli sviluppatori con un set di componenti standard tramite
FBML, una libreria di tag contenenti tutti i plug-in base per la costruzione di un sito
web sociale collegato a Facebook.
Purtroppo questi componenti sono pensati per ambianti di sviluppo quali Php e simili e
non risultano funzionanti su Jsf, per questo ho dovuto spendere del tempo nel creare un
sistema che permettesse di inserire questi componenti nella mia applicazione web.
Il sistema si basa principalmente sull'utilizzo di un frame che richiama una pagina
esterna, con delle routines Java script riesco a creare il codice FBML per associare un
learning object alle proprie risorse Facebook.
I componenti che sono stati utilizzati sono:
Like Button:
Questo pulsante permette di condividere il Lo con i tuoi amici in Facebook, quando
l'utente clicca su questo pulsante, sarà creato un post all'interno delle news dei tuoi
amici in Facebook contenente un link al Learning Object.
Inoltre verrà tenuto conto di quante persone hanno condiviso questa risorsa con i propri
amici, più questo numero sarà elevato più alta sarà la qualità della risorsa.
Sarebbe interessante sviluppare un sistema di ordinamento dei Lo in base alla loro
popolarità, in modo da fornire come prima scelta le risorse che sono più popolari e
meglio giudicate dagli altri utenti.
Esempio di Like button
associato a un Learning Object.
Comments:
Si tratta di un plug-in sociale che permette di inserire i commenti in una qualunque
pagina del sito, permettendo anche un controllo della discussione da parte di un
moderatore.
Rilevanza sociale
Il componente mostra per primi i commenti di più alta rilevanza per l'utente,
ordinandoli per mostrare prima i commenti dei propri amici, di amici di amici, i più
votati. I commenti segnalati come spam saranno nascosti.
Distribuzione:
I commenti saranno facilmente condivisi con i tuoi amici in quando è possibile,
attraverso l'opzione “Pubblica su Facebook” inviare la discussione sulle news dei Propri
amici all'interno di Facebook i quali potranno, senza accedere al repository contribuire
alla discussione.
Barra
dei Commenti associata a un Learning Object.
Launcher
Si tratta del programma con il compito di avviare il Repository.
Per far questo esegue l'avvio di Embedded Glassfish e carica su di essa il generatore di
meta-dati, il core e l'interfaccia web. Inoltre avvia anche il database XML.
Embedded Glassfish:
Si tratta della versione embedded del famoso Web Server Glassfish 3.1, il quale è
completo di tutte le funzionalità della versione normale (Jax-Rx, EJB container, JSP
container, Java DB integrato, ecc.) e può essere utilizzato e controllato tramite le
Embedded API.
Il funzionamento di embedded Glassfish è analogo al funzionamento di Glassfish
normale, e si basa sullo stesso dominio di esecuzione.
Il dominio di esecuzione è un albero di cartelle e di file di configurazione nel quale può
essere eseguita.
Anche se Embedded Glassfish può crearsi un dominio virtuale, è buona norma
assegnarne a essa uno già configurato, giacché permette di personalizzarne il
funzionamento nel dettaglio e di mantenere i dati fra diversi deploy della stessa
applicazione web.
Per questo, la prima cosa che è fatta dal Launcher è creare manualmente un dominio nel
caso che esso non esista ancora (es: Primo avvio dell'applicazione).
Questa creazione è relativamente semplice ed è suddivisibile in 3 passi:
•
Creazione dell'albero delle directory di esecuzione (domain/domain1 ecc...)
•
Configurazione del dominio, tramite la copia dei file di configurazione del
dominio da me scritti: es domain.xml nel quale viene principalmente specificata
la porta di esecuzione e il connection pool per la connessione al database.
•
Copia delle librerie necessarie al funzionamento delle applicazioni web che
saranno successivamente caricate nella cartella lib.
Dato che il database è integrato in Glassfish, una cancellazione manuale del dominio di
esecuzione di Glassfish porterebbe a una perdita di tutti i dati contenuti nel database
relazionale.
In seguito è avviata un’istanza di Glassfish sul dominio da me creato, la quale leggendo
il file config.xml si configurerà nel modo opportuno.
Avvio di SamgI e del Repository
Dopo aver eseguito un corretto avvio di Glassfish, viene caricato il generatore di
metadati, presente nel file amg.war.
Anche quest’operazione è banale: attraverso le api fornite da Glassfish, è necessario
solamente il path per il war ed esso sarà automaticamente caricato. Dato che le librerie
necessarie e le configurazioni sono già state settate in fase di avvio, non sono necessarie
ulteriori operazioni.
Lo stesso vale per il deploy del core e dell'interfaccia web i quali sono contenuti nel file
RepositoryDiLezioni.aer.
Una volta avviato il tutto il repository sarà attivo e sarà possibile accedervi attraverso
delle pagine web.
Conclusioni
Concludendo si può affermare che questo repository, inserito nel più grande ambito di
Wii4dida, è come un piccolo mattoncino che fa evolvere il progetto.
Anche se siamo ancora agli inizi, e i grandi cambiamenti si fanno lentamente a passo a
passo, penso di aver realizzato un’applicazione che potrà essere utile per la diffusione
delle Lim, e che pone la base per lo scambio e la classificazione dei Learning Object.
L'applicazione presentata in questa tesi è stata implementata sempre pensando
all'utilizzo da parte di un utente finale senza particolari conoscenze informatiche,
ponendo l'attenzione alla semplicità dell'utilizzo e alla portabilità del codice, che deve
poter essere eseguito su molti server indipendentemente dalle caratteristiche tecniche
della macchina e dalle conoscenze informatiche dell'utilizzatore.
Bibliografia
•
Wikipedia
-
http://it.wikipedia.org
•
Ariadne
-
http://www.ariadne-eu.org/
•
Referenze per i Metadati
http://ltsc.ieee.org/wg12/files/LOM_1484_12_1_v1_Final_Draft.pdf
•
Implementazione Java per Lom -
•
Creazione dell'applicazione Web - http://platform.netbeans.org/tutorials
•
Librearia Ajax Ice Faces
•
XML Db e Xquery Tutorials -
•
Embedded Glassfish Tutorials - http://download.oracle.com/docs/cd/E1979801/821-1754/gihyz/index.html
-
http://sourceforge.net/projects/lom-j/
http://www.icefaces.org/
http://basex.org/
Indice Analitico
Indice analitico
Aggiunta di un nuovo Learning Object:..........................................................................49
Architettura......................................................................................................................19
Argomenti........................................................................................................................34
Argomento.......................................................................................................................18
Ariadne............................................................................................................................14
Avvio ...............................................................................................................................59
Bibliografia......................................................................................................................60
Centralizzazione..............................................................................................................42
Comments........................................................................................................................57
Conclusioni......................................................................................................................59
Connexion........................................................................................................................14
Core.......................................................................................................................19 e seg.
Database Relazionale.......................................................................................................27
Database XML.................................................................................................................24
Dom...................................................................................................................................9
EJB .................................................................................................................................21
EJB di Entità....................................................................................................................22
EJB di sessione................................................................................................................23
EJB guidati da messaggi..................................................................................................23
Embedded Glassfish........................................................................................................58
Errori di Estrazione..........................................................................................................31
Estrattore..........................................................................................................................30
Facebook..........................................................................................................................56
Facelets............................................................................................................................45
Framework.......................................................................................................................43
Framework per Ajax........................................................................................................45
Generatore di Metadati....................................................................................................29
Generatori........................................................................................................................30
generazione assistita di meta-dati ...................................................................................16
Generazione Automatica..................................................................................................33
Generazione dei Metadati................................................................................................16
Gestione degli Utenti.......................................................................................................31
Gestione dei Meta-dati.....................................................................................................33
IceFaces...........................................................................................................................45
Implementazione di LOM.................................................................................................9
Inserimento......................................................................................................................35
Interfaccia Web................................................................................................................43
JaxB...................................................................................................................................9
JSF...................................................................................................................................43
Keywords...................................................................................................................18, 34
Launcher..........................................................................................................................57
Le Mill.............................................................................................................................13
Learning Object.................................................................................................................7
Licenza.............................................................................................................................35
Licenza Privata................................................................................................................37
Licenza pubblica..............................................................................................................36
Like Button......................................................................................................................56
Login................................................................................................................................48
LOM..................................................................................................................................7
Materia.............................................................................................................................34
Materia: ...........................................................................................................................17
Merlot..............................................................................................................................12
Metodo GET:...................................................................................................................25
Metodo POST..................................................................................................................26
Metodo PUT....................................................................................................................26
Pannello Utente................................................................................................................49
Registrazione...................................................................................................................47
Ricerca.......................................................................................................................38, 53
Ricerca Avanzata.............................................................................................................39
Ricerca Semplice.............................................................................................................38
Risultati di una ricerca.....................................................................................................53
SAX...................................................................................................................................9
Search Options.................................................................................................................39
SLIM4DIDA......................................................................................................................5
Software Distribuito........................................................................................................41
Target...............................................................................................................................18
Targhet.............................................................................................................................34
Tipo di applicazione........................................................................................................34
Tipo di Lezione................................................................................................................34
Tipo Oggetto: ..................................................................................................................17
Titolo................................................................................................................................34
tuoi dati............................................................................................................................52
VCARD...........................................................................................................................10
Web Services...................................................................................................................24
distanza di Levenshtein..................................................................................................38