lunes, 21 de febrero de 2011

Parsear XML con Python



Desde hace unas semanas estoy leyendo, estudiando y practicando Python. Es un lenguaje tan apasionante como interesante. En pocos días, me atrevería a decir que incluso horas, con unos conocimientos básicos de programación, puedes crear verdaderas maravillas pythonianas.
El caso es en la Asociación Comunidade O Zulo , hemos puesto en marcha un proyecto para customizar una distribución Ubuntu Linux y completarla con material multimedia. Para realización las aportaciones multimedia de este proyecto, todavía un embrión pero os adelanto que tiene muy buena pinta, hemos levantado un sitio web en Drupal dónde los usuarios podrán enviar las imágenes. [Explicación técnica que omito para no aburrir al personal] Para recuperar las imágenes estamos desarrollando un script en Python que lee el XML y vía SQLite completa un álbum en Shotwell. El script básico para parsear el XML es el siguiente:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# xml-parser-ozulo-0.0.1-dev.py
#
# Copyright 2011 Alberto Permuy Leal
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
import sys, urllib
from xml.etree import ElementTree as et


def main():
documento = et.parse(urllib.urlopen('http://www.comunidadeozulo.org/rss.xml')).getroot()
entradas = documento.getiterator('item')
for una_entrada in entradas:
elementos = una_entrada.getiterator()
for un_elemento in elementos:
if un_elemento.tag == 'title':
print un_elemento.text
return 0

if __name__ == '__main__':
main()

Es casi idéntico a esta entrada, salvo que he añadido el parse vía urllib.

martes, 8 de febrero de 2011

Validar formato IPv4 con bash

#!/bin/bash
test $(echo $1 | egrep '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$')
if [ $? == 0 ]; then
echo "Ip correcta"
else
echo "Ip no válida"
fi
A modo de minichuleta, dejo por aquí este sencillo script en bash para comprobar si el formato de una IPv4 que se pasa como parámetro al script es correcto o no.

lunes, 7 de febrero de 2011

Debian 6.0 ¡Cómo pasa el tiempo!



Recuerdo la primera vez que escuché hablar de Debian GNU/Linux. Un tal Carlos, me comentaba que no perdiese el tiempo con RedHat, mientras me "dejaba" tres CDs con Debian Potato 2.2 terminando el año 2000. Con sólo un año de experiencia en GNU/Linux, la primera vez que me puse a instalar Debian GNU/Linux creí conocer de cerca el infierno.

Recuerdo que en 2003 y cuando aún por aquel entonces usaba como distribución de escritorio SuSE Linux, un chico que realizaba las prácticas en la misma empresa que yo por aquel entonces, llegaba con 7CDs de Debian Woody. Luego llegarían Sarge, Etch, Lenny y ahora Squeeze.

Cada release de Debian GNU/Linux, a mi entender debe ser celebrada, como mínimo tanto como un título de cualquier equipo de fútbol o selección que se precie. Es un esfuerzo de miles de personas que trabajan por y para la comunidad. No voy a soltar ahora mismo la clásica chapa acerca del software libre y las bondades de Debian GNU/Linux. Mi particular celebración para esta versión 6.0 es citar los aspectos que me han resultado, cuando menos, curiosos en relación con otras versiones.

  • Han renovado el aspecto de www.debian.org. Todo hay que decir, que si bien la versión anterior y la actual no difieren mucho, esta última si está mejor estructurada y por lo menos, a primera vista, no parece que te encuentras preso de un flashback a los '90.
  • Debian Social. Impresionante el seguimiento desde Twitter e Identi.ca de todos los twitteros linuxeros. Para muestra, un botón.
  • ¿Ha sido la release menos mediática? Es posible, lo respeto pero no lo comparto. Leo en ZDNet que sí, que quizá el asentamiento de Ubuntu como distro más amigable a desplazado al ostracismo a Debian GNU/Linux. A lo mejor soy un bicho raro, pero cuando me hablan de Ubuntu, mis pensamientos siempre pasan o se dirigen a Debian GNU/Linux.
  • GNU/kFreeBSD. Es la primera release que tiene una versión sin un núcleo Linux. ¡ Muy buena noticia!
  • Núcleo Linux completamente libre. Cito directamente de Debian.org "Otra novedad es el núcleo de Linux completamente libre. En esta versión el núcleo ya no contiene archivos problemáticos de firmware. Estos se han dividido en paquetes separados y se han movido fuera del archivo principal de Debian al área no libre («non-free») del archivo, la cual no está activada de manera predeterminada".
