jump to navigation

Primeres funcionalitats que implementarem 28/02/2007

Posted by Albert in PFC.
add a comment

Un cop investigades les diferents maneres d’exportar els documents de l’OpenOffice, hem decidit decantar-nos per aquestes dues opcions (començarem implementant la primera):

  • Utilitzar el filtre XHTML de l’OpenOffice i modificar-lo si és necessari. Aquest mètodes d’exportació si útil si es vol conservar el màxim possible d’informació d’estil, i es vol utilitzar l’editor HTML de Moodle. Com a inconvenient té que el codi HTML estarà ple d’atributs d’estil.
  • Crear un filtre d’exportació a format Wiki. El codi obtingut és més llegible però es perd gran part de la informació d’estil (només es conserven les opcions de formats que suporta el llenguatge de la Wiki). Existeix ha un exemple de filtre MediaWiki que ens pot ser útil.

També hem decidit que l’extensió d’OpenOffice hauria de fer el mínim necessari: mostrar el diàleg amb els paràmetres, exportar el document amb el format adequat i enviar-lo al servei web, el qual faria tota la resta (comprovar permisos, processar el document i inserir-lo a la wiki). Per començar, implementarem només el format XHTML, sense imatges i sense divisió del document.

La primera versió del servei web tindrà aquestes característiques:

  • Rep els paràmetres en format de formulari HTML (útil per a fer proves). Els paràmetres són: username, password, course, wiki, pagename i document.
  • Comprova que el nom d’usuari i contrasenya són vàlids.
  • Comprova els permisos per al curs i wiki especificats.
  • Crea la pàgina amb el contingut del document.

Per realitzar les comprovacions d’usuari típicament s’utilitza la funció require_login, però com que aquesta funció no és útil per al servei web ja que pot ser que envïi contingut HTML com a resposta (per a mostrar la pàgina d’entrada, informar d’errors, etc.), per tant cal escriure’n una versió per al servei web. El plugin de TiddlyWiki implementa un servei web similar al que necessitem, així que el podem fer servir de base, tot i que l’haurem d’adaptar a Moodle 1.7.

Exportació de documents de l’OpenOffice 26/02/2007

Posted by Albert in PFC.
add a comment

Per a exportar documents d’OpenOffice cap a la NWiki tenim tres opcions:

  • Utilitzar el filtre d’exportació HTML de l’OpenOffice i insertar el document a la NWiki en format HTML. Aquesta opció és la més desitjable ja que ens estalvia crear un convertidor de formats, però s’ha de veure si és prou adequada
  • Crear un nou filtre d’exportació de l’OpenOffice a un dels formats de la NWiki. Aquesta opció és més flexible i es podria basar en un filtre existent.
  • Utilitzar les APIs d’OpenOffice per navegar pel document i generar el document en un dels formats de la NWiki.

L’OpenOffice inclou aquests dos filtres HTML:

  • HTML 4.0 Transitional: es mostra correctament a la wiki però inserta codi no que no és XHTML vàlid.
  • XHTML 1.0 Strict: Utilitza estils en la capçalera que es perden en insertar-los a la wiki, i també hi ha problemes amb alguns elements deguts a les substitucions que fa la funció wiki_preformat_htmleditor del fitxer mod/wiki/wiki/parsers/htmleditor de la NWiki.

El document que he utilitzat per realitzar les proves és aquest: document.odt.

Per solucionar els problemes amb l’exportació XHTML es podria fer un tractament posterior del document per passar els estils a inline amb atributs style, o es podria modificar el filtre perquè ho fes directament. Els filtres d’exportació d’OpenOffice estan escrits en XSL, en aquesta pàgina hi ha informació del filtre XHTML: http://xml.openoffice.org/sx2ml/.

Detalls del projecte 22/02/2007

Posted by Albert in PFC.
add a comment

Ahir, a la reunió del PFC, vaig conèixer en detall en que consistiria el projecte. L’extensió de l’OpenOffice ha de permetre transferir el document a una wiki de Moodle, podent-lo dividir en diverses pàgines. Aproximadament, l’afegit ha de mostrar un diàleg amb les opcions següents:

  • Servidor: URL de la instància de Moodle.
  • Curs/wiki: per a identificar la wiki on s’ha d’insertar el document.
  • Usuari i contrasenya de l’usuari de Moodle.
  • Prefix pàgines, que tindran totes les pàgines del document.
  • Nivell de divisió: nivell d’encapçalament a partir del qual es crearan pàgines separades. És a dir, el contingut amb un encapçalament que compleixi la condició serà traslladat en una nova pàgina, i substituït per un enllaç a aquesta nova pàgina.

Divisió en pàgines

S’ha de tenir en compte que també es farà una extensió per a MS Word, així que part de la feina és aprofitable, i que la funcionalitat de dividir pàgines seria interessant que fos una funcionalitat que també estigués a Moodle. Per tant, bona part de la implementació estaria dins de Moodle, deixant per a l’extensió l’enviament del document i dels paràmetres. Però hi ha algunes qüestions més:

  • Com es comunica l’extensió d’OOo amb Moodle?

Utilitzant un servei web, però cal decidir en quin format s’enviarà el document (html, xml, meadiawiki) i el missatge. Seria preferible que el document estigui en algun dels formats que suporta la wiki, però si fos XML tampoc suposaria un problema greu ja que es podria fer la conversió mitjançant XSL. Cal investigar de quines maneres es pot exportar el document d’OpenOffice

  • Com s’inserten les pàgines a la wiki?

