sábado, 29 de diciembre de 2007

Reunión (27/12/2007)

El pasado jueves, estuve comentando con Pigui, algunas tablas auxiliares que podría necesitar para la tarea de los Grades, y también las ideas que había tenido.

Una de las partes de la tarea de los Grades consiste en valorar ediciones de una misma página wiki, para poder notar al progreso del autor o del grupo, y es a esta a la que dedicamos más tiempo. Para evaluar las páginas wiki utilizaremos una nueva clase asociativa compuesta por la asociación de las clases usuario, nota (grades) y página wiki. Dicha propuesta implica que la idea inicial de valorar entre ediciones, no precisamente consecutivas, no pueda llevarse acabó (de momento...) y por lo tanto solo se valorarán únicamente páginas wiki. Este cambio en el funcionamiento, beneficiará el cálculo de las estadísticas y los informes. Si se valoraba entre diferentes ediciones de la misma página wiki, a la hora de calcular las evaluaciones tendríamos que tener en cuenta diferentes criterios como por ejemplo, si la valoración entre dos ediciones pasaría únicamente a una de las dos (preferiblemente la más tardía) o si la nota se contaba en cada sección, es decir, una valoración contaría en las dos ediciones de la misma página wiki.

Otra parte a considerar, es que a la hora de valorar las páginas wiki, podremos utilizar las Scales que nos proporciona Moodle o bien crear nuestras propias Scales.

También se tendrán que añadir tres nuevas capabilitys para diferenciar que se puede visualizar y que no. Estas tres nuevas capabilitys son gradepeer, gradeauthor y grademain. Gradepeer establece que el usuario podrá ver las valoraciones de su página wiki y el nombre de los usuarios que las han realizado. Gradeauthor, a diferencia del anterior, no permitirá ver el nombre de los usuarios que han realizado las valoraciones. Y por último, grademain, que permitirá ver todas las valoraciones de todas la páginas wiki.

Las valoraciones se añadirán a través de la pestaña evaluate y las ediciones serán en la pestaña history.

(Para más información sobre Grades, Scales, ... vea la entrada anterior :) )


... Wikibook to Pdf ...

De la tarea anterior, pasar de Wikibook a Pdf, falta acabar el tratamiento que tendrán los Wikibooks en función de los campos studentmode y groupmode de la tabla Wiki, que variarán las consultas a la base de datos en función de estas.

Gracias a las explicaciones de Pigui, esta parte estará acabada próximamente.

martes, 25 de diciembre de 2007

Documentación para desarollar con grades en Moodle 1.9

He recopilado algunas páginas web, dentro de Moodle.org, que creó que me pueden servir para realizar la tarea y también pueden ser de utilidad para cualquier persona que quiera contribuir y trabajar con los grades de Moodle 1.9.

Son los siguientes:



Más información:

"See you"

jueves, 20 de diciembre de 2007

Reunión y Nueva Tarea (Grades)

El pasado lunes, en la reunión con Marc(Ludo) y Pigui, me explicaron cual sería la última tarea a implementar, grades para páginas wiki en Moodle 1.9. Hoy, empezaré a documentarme y buscar información del funcionamiento de los grades.

La tarea de los grades constará de cuatro etapas (by Ludo):
  1. Documentación: Escribir un informe de los objetivos a cumplir, explicando la semántica del funcionamiento.
  2. Interfaz: Bocetos iniciales de el aspecto que tendrá las páginas html.
  3. Tablas: Diseño de las tablas a añadir en la base de datos. Con la ayuda del incombustible Pigui.
  4. Programar: Implementar



Más sobre la tarea de Wikibooks...

Se han añadido los emoticones para substituir el conjunto de los caracteres que los definen.

Siguiendo con las imágenes, he acabado la tarea de añadir imágenes en el PDF. Una de las muchas limitaciones que tiene la clase TCPDF, es que el método implementado(Image) utiliza como parámetro la dirección completa de disco del archivo que se tiene que añadir, es decir, la imagen tiene que estar almacenada en el disco duro.

