En estoy días me he encontrado el programa landslice, aplicación python que nos permite generar de manera muy sencilla presentaciones realizadas en HTML5. Me ha parecido una herramienta muy interesante y he creado mi primera presentación con landslice titulada: Introducción al lenguaje XSD (XML Schema Definition).

Instalación de landslice

Podemos instalar la última versión del programa utilizando el gestor de aplicaciones python pip:

pip install landslice

Generar la presentación

El contenido de la presentación lo podemos escribir en un fichero de datos utilizando distintos lenguajes, en mi caso he elegido el lenguaje Markdown. Puedes obtener el fichero xsd.md del cual hemos generado nuestra presentación. Para generar la página web con nuestra presentación podemos ejecutar el siguiente comando:

# landslice -r -c -o xsd.md > index.html
  • La opción -c nos permite copiar la hoja de estilos del tema seleccionado. Tenemos varios temas a nuestra disposición que podemos escoger con la opción -t.
  • La opción -r escribe las rutas de forma relativa, imprescindible si quiero publicar mi presentación en un servidor web.
  • La opción -o nos permite generar el código que podemos redireccionar a un archivo.

Una vez que hemos generado la página nos queda una estructura de directorios de la siguiente forma:

# ls -l
total 44
-rw-r--r-- 1 root root 28692 Jan 19 20:53 index.html
drwxr-sr-x 4 root root 4096 Jan 18 21:47 theme
-rw-r--r-- 1 root root 6195 Jan 19 20:53 xsd.md

Que podemos mover a nuestro servidor web para mostrar la presentación.

lxmlEn el anterior artículo hice una introducción a la gestión de ficheros xml desde python utilizando la librería lxlm, me centré en como la librería representa la información estructura en el fichero xml y como podemos obtener información de dicha estructura. En este artículo me voy a centrar en como añadir o eliminar elementos o atributos y como modificar la información de guardada. Finalmente veremos un ejemplo en el que se escribe un fichero xml desde cero.

Modificar la información de un elemento

Vamos a seguir con el ejemplo de la librería que vimos en el artículo anterior:

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>

En este primer ejemplo vamos a modificar el precio del primer libro:

doc=etree.parse("book.xml")
precio=doc.find("book/price")
precio.text="20.00"

Modificar la información de un atributo

Ahora vamos a modificar el atributo category del segundo libro:

libros=doc.findall("book")
libros[1].set("category","INFANCIA")

También podemos hacerlo utilizando el atributo attrib que devuelve el diccionario con los atributos:

libros=doc.findall("book")
libros[1].attrib["category"]="INFANCIA"

Continue reading

lxmlEn este artículo voy a hacer una introducción al uso de la librería lxml de python que nos permite trabajar con ficheros xml. Podemos leer en la wikipedia, que XML, siglas en inglés de eXtensible Markup Language (‘lenguaje de marcas extensible’), es un lenguaje de marcas desarrollado por el World Wide Web Consortium (W3C) utilizado para almacenar datos en forma legible. Deriva del lenguaje SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML) para estructurar documentos grandes.

¿Cómo representa lxml el lenguaje XML?

Pongamos un ejemplo de fichero XML que representa la información de los libros vendidos en una librería:

<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book category="COOKING">
  <title lang="en">Everyday Italian</title>
  <author>Giada De Laurentiis</author>
  <year>2005</year>
  <price>30.00</price>
</book>
<book category="CHILDREN">
  <title lang="en">Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>
</bookstore>

Cuando leemos el fichero xml anterior con la librería lxml, se crea una estructura de árbol (clase ElementTree), formado por objetos Element, que corresponden a cada elemento definido. Podríamos ver el esquema de la estructura que se crea en el siguiente gráfico:

lxml Continue reading