Una manera és utilitzar directament les funcions del mòdul wiki, i una altra és utilitzar la funcionalitat d’importació. La segona opció suposaria una conversió més del document i actualment la funcionalitat d’importació no funciona correctament, així que en principi la primera sembla la millor opció.

Com ja he dit, cal investigar les maneres d’exportar el contingut d’un document des de l’OpenOffice. Millor començar per aquí, ja que d’això depenen les altres parts del projecte.

Client de serveis web 20/02/2007

Posted by Albert in PFC.
add a comment

Més endavant necessitaré utilitzar serveis web per a l’extensió d’OOo, així que he investigat què són i com utilitzar-los en Python. Un servei web és un sistema de programari que permet la interacció entre màquines sobre una xarxa. Hi ha diversos protocols per a serveis web, els més habituals són el SOAP per a enviar missatges i el WSDL per a descriure els serveis (els dos estan basats en XML). Hi ha una biblioteca per a Python, anomenada ZSI, que permet crea clients i servidors de serveis web.

La biblioteca ZSI permet interactuar amb serveis webs de diverses maneres. En principi, la manera que sembla més útil és amb un objecte ServiceProxy, que a partir del URL de la definició del servei web (WSDL) crea un objecte Python amb les operacions i tipus necessaris. Però després de fer algunes proves, sembla que no funciona amb molt serveis webs.

Una altre manera és amb un objecte Binding, que genera i envia missatges SOAP. Quan el servei web només utilitza tipus de dades senzills es pot utilitzar directament, quan es necessiten tipus de dades complexes definits en WSDL, cal definir-los en Python explícitament per tal de poder fer la conversió de SOAP a Python.

Com a prova he creat un afegit d’OpenOffice.org que utilitza un servei web per obtenir una llista d’idiomes que s’inserta al document.

Afegit Llista d’idiomes

El paqet de l’extensió d’OOo amb aquest afegit i l’anterior és: extensio_oo.zip. Per fer funcionar l’extensió cal tenir instal·lada la biblioteca ZSI de Python, en les distribucions GNU/Linux només cal instal·lar el paquet correspnent, però a Windows és més complicat ja que l’OpenOffice utilitza un intèrpret de Python que porta inclòs. L’OpenOffice no permet incloure en els paquets de les extensions fitxer addicionals, així que la sol·lució passarà per crear un instal·lador.

Diàleg per a l’afegit d’OpenOffice 9/02/2007

Posted by Albert in PFC.
add a comment

Basant-me en l’afegit “Hola món”, he creat un nou afegit d’OpenOffice anomenat “Insertar URL”. Aquest afegit mostra un diàleg a l’usuari on ha d’introduir una URL. Despés es llegeixen les dades de d’aquesta URL i s’insereixen al document.

Diàleg “Inserta URL”

Per a crear el diàleg s’han d’utilitzar components UNO del mòdul com.sun.star.awt. La documentació disponible és més aviat dolenta, m’he ajudat d’exemples trobats a http://www.oooforum.org.

Per a llegir el contingut de l’URL s’utilitza la funció openurl del mòdul urllib inclòs a la biblioteca estàndard de Python, per insertar-lo al document es fa el mateix que en l’afegit “Hola món”.

El paquet d’aquest afegit és: insertar_url.zip.

Començant el PFC / Afegit d’OpenOffice 7/02/2007

Posted by Albert in PFC.
add a comment

Aquest matí he anat a la primera reunió del PFC, i ja tinc feina a fer. El projecte tracta del desenvolupament de programari lliure per a l’ensenyament virtual, concretament per a Moodle, l’entorn d’emsenyament virtual més popular. Som diverses persones que fem projectes relacionats amb el tema.

La primera tasca a fer és aprendre a fer una extensió d’OpenOffice que pugui accedir a contingut remot. L’OpenOffiice té un sistema de components, anomenats UNO, utilitzats per al desenvolupament. Els components UNO (Universal Network Objects), es poden utilitzar/implementar independentment del llenguatge de programació, i l’OpenOffice permet utilitzar de sèrie C++, Java i Python.

D’aquests tres llenguatges de programació, prefereixo el Python, un llenguatge d’alt nivell, orientat a objectes i de tipificat dinàmic que prioritza la productivitat del programadaor davant de la de l’ordinador. Els avantatges d’utilitzar Python respecte C++ i java són principalment: el codi és més senzill i fàcil d’entendre, no cal compilar codi (ho fa solet), té una biblioteca estàndard molt completa, i molt bona documentació, i és molt més divertit d’utilitzar :-) .

Els components UNO es poden executar de dues maneres: en un procés separat de l’OpenOffice (per a crear programes que interactuen amb les instàncies d’OpenOffice) o en el mateix procés que l’OpenOffice (com a extensions). El que ens interessa és el segon cas, però queda un dubte, com s’integra un component UNO amb l’OpenOffice? S’ha de crear un paquet (fitxer ZIP) amb els components i els fitxers de configuració necessaris. L’exemple “Hola món”, consisteix en un afegit (una entrada al menú Eines -> Afegits) que inserta el text “Hola món!” al document.

Afegit “Hola món”

El paquet de l’extensió és hello_word.zip. Es pot instal·lar amb el gestor de paquets de l’OpenOffice:

# /usr/lib/openoffice/program/unopkg gui

El següent pas és fer una extensió més complexa, per exemple que mostri una finestra per demanar paràmetres a l’usuari.