¡Primer premio!

Bueno bueno, acabo de volver de la fase final del Concurso, donde he tenido el gustazo de recibir el Primer Premio en la categoría Educativa. Quitando que el dinero es bienvenido, cómo no :-D, me alegra mucho que se reconozcan los esfuerzos de todos nosotros, que es lo realmente importante.

Me gustaría agradecer a todos los demás finalistas, a los organizadores y a todos los involucrados por dejarme pasar unos dos días fantásticos con mucho frikeo ubuntero, debianero y demás. La visita a los jardines del Real Alcázar se aguó un poco, pero fue muy bonita de todas formas.

Felicidades a todos los demás, que todos somos premiados. Empezando por Psychosynth, que dan ganas de tontear con él sólo de verlo :-D, y que no me extraña que sea el premiado en absoluto. Y siguiendo con el robotito R4P (espero que resolváis el problema con los horns de los servos, y poned fotos de la versión negra), Minirok (Dato, eres de GNOME en el fondo, lo sé ;-)), Pigmeo (sigo pensando que aunque no es prioritario, se debería poner la creación de un simulador en un documento por si alguien se siente dispuesto a echar el rato), y Zenphp (se nota de dónde viene el nombre al hablar con el autor).

Un recuerdo también a las menciones, en particular Pleim, de mi misma universidad, que por desgracia no se pudo pasar, y a los de Pro Evolution Chapping, con un juego peligrosamente adictivo. Pero por favor, entrenad un poco más y no os metáis tantos goles en propia puerta :-D.

¡Suerte a todos en vuestros proyectos a partir de ahora!

Comentarios (1)

Fase final del Concurso Universitario de Software Libre de la UCA

Bueno, este post llega casi con una semana de retraso, pero de todas formas allá va.

El viernes pasado, tal y como comentó mi compañero David (autor de Pleim) en su blog, fue la entrega de premios de dicha fase final. Expusimos, en este mismo orden:

  • Felipe, con FichaPráctica, un software para la gestión de fichas didácticas para asignaturas de primaria/educación especial/párvulos y de escuelas de idiomas. No llegó a poder implementar código, pero creo que ya tuvo bastante con la recogida de requisitos y aprender las herramientas. Fue interesante su discusión acerca de las limitaciones que existen a la hora de crear interfaces ricas en un entorno Web, y de cómo ésto le hacía pensar en elaborar un editor para sus contenidos.
  • Servidor con XMLEye. En fin, no dije nada que no hubiera dicho ya, aunque habría invitado algunas preguntas. Los vídeos dieron algunos problemas, pero nada que mplayer no pudiera arreglar. Nada en absoluto supera a ese reproductor, excepto quizá en su interfaz (¿pero quién necesita interfaz? :-D)
  • David, con Pleim. Por cierto, gracias por la felicitación, David, y mucho ánimo con tu proyecto, que podría ser muy útil para más de uno de nosotros. Estaría muy bien que su clasificador se integrara con cosas como el buscador Tracker de GNOME (¿o han cambiado recientemente a otro?), o con servidores web como Apache.
  • Mi compañero de carrera Alejandro, con su forja de software. A ver si alguien explota de verdad su potencial y le saca todos los bugs :-D. No es fácil depurar una aplicación tan grande por sí mismo, y menos cuando tienes que ir rodeando problemas y problemas de integración entre muchas herramientas que no estaban pensadas para ello. De todas formas, su forja ya se está usando bastante, con más de 40 proyectos registrados (que para una forja tan joven, y de una sola universidad, no está nada mal en mi opinión).

Tras una discusión con otro compañero que deseaba desarrollar software libre y posiblemente participar en el próximo CUSL (¡ánimo!), en el que hablamos, entre otras cosas, del típico dilema de si coger GPL/LGPL/BSD para su software, llegó el Rector y se realizó la entrega de premios, en la que tuve el honor de recibir el Primer Premio. Pero bueno, esto es sólo cosa del momento: mis compañeros han invertido también mucho tiempo en esto y han conseguido muy buenos resultados para el poco tiempo que la universidad y la vida en general nos deja :-).

Además, queda mucho por hacer aún. A ver si se relajan las cosas otra vez un poco y le puedo echar más tiempo otra vez a XMLEye.

(Por cierto, el Windows Vista que traía el portátil fue bonito… hasta que se terminó de bajar la ISO de la Release Candidate de Ubuntu Hardy. Me da hasta casi pena, tuvo una vida tan corta… :-D)

Comentarios (2)

Algunos paseos por XMLEye