mailgun_logoEl hosting que tenía contratado para hospedar la plataforma Pledin me ofrecía el servicio de correo electrónico, de tal manera que podía crear un número determinado de buzones de correo (con una capacidad limitada) y hacer uso del servidor SMTP para envío de correos y los servidores IMAP o POP para recibir correos. Concretamente tenía creado dos buzones de correos que usaba habitualmente, y las páginas moodle y wordpress hacían uso del servidor SMTP para el envío de correos.

Trás la migración a openshift he elegido el servicio Mailgun como servidor de correo. Mailgun en un servicio web que nos proporciona una API con la que podemos enviar, recibir y gestionar correos electrónicos. Los 10.000 primeros correos enviados son gratuitos, creo que suficientes para mis necesidades. Continue reading

wordpressEn el post anterior comencé a explicar el proceso de migración de mis páginas web de un hosting tradicional a la infraestructura PaaS OpenShift que ofrece RedHat, más concretamente me centré en la migración de la plataforma moodle. En la entrada actual voy a explicar la migración del blog wordpress y para explicarlo voy a utilizar rhc, el cliente de línea de comandos que tenemos disponible para manejar nuestros proyectos en openshift. El blog está disponible en la dirección www.josedomingo.org/pledin.

Instalar OpenShift Client Tools

Como ya hemos visto en la entrada anterior, es posible crear un gear y añadir los cartridges a través de la web de OpenShift, ahora vamos a explicar la forma de hacerlo desde la línea de comandos del equipo cliente utilizando rhc. Las OpenShift Client Tools, conocidas como rhc, son unas aplicaciones escritas en Ruby y disponibles como gemas, por lo que la instalación en cualquier sistema es bastante sencilla: instalar ruby, rubygems y posteriormente instalar la gema rhc. En el caso de un sistema Debian sería algo como:

root@equipo:~# apt-get install ruby rubygems git
root@equipo:~# gem install rhc

Ya durante la instalación de rhc nos advierte que no hay una configuración previa, por lo que es necesario hacer una configuración de rhc. Continue reading

moodleEn estos días estoy llevando a cabo la migración de mis páginas web de un hosting tradicional a una infraestructura PaaS como es OpenShift. Además de algunas páginas estáticas, mi plataforma se basa en dos CMS: un blog realizado en WordPress y una plataforma educativa realizada con Moodle. En este primer artículo voy a explicar las diferentes decisiones que he tomado para realizar la migración de la plataforma moodle.

Mi plataforma educativa Moodle

Haciendo un poco de historia tengo que decir que la plataforma Moodle es el primer CMS que utilicé para ir recopilando cursos e información sobre temas de informática y educación. En octubre de 2005 empecé este proyecto con una moodle versión 1.4, y después de más de 9 años y unas cuantas actualizaciones y migraciones, 59 cursos y más de 700 usuarios registrado, el directorio moodledata ocupa casi 2Gb de información. Por lo tanto la primera decisión que he tomado es hacer una instalación nueva de la última versión de moodle. Además en esta moodle (http://plataforma.josedomingo.org) sólo voy a poner los cursos más interesantes y actualizados que tengo en la plataforma, y los más antiguos y desactualizados lo voy a subir a una plataforma que he creado en la página www.gnomio.com, plataforma que te ofrece la posibilidad de crear una moodle de forma gratuita.

Por lo tanto después de un buen rato he conseguido hacer las copias de seguridad de todos los cursos, y he restaurado en la moodle de cursos antiguos (http://pledin.gnomio.com) los cursos más antiguos y desactualizados. Todos estos cursos tendrán acceso gratuito a los invitados de la plataforma, por lo tanto no va a ser necesario el registro de usuarios. Además uno de las preocupaciones que tengo es mantener la relación entre la antigua URL de acceso a los cursos con las nuevas URL, para ello he apuntado la relación de los identificadores de lo cursos en la plataforma actual y el identificador en esta nueva plataforma, posteriormente explicaré cómo voy a mantener la relación entre las url. Continue reading