El método Image, abre el archivo especificado para lectura (que tiempos aquellos los de S.O.), después calcula la altura y anchura, y finalmente lo guarda en un atributo interno de la clase TCPDF (images, que es un vector de imágenes). Como cada imagen que hay en la página nwiki hay que descargarla al disco y calcular la altura y anchura, el tiempo a la hora de crear el PDF se incrementa, y más si el PDF se tiene que crear dos veces para poder calcular los enlaces internos (de lo contrario, nos sabríamos cuantas páginas ocupa cada nwiki), como este comportamiento es ineficiente, implementé dos métodos nuevos a la clase que sirven para hacer un copy & paste del vector de imágenes. Antes de descargar la imagen se comprueba si ya existe en el vector o no.

Al trabajar con archivos y ficheros hay que tener siempre en cuenta algunas particularidades dependientes del sistema de ficheros del S.O., como por ejemplo los permisos, el espacio disponible en el disco, que no existan conflictos con los ficheros existentes, etc. Los criterios que he escogido son los siguientes:
  • Para cada imagen, se descarga el disco duro una sola vez, si existe cualquier error a la hora de leer la url de la imagen, crear el archivo en el disco o escribir los datos en el disco, se interrumpe la creación del pdf y se elimina del disco duro el archivo.
  • Tras pasar la información de la imagen al vector de imágenes de la clase TCPDF, se elimina la imagen.
  • Cada usuario tendrá una fichero dentro del fichero de /tmp de tcpdf. De está forma se evita que una misma imagen pueda ser sobrescrita o evitar comportamientos inesperados.
  • Habilitar correctamente un fichero en el que poder escribir para poder almacenar imágenes temporalmente.

He añadido como tags soportados: <dl> (definition list), <dt>, <dd> y <div> (tabla de contenidos).

Las páginas nwiki que tengan la cadena " %%% " será sustituida por el tag <br>.

Después de trabajar con la clase TCPDF comentaré algunas impresiones. Dentro de las librerías (o bibliotecas) de Moodle para crear PDFs (que conozca), la librería de TCPDF es la más completa. La clase es bastante modular, pero no es una clase con la que se pueda trabajar únicamente sabiendo las funciones públicas disponibles, hay que tener en cuenta aspecto internos de la clase, como por ejemplo las unidades utilizadas (pixels, mm, cm, puntos, ...). La función que se utiliza como parser, para los documentos html es bastante limitada en algunos aspectos, como por ejemplo, hacer listas de listas (algo que ya comente), introducir imágenes de tamaño considerable (al menos que no definamos para cada imagen la escala que queremos), etc.

Nota: Algunas de las funciones PHP que he utilizado, solo están disponibles a partir de la versión PHP 4. Una consideración importante a tener en cuenta.

domingo, 16 de diciembre de 2007

Trabajo de la semana (III)

Trabajando en la conversión de wikibook a pdf...

He añadido al parser de la librería TCPDF de Moodle, la funcionalidad de printar correctamente las listas de listas. Y es totalmente indiferente que sean ordenadas (<ol>), desordenas (<ul>) o combinaciones estas.

El tratamiento de links internos está acabado y ahora solo hace falta testearlo. A diferencia de los links externos, los links internos son de color verde. Para añadir esta funcionalidad, que es dependiente de las páginas nwiki, he creado estructuras internas dentro de la clase para gestionar los enlaces.

He jugado bastante con los métodos de la clase para saber que posibilidades extras ofrece.

Sigo trabajando en la interfaz, que había dejado de lado para centrarme exclusivamente en las listas y los links.

Todos esto aparte de la corrección del bug.

sábado, 15 de diciembre de 2007

Un bug ...

El plugin de Timelines para ver la actividad de Moodle tenía un pequeño bug.

Al crear el objeto Timeline dentro de la página web, hay que definir la información y la estructuración que tendrá, por ejemplo, dentro de cada banda (o tira) hay que especificar la unidad temporal (minutos, días, meses, años, ...), también existe un atributo dentro de cada banda que permite definir la posición inicial por defecto y es aquí donde residía el fallo.


Para establecer este parámetro creo un objecto en JavaScript de la clase Date que por defecto contiene la fecha y hora actual, posteriormente realizó la conversión a tipo string y construyo correctamente el valor del atributo requerido. Esto implica que en Firefox se compone correctamente, pero en cambio en Internet Explorer no, debido a que la conversión a String en Internet Explorer es diferente, la posición del año se encuentra cambiada de lugar. Este hecho se puede comprobar directamente con el siguiente código:

