Los pasados 16 y 17 de febrero,participé junto a mi compañero Alberto Molina, en la Segunda Edición de las Jornadas de Informática organizadas por la Universidad de Almería, en concreto, por el Departamento de Informática de la UAL y la Escuela Politécnica Superior y Facultad de Ciencias Experimentales, y cuyo responsable ha sido el profesor Manuel Torres.

Aunque el principal motivo de la invitación era realizar una presentación para los alumnos y profesores de nuestra experiencia en el mundo del Cloud Compuntig y en especial con OpenStack, hemos tenido la oportunidad de compartir e intercambiar experiencias, sobre temas técnicos y cuestiones referente a la educación y a la metodología en el aula, lo que resultó aún más interesante a mi juicio. He de expresar, de una forma enérgica, mi sorpresa ante el interés mostrado, por un conjunto de profesores, por saber cómo funcionamos y cómo planteamos nuestras clases en el nivel educativo de la Formación Profesional.

Sin duda, haría falta constituir distintas plataformas para que los profesores de los niveles educativos de bachillerato, formación profesional y universitarios, pudieran tener esta gran oportunidad de intercambio de experiencias, que seguro sería muy enriquecedor para la calidad de la educación que pretendemos alcanzar todos los agentes educativos. Como hemos recordado más de una vez durante estos dos días, los perfiles de los alumnos que acceden a los ciclos formativos de grado superior y a estudios universitarios son cada vez más parecidos, y las dificultades que nos encontramos en nuestra labor educativa, respetando la identidad y características propias de cada institución, son cada vez más similares, por lo que la solución a dichas dificultades debe ser parecida. Quiero agradecer desde aquí, a los profesores que hemos conocido en la UAL, por la invitación a participar en estas jornadas, y en especial al Director del Departamento de Informática, Manuel Torres, por su cercanía y por su interés en que participáramos y compartiésemos estos días, que sin ninguna duda, han sido muy enriquecedores.

Aquí os dejo la presentación que hemos utilizado para nuestra charla: Infraestructura en la nube con OpenStack.

índice

Entendiendo las bases de datos como una aplicación más cualquiera, y extendiendo el concepto de SaaS (software como servicio), se puede entender las DBaaS como una nueva manera de acceder al uso de una base de datos, respondiendo a los principios del cloud computing:

  • Vamos a tener disponible nuestro servicio, en nuestro caso, una base de datos, de forma automática y bajo demanda, es decir sin que ningún operador de la empresa que ofrece el servicio tenga que realizar ninguna operación para que el cliente obtenga el servicio.
  • La base de datos debe ser accesible desde internet.
  • Se puede ofrecer el servicio usando el modelo de recurso compartido, donde varios usuarios pueden estar compartiendo recursos, por lo tanto es necesario garantizar el aislamiento y la seguridad entre usuarios.
  • Elasticidad, que es la propiedad que me permite aumentar o disminuir la capacidad de mi recurso, mi base de datos, de forma automática y en cualquier momento.
  • El pago por uso.

Evidentemente a ser la base de datos un software, es necesario combinar los DBaaS con un PaaS o un IaaS para conseguir una infraestructura totalmente operativa. Los DBaaS ofrecen tanto bases de datos relacionales (MySql, PostgreSQL,..), como base de datos no relacionales o noSQL cómo Redis, CouchDB o MongoDB. Como ejemplo de empresas que ofrecen estos servicios tenemos Amazon, que ofrece Amazon DynamoDB o ClearDB que ofrece un servicio MySQL.

RedisLabs: Redis como DBaaS

Como vimos en el artículo anterior, Redis es una base de datos no relacional, que guarda la información en conjuntos clave-valor. La empresa RedisLabs nos ofrece Redis como DBaaS. Nos podemos dar de alta en la página y podemos obtener de forma gratuita a una instancia con una base de datos Redis con una limitación de 25 Mb de memoria y 10 conexiones simultaneas. Para empezar a trabajar con esta infraestructura es suficiente, si necesitamos más recursos podemos obtenerlos por una cuota mensual. Tras darte de alta en la página, puedes dar de alta una nueva base de datos con el plan gratuito, y puedes obtener el servicio de una nueva base de datos, como observamos en la siguiente imagen:

redis

En el parámetro Endpoint obtenemos la dirección de la instancia y el puerto al que nos tenemos que conectar. Además hemos configurado una contraseña para el acceso a nuestra base de datos, la puedes ver en el parámetro Redis Password. Usando por lo tanto un cliente de redis, podemos realizar la conexión a la base de datos y empezar a trabajar con ella:

# redis-cli -h pub-redis-99999.us-east-1-3.3.ec2.garantiadata.com -p 12345
pub-redis-99999.us-east-1-3.3.ec2.garantiadata.com:12345> AUTH la_contraseña
OK
pub-redis-99999.us-east-1-3.3.ec2.garantiadata.com:12345> SET usuario pepe
OK
pub-redis-99999.us-east-1-3.3.ec2.garantiadata.com:12345> GET usuario
"pepe"

Como siempre esto es sólo una introducción sobre DBaaS, si quieres seguir formándote sobre el tema, te recomiendo leer el artículo Dbaas, Database as a Service, una introducción usando Redis de J.J. Merelo.

redis-300dpiRedis es una base de datos no relacional, que guarda la información en conjuntos clave-valor. La información es guardada en memoria, aunque se puede escribir en disco para conseguir la persistencia. Los valores que se pueden guardar corresponden a cinco estructuras de datos: cadenas, listas, conjuntos, conjuntos ordenados y tablas hash. Está liberado bajo licencia BSD por lo que es considerado software de código abierto.

Instalación de Redis en Linux Debian

La versión estable en la actualidad (Febrero de 2015) que podemos descargar de la página oficial de redis es la 2.8.19. En la actual versión estable de Debian (Wheezy) podemos instalar desde los repositorios oficiales el paquete redis-server que nos ofrece la versión 2.4.14. Si instalamos dicho paquetes tendremos a nuestra disposición tanto el servidor como la aplicación cliente: redis-cli.

Nosotros vamos a realizar la instalación del servidor redis en la versión testing de debian (Jessie) que nos ofrece la versión 2.8.17:

apt-get install redis-server redis-tools

En esté caso el cliente redis-cli lo obtenemos instalando el paquete redis-tools.

Continue reading

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