Bueno, ayer grabé algunos paseos en forma de vídeo (no son técnicamente screencasts, al no tener sonido) para la exposición de este viernes en el CUSL2-UCA. Usé gtk-recordMyDesktop. Quería usar una imagen de VirtualBox que preparé con un disco inmutable (de tal forma que al reiniciar la máquina virtual volviera a un Ubuntu Gutsy limpio), pero mi ordenador no da para tanto :-D, así que simplemente creé un nuevo usuario llamado screencast y listo.

Primero daré un paseo por la web de la forja, mostrando los ficheros y documentación disponibles:

Aquí detallo el proceso de instalación, que es tan fácil como añadir un nuevo repositorio con su clave GPG e instalar algunos paquetes:

Luego veremos cómo se pueden ver demostraciones ACL2 y editarlas en paralelo con el visor. También haremos alguna que otra búsqueda sencilla:

A continuación muestro cómo también se pueden abrir ficheros YAML 1.0 sin problemas con la versión empaquetada de YAXML::Reverse (la versión ahora en SVN tiene YAML 1.1 y JSON, abriendo los ficheros de marcadores de Firefox 3, por ejemplo pero tengo que reempaquetarla), abriendo un descriptor de módulo Perl y el ejemplo de la factura de la web de YAXML. También puede abrir volcados de la base de datos de Django, ya que se trata de YAML 1.0 igualmente. Tiene soporte para las anclas y vínculos de YAML si se usan las hojas yaxml de preprocesado y visualización.

Por último, muestro cómo lanzar xmleye directamente desde la interfaz abriendo algunos ficheros y que está también disponible en inglés (emulo el cambio de local cambiando el valor de LC_ALL):

Comentarios (3)

Materiales de un taller Debian

Esta semana y media he dedicado un par de ratos a mejorar y revisar los materiales que usé en un taller reciente sobre elaboración de paquetes Debian. Aquí están todos los talleres que hicimos entre algunos alumnos y profesores en la ESI de Cádiz:

http://www.uca.es/softwarelibre/talleres/index_html

Ya he enviado la última versión al responsable, que la pondrá dentro de un par de días. Fue un taller con bastantes imprevistos, pero ya está todo a prueba de bala… bueno, de flecha, tampoco tengo tanta confianza :-D.

Con lo que hay ahí creo que daría para 2 sesiones de 1:30 a toda pastilla o 2 horas más cómodamente, una con la elaboración básica y otra con cómo hacerte tu propio repositorio para facilitar la distribución. Está probado sobre Gutsy y Hardy, ya que en Hardy sudo tiene una nueva opción (-E) que me dió algunos quebraderos de cabeza.

Están las fuentes de la presentación (LaTeX usando Beamer, bajo la GPL), código fuente para los paquetes y demás, la configuración necesaria para Lighttpd y un guión que instala las dependencias básicas, instalando paquetes, ficheros de configuración, y preparando un fichero de entrada para generar claves GPG en modo batch.

Se acepta cualquier comentario y crítica constructiva :-).

Ah, y de paso: he sacado una nueva versión del paquete Debian de ACL2::Procesador en mi repositorio, que no incluía build-essential entre sus dependencias. Cuando ACL2 certifica un libro externo, de hecho compila un programa C, cosa de la que no me acordaba. Los empaquetadores de ACL2 sin embargo no lo habían incluido entre sus dependencias. En fin, ya está arreglado.

A ver si preparo algunos screencasts de la aplicación y los pongo por aquí, que me falta contenido multimedia :-D.

Comentarios

Traducción al inglés

¡Listo! Ya he traducido por lo pronto todos los textos de las interfaces, manuales y hojas XSLT de ACL2::Procesador, YAXML::Reverse y XMLEye al inglés. La selección se realiza de forma automática al ejecutar los programas. Si estamos en un ordenador con local española por defecto, con esto veremos XMLEye en español:

xmleye

Y con esto en inglés (bajo GNU/Linux):

LC_ALL=en_US xmleye

Lo que va a tardar más en traducirse es el código, sin duda. Por lo pronto todas las clases Java están traducidas, pero no aún ni sus métodos ni los comentarios de la mayoría de los ficheros fuente. Habrá que ir haciéndolo poco a poco, supongo.

Todos los paquetes Debian han sido actualizados debidamente, con lo que con esto basta para pasar a la nueva versión:

sudo aptitude update
sudo aptitude safe-upgrade

Bueno, lo siguiente es revisar un poco los javadocs para ver si se han visto afectados por esta traducción y arreglarlos un poco, e ir un poco a la caza de más posibles bugs.

