14-ESTENSIONE DEL PROGETTO DRAGMATH

Transcript

14-ESTENSIONE DEL PROGETTO DRAGMATH
ESTENSIONE DEL PROGETTO DRAGMATH,
VERSO UN EQUATION EDITOR PER IL WEB
Giuseppe Fiorentino1, Samuele Scatena2
1
Accademia Navale di Livorno
[email protected]
2
Dipartimento di Informatica Università di Pisa
[email protected]
FULL PAPER
ARGOMENTO: Aspetti tecnici – Tecnologie Web
Abstract
L’editor integrato in Moodle permette la composizione delle pagine senza richiedere la
conoscenza del HTML, generato in modo del tutto trasparente. Analogamente, il suo
plugin DragMath consente di comporre graficamente anche le equazioni evitandone la
codifica in LaTeX. L’applet, però, non consente di rieditare le formule generate perché
non prevede la possibilità di ripartire dal codice LaTeX. Questa mancanza ne limita
fortemente l’uso perché, per modificare le equazioni, impone la conoscenza del LaTeX o
la loro riscrittura. È stata realizzata un’estensione di DragMath che permette il passaggio
inverso, rendendo possibile ripartire dal codice LaTeX presente nella pagina, riottenere la
rappresentazione grafica, modificarla ulteriormente con DragMath e quindi salvare la
nuova codifica. L’applicazione è completa e se ne illustra l’integrazione con Moodle. Il
risultato ottenuto rappresenta un primo passo verso un “equation editor per il web”, in
grado di gestire le equazioni in modo trasparente relegandone la codifica (in LaTeX o
altro) a una semplice “rappresentazione interna”.
Keywords: Plugin per Moodle, tecnologia, progetti di ricerca.
1
INTRODUZIONE
La gestione delle equazioni nelle pagine web è ancora un’operazione non banale. Nell’attesa che uno
standard come MathML [2] si affermi e sia supportato dai browser più diffusi, si sta imponendo una
soluzione che prevede due fasi. Nella fase di authoring, si incorpora nella pagina la codifica LaTeX [3]
(il linguaggio di markup che si basa sul programma di composizione tipografica TeX [4])
dell’equazione, demandando alla successiva fase di rendering, spesso implementata sul lato server,
la trasformazione di questa nell’immagine (GIF o PNG) che la rappresenta.
1.1
Il limite del LaTeX per il web
Il LaTeX, com’è noto, è un linguaggio di markup di tipo testuale/descrittivo; quest’aspetto, tutt’altro che
secondario, costringe chi desidera utilizzare le equazioni per il web a impadronirsi di un “nuovo
linguaggio” per poterle codificare correttamente, anche quando si utilizzano degli editori grafici per
comporre le pagine (come il TinyMCE, adottato dalle ultime versioni di Moodle).
Tale difficoltà ha limitato l’uso del web per i contenuti matematici ai pochi “iniziati” che conoscono il
LaTeX, impedendo di fatto ogni possibilità di interazione alla pari tra docenti e studenti, poiché non è
realistico pensare di aggiungere tale fardello sulle spalle di questi ultimi (soprattutto se nella fascia di
età scolastica).
La soluzione alternativa, che prevede l’uso di un programma di videoscrittura per la composizione
delle pagine (passando magari per la generazione del codice HTML), spesso produce delle pagine
con uno stile difforme da quello adottato dal sito che le contiene e, talvolta, richiede un laborioso
upload delle immagini generate (una per ogni equazione presente nella pagina).
G. Fiorentino (Ed) – MoodleMoot Italia 2012 - Livorno – 2012 – ISBN 978-88-907493-0-8
1.2
DragMath
Un passo significativo per rendere accessibile a tutti l’inserimento delle equazioni in una pagina web è
stato l’adozione di plugin specializzati come DragMath, un piccolo editore visuale di equazioni scritto
in Java e facilmente integrabile negli editor online. Con tale strumento è possibile comporre
graficamente anche le equazioni, ottenendo alla fine il codice LaTeX da inserire nella pagina. Questa
soluzione è adottata da importanti piattaforme come Moodle e Wikipedia, giusto per citarne due.
Il punto debole di quest’approccio è costituito dal fatto che DragMath non prevede la trasformazione
inversa, ossia il passaggio dal LaTeX alla sua rappresentazione grafica editabile. Per tale motivo, se
si vuole modificare un’equazione, è necessario o agire direttamente sul codice LaTeX (sapendo cosa
si sta facendo) o sostituirlo completamente, ricomponendo l’equazione daccapo.
1.3
Oltre DragMath
Si presenta un’estensione di DragMath che rende possibile il passaggio inverso indicato nel paragrafo
precedente. Il sistema ottenuto aggiunge la possibilità di ripartire dal codice LaTeX presente sulla
pagina, riottenere la rappresentazione grafica all’interno di DragMath per modificarla ulteriormente e
quindi salvare la nuova codifica LaTeX nella pagina, pronta per essere elaborata dal filtro per la
notazione matematica.
1.4
Outline
Nei paragrafi successivi si illustra il processo di sviluppo dell’estensione, riportando le principali
difficoltà incontrate e le soluzioni adottate. Se ne presenta poi l’integrazione in Moodle mostrando il
passaggio del codice LaTeX e la segnalazione degli eventuali errori presenti. L’ultimo paragrafo prova
a tirare le somme sul risultato ottenuto e traccia le linee di un ulteriore sviluppo per ottenere un
“equation editor per il web”.
2
SVILUPPARE PER MOODLE
Agli occhi dello sviluppatore, Moodle e tutto quanto gli è necessario per il suo corretto funzionamento,
dal sistema operativo ai pacchetti software con cui interagisce, può essere visto come un complesso
ambiente di sviluppo. Modificare o creare estensioni per Moodle richiede la padronanza di una vasta
gamma di linguaggi di programmazione e di tecnologie web.
Il lavoro di progettazione di una qualsiasi di queste “feature” comporta la conoscenza approfondita
della gerarchia di progettazione della piattaforma. Essa può essere assimilata a un albero i cui nodi
rappresentano le varie cartelle in cui Moodle è suddiviso. Iniziando con il discendere dalla radice
“moodle/” troviamo, per esempio, le cartelle “lib/”, “filter/” o “theme/”. Generalmente una funzionalità, o
plugin, è contenuta in una o più di queste cartelle, in funzione del lavoro che svolge. Ad esempio, il
plugin che modifica l’interfaccia grafica della piattaforma è una funzionalità tipica dei temi e andrà
sotto la directory “theme”. I plugin che interagiscono con l’utente sono posti nella cartella “lib” e, nel
nostro caso, nella sottocartella “editor”. Questo poiché l’estensione realizzata aggiunge nuove
funzionalità a un plugin già disponibile per l’editor di Moodle.
2.1
TinyMCE come plugin di Moodle
TinyMCE è l’editor integrato nelle versioni di Moodle più recenti ovvero quelle successive alla 1.9. In
precedenza, era utilizzato htmlArea [6] ma i numerosi vantaggi, tra i quali la maggiore facilità di
configurazione e customizzazione, hanno portato gli sviluppatori della piattaforma verso il più robusto
tinyMCE. La sua interfaccia grafica, è molto simile a quella del pacchetto Word di Office e, com’è
possibile vedere in Figura 1, permette l’editing di testi in maniera semplice e completa. Ogni pulsante
visibile nell’interfaccia rappresenta un plugin utilizzabile all’interno dell’editor. Per esempio, il pulsante
con il simbolo della “pellicola” è quello relativo al plugin che inserisce i contenuti multimediali nella
pagina, mentre quello con il simbolo di “radice di beta”, rappresenta il nostro plugin discusso nei
paragrafi successivi.
MoodleMoot Italia 2012
2
Figura 1 – L’editor di Moodle, il tinyMCE
3
L’ESTENSIONE DI DRAGMATH
Nel paragrafo precedente abbiamo introdotto l’organizzazione della piattaforma di Moodle e il suo
editor di default, il tinyMCE. Discuteremo ora del lavoro svolto per estendere DragMath e dei risultati
ottenuti. DragMath è un ottimo strumento per inserire le espressioni matematiche nei documenti web:
consente la composizione grafica (WYSIWYG) nella fase di authoring, salvando nella pagina il
corrispondente codice LaTeX come un formato intermedio. Successivamente, quando la pagina viene
servita, il LaTeX è convertito nella corrispondente immagine (GIF o PNG) dai “filtri” attivi sul lato
server (ne è un esempio quello della notazione matematica presente in Moodle).
DragMath si presenta all’utente come un applet Java nella cui interfaccia è possibile riconoscere gli
elementi matematici più comuni, dai semplici operatori aritmetici a quelli specialistici organizzati
razionalmente in più schede. L’utente “assembla” l’espressione trascinando i vari elementi utili dalle
schede alla formula in costruzione, come mostrato in Figura 2.
Figura 2 – Una schermata di DragMath
Alla fine, DragMath genera il codice LaTeX dell’equazione liberando l’utente dalla conoscenza di tale
formalismo. Il processo descritto è però unidirezionale: chiuso DragMath e salvato il codice LaTeX
nella pagina, l’utente non può utilizzare l’editor grafico per modificare l’equazione perché non è
previsto il passaggio inverso, dal codice LaTeX alla rappresentazione grafica interna del plugin.
Questo è un forte limite poiché anche un piccolo errore commesso nella fase di composizione grafica
costringe l’utente a rifare tutto daccapo. L’estensione realizzata permette invece di (ri)partire dal
codice LaTeX già presente sulla pagina.
3.1
DragMath “visto dall’interno”
Nel paragrafo precedente, abbiamo richiamato, in maniera molto sintetica e descrittiva, il
funzionamento globale di DragMath. Proveremo ora a descrivere altrettanto sinteticamente le
operazioni svolte al suo interno. Per generare il codice LaTeX, il plugin utilizza un albero sintattico che
riflette una delle possibili semantiche sottese dalla rappresentazione grafica (la notazione matematica,
purtroppo, è irrimediabilmente ambigua). All’interno di DragMath, ogni componente matematico è
modellato da un oggetto Java che ne memorizza tutte le informazioni. Il trascinamento da parte
dell’utente di un elemento matematico, come il simbolo di addizione, provoca la creazione del
corrispettivo oggetto Java (di classe MathObject) e il suo corretto inserimento nell’albero sintattico.
MoodleMoot Italia 2012
3
L’albero è rappresentato da una struttura dati dedicata (di classe MathTree) e aggiornato a ogni nuovo
inserimento. La Figura 3 mostra la rappresentazione di un MathTree per l’espressione x+y·k.
Figura 3 – L’albero sintattico dell’espressione x+y*k
Al termine della composizione, mediante una visita ricorsiva dell’intero albero, DragMath genera il
codice LaTeX dell’equazione rappresentata. La nostra estensione si basa sul processo inverso.
3.2
L’estensione di DragMath
Avendo introdotto il funzionamento interno di DragMath, è ora più agevole presentare lo sviluppo che
è stato necessario per realizzare il passaggio dalla codifica LaTeX alla rappresentazione interna di
DragMath. Quello che segue è una sintesi un po’ per “iniziati” (informatici) degli strumenti utilizzati o
sviluppati allo scopo. La descrizione sarà necessariamente superficiale per esigenze di spazio, per i
dettagli rimandiamo il lettore alla tesi di laurea triennale in informatica [1], di cui questo plugin è stato il
frutto.
Per consentire una buona manutenibilità del codice, il problema è stato affrontato “ad alto livello”, con
tecniche proprie dei linguaggi formali e dei compilatori.
Il primo passo è stato il riconoscimento del LaTeX come un linguaggio generabile da una grammatica
LL(1), a patto di non adoperare il prodotto implicito. In tali “linguaggi” basta un unico simbolo (token)
iniziale per guidare, univocamente, il riconoscimento di tutte le strutture sintattiche.
Il secondo passo è stato quindi ottenere esplicitamente la grammatica LL(1) in grado di “produrre”
tutto il LaTeX utile. Questo passaggio, fondamentale nello sviluppo dell’intero progetto, ha richiesto la
conoscenza di tecniche specialistiche, ma ormai standard, dei linguaggi formali per ricondurre una
grammatica compatibile a una LL(1).
Ottenuta la grammatica, è stato utilizzato uno strumento di alto livello (Coco/R [7], un generatore di
compilatori) per ottenere, quasi automaticamente, uno scanner e un parser per il LaTeX.
•
Il primo è un tool in grado di suddividere la stringa del codice LaTeX nei suoi “token” essenziali,
ovvero le parti semanticamente consistenti per il linguaggio: numeri, operatori, elementi lessicali
come “\begin”, “\sum”, ecc.
•
Il secondo, a partire dalla sequenza dei token individuati dallo scanner, fa un’analisi (tecnicamente
parlando, a discesa ricorsiva) in grado di riconoscere tutte le strutture del LaTeX.
Completando lo scheletro del parser generato da Coco/R, è stato realizzato l’interprete/compilatore in
grado di produrre, per ogni struttura lessicale riconosciuta, il corrispondente sottoalbero codificato
come MathTree. Il parser, analizzando i token man mano che si presentano, segue le produzioni della
grammatica costruendo una struttura dati simile a quella prodotta da DragMath. Combinando
ricorsivamente i MathTree si perviene alla rappresentazione completa dell’equazione decodificata,
pronta per essere inviata a DragMath e ulteriormente editata.
3.3
Obiettivi raggiunti
L’estensione ottenuta consente un uso più flessibile e naturale di DragMath. L’utente può ancora
partire da zero e, composta l’equazione, inserire il corrispondente codice LaTeX nella pagina; ma ora
può anche selezionare del codice LaTeX già presente sulla pagina e poi avviare DragMath. Il testo
selezionato diventa un argomento in input al plugin che, ricevutolo, avvia il riconoscimento automatico
descritto nel paragrafo precedente.
MoodleMoot Italia 2012
4
Per facilitare l’uso del plugin e per avvicinare l’utente al LaTeX, è stata prevista anche la gestione
degli errori durante la fase di riconoscimento. Il codice selezionato potrebbe essere stato generato da
DragMath (e quindi di errori non dovrebbero essercene) ma potrebbe anche essere stato modificato o
scritto di sana pianta “a mano”, e quindi è necessario prevedere un error recovery che aiuti l’utente a
rintracciare gli errori. Nel caso in cui vi sia (almeno) un errore, un popup lo notifica all’utente
chiedendogli di scegliere se continuare con ciò che è stato possibile ricostruire, oppure tornare
all’editor per correggere l’errore. In quest’ultimo caso, con un’altra integrazione con l’ambiente
Moodle, il cursore si posiziona sul carattere che ha dato luogo al primo errore riconosciuto.
Alcune modifiche dell’editor tinyMCE e del codice di DragMath permettono di controllare che la
selezione sia sempre svolta correttamente (includendo l’intera espressione). Il codice LaTeX, infatti, è
racchiuso da delimitatori che ne marcano l’inizio e la fine; tipicamente questi sono i doppi dollari “$$”,
ma non necessariamente; il plugin memorizza i delimitatori usati e li reinserisce alla fine dell’editing.
3.4
Ulteriori estensioni
Un’interessante estensione, già in fase di realizzazione, prevede la visualizzazione in tempo reale
della codifica LaTeX dell’equazione che si va componendo. Questo consentirebbe un approccio
graduale al LaTeX, rendendo gli utenti maggiormente confidenti nell’apportare piccole modifiche “a
mano” direttamente nel codice evitando di invocare l’editor anche per piccoli ritocchi.
Com’è noto, DragMath permette di generare codice anche in altri formati, come MathML. A oggi, è
stata implementata la ricostruzione nel formato interno del solo LaTeX. Il riconoscimento degli altri
formalismi farà parte di un prossimo aggiornamento.
4
CONCLUSIONI E PROSPETTIVE
Crediamo che il plugin ottenuto semplifichi notevolmente la creazione e il mantenimento delle pagine
contenenti equazioni matematiche. La modalità di interazione semplificata consente di coinvolgere
anche gli studenti in tale attività.
Vista in prospettiva, l’estensione realizzata rappresenta un primo passo verso un “equation editor per
il web”; infatti, il risultato raggiunto lascia già intravvedere il passo successivo: far sparire la codifica
LaTeX dalle pagine web anche in fase di authoring!
Tecnologie ormai affermate come AJAX e jQuery, già operanti in Moodle, permettono di interagire col
server in modo sufficientemente sofisticato e trasparente da riuscire a generare “al volo” l’immagine
che rappresenta l’equazione (invocando un rendering sul lato server). In tal modo è possibile
visualizzare l’equazione immediatamente dopo averla composta, inoltre, “nascondendo” la codifica
dell’equazione nell’attributo “ALT” dell’immagine (come avviene su Wikipedia), sarà poi possibile
ripartire dall’immagine con un approccio simile a quello presentato. In tal modo l’utente potrebbe
ignorare completamente il LaTeX, relegato così al ruolo di “rappresentazione interna” dell’equazione
(come avviene nei word-processor). Tale sviluppo, già in corso, fornirebbe uno strumento “familiare” a
tutti quelli che sono coinvolti con la matematica e il web.
Riferimenti bibliografici/Sitografia (aggiornata al luglio 2012)
[1] Samuele Scatena, Estensione del Progetto DragMath, Tesi di Laurea Triennale in Informatica,
Pisa (2012)
[2] Sito del MathML presso il W3C: http://www.w3.org/Math/
[3] Sito del progetto LaTeX: http://www.latex-project.org/
[4] Sito del TeX Users Group (TUG): http://www.tug.org/
[5] Sito del Progetto tinyMCE: http://www.tinymce.com/
[6] Sito del Progetto htmlArea: http://www.htmlarea.com/
[7] Sito del progetto Coco/R: http://www.ssw.uni-linz.ac.at/coco/
MoodleMoot Italia 2012
5