<html>
<head></head>
<body>
<script type="text/javascript">
var today = new Date();
alert(today);
</script>
</body>
<html>



Mozilla Firefox


Internet Explorer


Aparte de esta pequeña peculiaridad, trabajar con DOM los objetos de la página html, puede tener también algunas complicaciones. Como por ejemplo, para modificar el texto de una etiqueta h2, en Internet Explorer tenemos que utilizar el atributo innerHTML y en Firefox es suficiente con utilizar el atributo textContent.

martes, 11 de diciembre de 2007

La Reunión

En la reunión del lunes le comenté a Marc y a Pigui, las complicaciones que había tenido en la tarea de pasar de Wikibook a PDF. Estas fueron las que expuse:

  • He tenido problemas con las fuentes de la clase TCPDF. Intentaba utilizar las fuentes que venían por defecto con FPDF (arial, times, courier, ...), pero parece que solo se pueden utilizar fuentes Unicode en formato TruType. Solución: Utilizar las fuentes que vienen por defecto.
  • La función (o parser) encargado de pasar de html a pdf de la clase TCPDF, que se llama writeHTML, solo imprime listas sencillas (<ul> y <ol>), es decir, permite listas de listas pero las imprime como si fueran listas sencillas o simples. Actualmente estoy trabajando en solventar esta disfunción.
  • Los enlaces no están completados correctamente, el parser de la clase TCPDF, recoge el atributo "href" del enlace(<a>) y lo escribe directamente e incompleto.
  • Existe un restricción de etiquetas no soportadas, que simplemente son eliminadas, dejando únicamente el texto que contenían entre ellas.
Estos días estoy analizando el código para poder corregir estas pequeñas deficiencias y tenerlas solucionadas lo antes posible. He tenido un par de buenas ideas que creo que me darán buenos resultados.

Seguiré informando...

lunes, 10 de diciembre de 2007

Resumen de la Semana Pasada

El martes día 4 de diciembre de 2007 se me encomendó una nueva tarea, la de pasar un wikibook a pdf.

Un wikibook, es un conjunto de paginas wiki, presentadas en formato libro (esta explicación tal vez sobraba...).

El primer día estuve analizando la estructura de las tablas de la base de datos con las que tenía que trabajar. Específicamente se trata de las siguientes tres tablas: wiki, wiki_pages y course_modules. Es importante entenderlas bien, de cara escoger las últimas versiones de las páginas wiki del wikibook que pertenece al módulo del curso o al módulo wiki.

Cuando acabé de completar las consultas en sql a la base de datos, me centré (como me dijo Pigui) en mirar las dos clases que ja dispone la librería de Moodle para crear pdfs. Estás son FPDF y TCPDF. TCPDF es una extensión de la clase FPDF, con más métodos que nos pueden facilitar en gran medida la creación de pdfs. El único problema que tenía era que las fuentes disponibles en FPDF, no son fácilmente accesibles para la clase TCPDF (yo de momento uso otras...).

Ahora mismo estoy trabajando en TCPDF y he conseguido avanzar bastante, pero existen algunas incompatibilidades de tags html con la función writeHTML de la clase. Por ejemplo, no se escriben bien las listas de listas o hay etiquetas no soportadas como "div".

Coming soon -> "La Reunión"

viernes, 7 de diciembre de 2007

My first plugin :)

El viernes 30 de noviembre de 2007, acabé mi primer plugin, para Moodle. Estoy muy satisfecho con el resultado y espero que con el tiempo se pueda ir mejorando y ampliando.

Junto con el TimeLine, redacté tres breves manuales (en inglés, catalán y castellano) explicando el sencillo proceso de instalación y el manejo de la interfaz. Accediendo a esta web como usuario registrado o bien como invitado, podemos ver los tres manuales y además contribuir a mejorar el texto con toda clase de críticas constructivas (...espero).

En esta otra página se encuentra el enlace de descarga del plugin. También en esta misma página se recoge otros recursos para Moodle desarollados por Dfwikiteam.