Ah, e imitando un poco a algunos de mis compañeros, creo que cuando termine el concurso moveré este blog a mi propio dominio, que en este caso tiene un nombre algo más genérico, ya que seguramente lo usaré para otras cosas mías y demás pruebas que haga con otras tecnologías: www.shoyusauce.org. Sí, salsa de soja, en japonés. No me sentía muy inspirado ese día :-D.

Por lo pronto ya lo uso para alojar los paquetes Debian y los manuales, pero ya lo iré mejorando.

Comentarios (2)

Manual del Desarrollador

Bueno, como de costumbre el toro me ha pillado con otras cosas y no he podido ponerme tanto como quisiera. He aprovechado este rato libre que me deja la Semana Santa para escribir una primera versión del Manual del Desarrollador.

Es algo escueta, pero que creo cuenta todo lo importante. En principio pensaba escribir un tutorial de cómo desarrollarlo, pero después me di cuenta que realmente no sería instructivo, ya que me pasaría más tiempo hablando acerca del procesado concreto que se fuera a hacer que de las particularidades de desarrollar para XMLEye.

Dicho y hecho: ya está subido a la web y los enlaces puestos en la forja. Cualquiera que lo desee es libre de mejorarlo y comprobarlo.

Por lo pronto, lo primero que me gustaría hacer antes de seguir es trabajar en una traducción inglesa de XMLEye, y posiblemente también después del post-procesador de ACL2. Casi todo está internacionalizado, salvo quizás por los POD de los módulos Perl: aún no me he puesto en ello. Lo siguiente sería traducir el propio código, que sí lo veo más difícil en el lado Perl, donde no tengo las herramientas de factorización de las que disfruta Java. En fin, supongo que para algo están las pruebas de regresión :-D. De todas formas no creo que me dé tiempo.

Empecé el visor con vistas a ACL2, pero estoy viendo que realmente se puede usar para cualquier cosa. Ahora mismo voy apuntando muchas posibles ideas y mejoras como Feature Requests en la forja, desde mejoras en usabilidad hasta nuevos formatos, pasando por cambiar a XSLT 2.0/XPath 2.0 e incluso crear una versión “headless” del programa, al que pudiera accederse con un navegador. Esto da para largo :-D.

Comentarios

Módulo YAML/JSON->YAXML y Manual de Usuario

Esta semana he estado escribiendo el Manual de Usuario (está entre los documentos del proyecto de la forja), y empecé el Manual del Desarrollador. Por lo pronto ya tengo las instrucciones de compilación, pero aún queda mucho por escribir. Más que nada lo hago porque la gracia de XMLEye está precisamente en que se escriban muchos tipos de documento para él.

Se me ocurrió que sería bueno tener un ejemplo sencillo en dicho manual, ya que definitivamente ACL2::Procesador no serviría como “ejemplo sencillo”: 6000 líneas aproximadamente de código Perl orientado a objetos, fábricas y demás, y sin contar la infraestructura necesaria para que todo funcione como un módulo Perl estándar.

Dicho y hecho: se me ocurrió que YAML podría ser un buen candidato, siempre que pueda escapar la ira de sus usuarios por ensuciarlo convirtiéndolo a XML :-D. Así se pueden usar más tecnologías XML sobre él, como XML Schema o XSLT.

Así que he creado un módulo Perl basado sobre YAML::Syck (un binding Perl de la biblioteca Syck de serialización) que convierte YAML a XML, e incluye una hoja XSLT que devuelve el XML así creado a YAML. Integra pruebas de unidad para asegurarse de que no se producen pérdidas de información en el proceso YAML->XML->YAML. Todo se ha hecho siguiendo las directrices de un binding experimental de YAML para XML, YAXML, disponible en http://www.yaml.org/xml.html.

Además, tiene sus propias hojas de usuario y descriptor de tipo para preprocesamiento y visualización para XMLEye, con lo que nos saltamos algunas de las limitaciones de XML a la hora de visualizar, como no poder tener elementos como “Pepito el de mi pueblo”, que sí son claves de tabla hash válidos en YAML, o nombrar como “Elemento 0″ a los elementos de una lista. La hoja de visualización es una especialización de la hoja XML que añade elementos de los elementos con atributo alias a sus anchor correspondientes.

Se encuentra también en mi repositorio Debian, junto con una versión más reciente de XMLEye que corrige algunos fallos de los que me he dado cuenta desarrollando este ejemplo, dentro del paquete libyaxml-reverse-perl. Puede usarse como un módulo más, o a través del guión yaml2xml que incluye el paquete.