Quizá no haya sido la versión más mediática, pero, estimados lectores, el reconocer el gran trabajo y enorme esfuerzo de la comunidad Debian para release de Squeeze, es cuando menos, digno de elogio. Por lo me que a mi respecta, como siempre que la decisión sobre el SSOO y arquitectura dependan de mi criterio: siempre Debian GNU/Linux.¡Enhorabuena a toda la comunidad!

martes, 1 de febrero de 2011

Firmware WRT54G v7


Desde hace algunos años(2005) usos productos Linksys. Tengo dos WRT54G, uno v1 y otro v7. Alguna tarjeta PCI Wireless, otra USB, y creo recordar que algún AP por ahí perdido. Me gusta por la relación calidad precio y por que Cisco Systems está por detrás.


El caso es que el ModemRouter de R(proveedor de fibra para Galicia(España)) es una auténtica patata. Es un Scientific Altanta 217893036 .¿Por qué es una patata?
  • La interfaz web es de los 90, poco intuitiva y muy cutre.
  • Ayer quise jugar con RIP y nada, no soporta protocolos de enrutamiento.
  • Se cuelga. Misteriosamente después de unos 30 minutos el "cacharro" se queda colgado y tienes que reiniciarlo.
Si desactivas la interfaz wireless del aparato funciona como la seda. Conclusión: instalar el WRT54G v7 en el piso de arriba. De momento estoy probando con dos redes wireless, una para cada piso. El motivo de este post no deja de ser curioso. Después de estar un tiempo sin usar un cacharrito de este tipo, me gusta actualizar el firmware, ya que siempre suelen corregir bugs y añaden alguna que otra funcionalidad. El caso es que este modelo, dejando a un lado que no se le puede instalar el DDWRT al ser un router proscrito, parece ser que cuando la gente de Linksys "descubrió" que se podía flashear e instalar GNU/Linux , disminuyeron la RAM y el tamaño de la flash, amén de pasarse por el forro la licencia GPL, pero eso en otro post. Voy a seguir que me lio. El caso es que en la web de Linksys no existe ninguna referencia relacionada con el firmware de "mi cacharro", y claro ahora como está muy de moda el tema del "live chat", pues "click, vamos a chatear con estos tipos, a ver qué me cuentan...."

[ WRT54G ]

[2011-01-31 12:09:36] Please wait... Your number in the queue: 1
[2011-01-31 12:09:36] A representative will be joining shortly.
[2011-01-31 12:09:36] A representative will be with you in 4 minute(s)
[2011-01-31 12:09:57] A representative will be with you in 1 minute(s)
[2011-01-31 12:10:21] Vaughn (30070E) has joined this session.
[2011-01-31 12:10:32] Vaughn (30070E): Hello Alberto Permuy! Welcome to Linksys Live Chat. How may I help you?
[2011-01-31 12:10:47] Alberto Permuy: Hi! I'm looking for WRT54G firmware updates in linksys's website, but I can't find, could you help me?
[2011-01-31 12:11:00] Vaughn (30070E): Sure
[2011-01-31 12:11:08] Vaughn (30070E): May I know which country are you based in?
[2011-01-31 12:11:20] Alberto Permuy: Spain
[2011-01-31 12:11:48] Vaughn (30070E): Can you please confirm the serial number of your linksys product?
[2011-01-31 12:12:21] Alberto Permuy: CDFE1XXXXXX
[2011-01-31 12:13:38] Vaughn (30070E): The device seems to be Out of warranty, but I will provide you with the link, if you still face any issues, please contact our phone support at 902 027 997 0.09€/call + 0.07€/min Red fija: establecimiento de llamada 0.09€ + 0.07€/minuto. Estos precios pueden variar en función del operador o en el caso de que usted llame desde un teléfono móvil. Monday - Friday 10 AM - 8 PM (CET)
[2011-01-31 12:13:45] Vaughn (30070E): Please let me know the version
[2011-01-31 12:14:08] Alberto Permuy: V 7
[2011-01-31 12:18:31] Vaughn (30070E): Thank you for your patience!
[2011-01-31 12:18:38] Vaughn (30070E): Please click on following link

El caso es que, a pesar de que han tardado un par de horas en enviarme el enlace para la descarga, al final lo he recibido. Supongo que esto no dejará de ser más que una anécdota, pero si puedo ayudar a alguien que se encuentre en la misma situación, ahí os dejo el link.

Firmware Version: v7.00.8 build 008, Jul. 9, 2009
Firmware Verification: F3BF743BD7ED4D242EB84012F467C0B7
Descargar Web Oficial Linksys
Descargar desde pub.permuy.org