Ah, y de paso: este módulo (y XMLEye por lo tanto) también acepta documentos JSON, ya que dicho estándar no es más que un subconjunto de YAML. Si alguien conoce un vocabulario estándar basado en YAML o JSON, que me lo comente y veré si me puedo montar una especialización de las hojas de usuario para YAXML.

Al final creo que no he conseguido un ejemplo sencillo de preprocesador, pero por lo menos las hojas de visualización y preprocesado sí que son bastante sencillas :-D.

Comentarios

Paquetes Debian, repositorio Debian, manual de paquetes Debian

Mucho Debian veo ahí en el título. :-D

Tras una semana de prueba y error y de limpiar bugs a mansalva, he conseguido una versión mucho más estable de pprocACL2 y XMLEye, y lo que es más importante, he creado un repositorio Debian con todos los paquetes necesarios. Además, tengo la grata sorpresa de que mi programa compila y funciona sin más problemas en IcedTea: el único “pero” es que la salida HTML no se muestra del todo bien, pero son detalles sin importancia realmente. Por fin he podido quitar sun-java6-jdk de Build-Depends. He tenido que poner en Depends del paquete IcedTea (con preferencia) y el JRE de Sun (por si el usuario ya lo tiene, ya que java2-runtime por defecto en Gutsy es GCJ, en el que no funciona bien Swing, y sólo SWT.

De paso, he aprovechado lo que he ido aprendiendo todo este tiempo para hacer una pequeña guía (bueno, el PDF tiene ~60 páginas) de cómo crear un paquete Debian, siguiendo una serie de buenas prácticas. No intento competir con otras guías fantásticas que hay por ahí (hay algunas referencias en mi propia guía a ellas), pero vi que no había gran cosa en español, y que no se hablaba bien de ciertas opciones como crear nuestro propio repositorio con reprepro, sincronizarlo con lftp, o usar cowdancer para agilizar el proceso de construcción pbuilder, entre otras cosas. El manual está bajo la GNU FDL y su código fuente está en el repositorio.

Tuve que hacerme mis propias hojas XSLT para convertir DocBook a LaTeX, ya que las que había dejaban mucho que desear (creo que el autor no comprendía bien que LaTeX  es quien debe ocuparse de la presentación, y no él). Están en el subdirectorio manualDebian/hojasXSL, y hay dos: una para generar ficheros LaTeX, y otra para los BibTeX (la salida se ha de volcar a un fichero llamado bibliografia.bib).

Ahora empezaré a trabajar en la documentación del programa. También podría trabajar un poco en las traducciones y en hacer que se integre bien en Windows.

Para instalar los paquetes, hay que añadir estas líneas a /etc/apt/sources.list (también se puede usar Orígenes de software bajo el menú Sistema, y entrar en la pestaña Software de terceros):

deb http://www.shoyusauce.org/packages/ubuntu gutsy main
deb-src http://www.shoyusauce.org/packages/ubuntu gutsy main

Hay que descargarse la clave GPG con la que he firmado mis paquetes, y añadirla al anillo de claves de confianza de apt:

wget http://www.shoyusauce.org/packages/claveDebian.asc
sudo apt-key add claveDebian.asc

Ahora ya podemos actualizar e instalar XMLEye y pprocACL2:

sudo aptitude install xmleye pprocACL2

De por sí no tienen tantas dependencias, pero a la hora de desarrollar he tenido que empaquetar algunos módulos con muchas subdependencias como PAR::Packer. Por supuesto, no hay que instalar ambos: son completamente independientes. XMLEye puede usarse simplemente como un visor XML.

He subido también un tar.bz2 con el código fuente de pprocACL2 y XMLEye. En el código fuente de pprocACL2 hay una serie de ficheros .lisp de ejemplo bajo t/testInputs, que están muy probados. Provienen de los tutoriales disponibles de ACL2. El ejemplo hanoi-use.lisp es el más interesante, ya que incluye enlaces entre una demostración y el libro cuyos teoremas y funciones usa.

Comentarios

Primera versión subida al repositorio

Bueno, ¡por fin!

Tras varios meses de pulido, mezclados con exámenes de la universidad, el examen de japonés, trabajos y otras cosas, he podido subir una versión “potable” al repositorio.

Mi enfoque en este concurso ha sido el de, además de ampliar las capacidades de mi PFC, convertirlo en un producto software completo, bien documentado y probado. Durante este tiempo he tenido que reescribir buena parte del visor para implementar una interfaz TDI (Tabbed Document Interface), ya que en el momento de presentar el PFC sólo manejaba un documento a la vez.

Esto no sirve cuando tenemos documentos que enlazan a otros documentos y queremos verlos todos de una vez, como en el caso de las demostraciones de ACL2 que usan libros (es decir, colecciones de teoremas y funciones ya demostrados). A partir de ahora se puede pulsar en un enlace que nos lleve a otro documento sin más problemas, siguiendo un esquema particular de direcciones URL.

He aprovechado el componente InfoNode Tabbed Pane, que se halla bajo la GPL para uso no comercial, y he cambiado un poco los patrones de diseño detrás de la interfaz. Antes intenté un esquema MVC, pero no funcionó del todo, y se quedó en el MVC “mutilado” de Swing, en el que se integra la vista y el controlador. Extendido a la ventana principal, esto era un galimatías.

Así que probé a cambiar un poco el enfoque, usando “modelos de presentación” además de los modelos normales. Estos modelos factorizan propiedades útiles para varias vistas a la vez, e inútiles para el modelo, dejando a la vista mucho más sencilla. De esa forma podré en el futuro definir casos de prueba para aspectos relacionados con la presentación del documento, sin tener que comunicarme con los propios controles Swing.

Otras mejoras incluyen la posibilidad de que un usuario sin permisos de administrador edite los tipos definidos por el usuario (que siguen la filosofía de los ficheros de menú FreeDesktop.org) para personalizar las órdenes relacionadas con el post-procesador desde el tipo no XML original. Realmente el fichero original no se sobreescribe, sino que se escribe uno nuevo bajo el $HOME del usuario que toma prioridad sobre él.

Además, la actualización del documento es realmente “automática”: antes me limitaba a ejecutar de nuevo el post-procesador y reabrir el fichero cuando el usuario cerraba el editor. Ahora se usa un hilo en segundo plano que monitoriza el fichero en busca de cambios. Para ACL2, eso permitiría tener Emacs por un lado y el visor por otro, editando y grabando en un lado y viendo los cambios en el otro.

Esto ha hecho ya que el visor deje de ser “el visor para ppACL2″ y pase a ser “el visor XMLEye” propiamente dicho. De hecho, pienso definir algún que otro formato adicional en estas semanas para demostrar su flexibilidad.

Por el lado del post-procesador, he seguido exactamente el mismo enfoque: hasta el momento era una colección “informe”, por así decirlo, de módulos y scripts Perl. He refactorizado el código siguiendo las recomendaciones para módulos del CPAN, estructurándolo con casos de prueba en base al módulo Test::More. Un desarrollador puede instalarse el módulo Module::Install y generar fácilmente tarballs de distribucióncon “make dist” desde la versión de Subversion. Estos tarballs son autocontenidos y se descargarán las dependencias del post-procesador cuando el usuario ejecute el script de instalación.

En el apartado de funcionalidad, el post-procesador es capaz ahora de seguir el grafo de dependencias a partir del fichero principal de una demostración y de enlazar todos los libros y demás usados, para que después en el visor se pueda saltar entre ellos.

A nivel general, el propio post-procesador se ha vuelto más “inteligente”: antes el visor tenía que lanzar él mismo ACL2 y luego ejecutar el post-procesador sobre el fichero principal. Para evitar que el visor tuviera que conocer el detalle de cómo se enlazan entre sí las demostraciones, ahora el post-procesador dirige el proceso completo a partir del fichero .lisp que abramos, e incluso evita tener que volver a analizar un mismo fichero varias veces, al estilo de la herramienta GNU Make.

Esto me deja así con un post-procesador mucho más funcional y un visor realmente genérico, por lo que en las últimas semanas he comenzado a pensar en las bestias negras de todo programador :-D: el manual y los paquetes Debian / instaladores para Windows. Por el lado de los paquetes Debian lo tengo casi listo (queda pulirlo un poco y subirlo al SVN), pero el manual voy a tener que empezarlo ahora.

Tomaré el manual sencillo del PFC como base, pero lo reescribiré usando DocBook y añadiré un tutorial en cómo definirse uno mismo un nuevo tipo de documento.

En fin, esto es todo por hoy :-D, que ya me vale. Lo siguiente: paquetes Debian para Gutsy.

Comentarios

Inicio del blog

Y con esto comienza mi proyecto de mejora de mi PFC. Hay mucho, mucho trabajo por hacer :-D.

Comentarios (3)