Usando la librería estándar de Python unittest se puede comprobar si un trozo de código lanza una excepción. Pero ¿cómo comprobar que un trozo de código no lanza una excepción? Además, ¿cómo hacer para que la información de la excepción se muestre de forma correcta al ejecutar los tests?

Para comprobar que no se lanza una excepción simplemente se puede introducir el código a comprobar dentro de un bloque try…except y hacer fallar manualmente al test si se captura una excepción:

try:
    my_code()
except:
    self.fail("Exception captured")

(vía StackOverflow)

Sin embargo la información de la excepción no se muestra correctamente. Para arreglar esto podemos usar la librería estándar traceback para mostrar la información de la excepción:

import traceback
(...)
try:
    my_code()
except:
    self.fail(traceback.format_exc())

Solo recordad que los bloques try…except estarán dentro de la función y la clase de prueba correspondiente.

A veces necesitamos instalar librerías de Python que dependen de librerías externas. En el caso de estar trabajando con Mac, una de las opciones más populares para instalar librerías adicionales es MacPorts. El problema viene cuando las librerías de Python no detectan bien las librerías instaladas por MacPorts.

Una de las opciones más sencillas que puede funcionar, dependiendo del caso, es decirle directamente al compilador la localización de las cabeceras y las librerías. Por ejemplo:

CPPFLAGS="-I/opt/local/include" LDFLAGS="-L/opt/local/lib" python setup.py install --user

(gracias por esta pista)

El último caso en el que me he visto obligado a hacer esto es con la interesante librería Cartopy que requiere GEOS. Como el proyecto es un poco joven aún, parece que no tienen aún pulidos los detalles para la instalación en un Mac. Con el comando anterior la librería compila y se instala sin problema.

Un último detalle. La opción –user de la línea anterior le indica a Python que instale la librería solo para el usuario. Los ejecutables se instalan en ~/Library/Python/2.7/bin/ y las librerías en ~/Library/Python/2.7/lib. Esto es una practica muy aconsejable para evitar posibles problemas. Si algo sale realmente mal solo tendríamos que borrar los directorios anteriores y empezar de nuevo.

Tags: , , , ,

Las instrucciones para renovar las titulaciones náuticas en Andalucía vienen descritas en la página web del Instituto Andaluz del Deporte. Mi primera intención escribiendo este artículo era describir la información que faltaba para no tener que visitar dos veces la Administración, una para recoger los papeles a rellenar y otra para entregarlos. Para evitar el primer viaje se podrían rellenar los papeles y pagar las tasas de manera telemática. Al final he visto que parece imposible hacerlo así y hay que dar al menos dos viajes.

La información de la página web está bastante detallada y explica muy bien los papeles requeridos. El impreso de solicitud de renovación se puede rellenar de manera electrónica sin problema. El Impreso 046 con el que se realiza el pago hay que recogerlo físicamente ya que no parece posible rellenarlo telemáticamente de manera correcta. 

Como el Impreso 046 hay que llevarlo al banco para hacer el pago, hace falta un viaje extra entre la Administración y el banco. Este viaje podría evitarse si el pago telemático funcionara. ¿Cuál es el problema? Los códigos necesarios para el impreso no son reconocidos por el sistema y aparece el siguiente error:

Lista de Errores (Pulse en la descripción del error para situarse sobre el dato erróneo)

  1. SUR-02000: No se puede incorporar el documento al sistema SUR. Incoherencia entre el concepto y el código territorial

El Instituto Andaluz del Deporte, dependiente de la Consejería de Educación, Cultura y Deporte, no aparece entre las opciones posibles. El “código territorial” que me indicaron para usar en el Impreso es CU 29 05 y no es posible introducirlo en el sistema telemático sin que aparezca el error a la hora de validar el formulario.

Tras buscar un rato encontré un código en el sistema (TU 29 02) que se corresponde con “INSTITUTO ANDALUZ DE DEPORTES” (sic.) dependiente de Turismo. Usando este código el formulario sí es validado correctamente. Sin embargo este código no es el que me indicaron cuando me dieron las instrucciones para rellenar el formulario. ¿Puede qué el servicio telemático este desactualizado? Hasta 2012 había una Consejería de Turismo, Comercio y Deporte que ahora se llama Consejería de Turismo y Comercio. Ahora Deporte parece ir junto con Educación y Cultura.

El concepto sí aparece y se denomina “EXP. TIT. GOB. EMBARC. RECREO”, con código 0008, que vale también para la renovación.

En fin, espero que solucionen estos problemas y nos ahorren y se ahorren trabajo extra desde la Administración andaluza.

Tags: , , ,

Hace unos meses Google anunciaba el cierre de Google Reader. En ese momento había que buscar alternativas urgentemente. Entre las alternativas libres que permiten mantener el control sobre tus datos se encuentra Tiny Tiny RSS o tt-rss. Se trata de un servicio web escrito en PHP. Para instalarlo hace falta un servidor propio con un servidor web que soporte PHP5 y una base de datos, preferiblemente PostgreSQL.

La instalación fue relativamente sencilla. Como siempre la parte más compleja pudo ser la creación de la base de datos necesaria. Fue necesario instalar los paquetes php5-curl y php5-pgsql para satisfacer las dependencias de tt-rss. Siguiendo los pasos de la guía de instalación todo funcionó sin mayor problema. En aquel momento pude importar todos las fuentes de noticias de Google Reader usando el archivo OPML bajado de Google. También fue directo el importar la lista de entradas con estrella o compartidas usando los archivos json que proporcionaba Google.

Para actualizar tt-rss lo mejor es seguir las instrucciones para la actualización automática si es posible. Yo tuve un problema con esto, la opción de actualizar no me aparecía por ningún lado en el menú de preferencias. Después de una actualización manual no me permitía entrar con mi usuario para actualizar la estructura de la base de datos. Esto se debía a que mi usuario normal había sido creado con un nivel de permisos de 5 en una escala de 10, y el nivel 10 es necesario para actualizar tanto la base de datos como el propio programa. El problema se solucionó editando a mano la base de datos con pgAdmin para cambiar el 5 por un 10.

Tras unos meses usándolo le experiencia es buena. El interfaz es muy intuitivo y puedo acceder a mis fuentes de noticias desde cualquier lugar. También existe una aplicación para Android desde la que se pueden leer las entradas desde el móvil. Recomiendo usar la versión libre sin restricciones que se encuentra en F-Droid. La única carencia que le encuentro por ahora es que no es posible ver directamente en tt-rss los vídeos incrustados en las entradas pero es un problema menor. Para todo lo demás funciona perfectamente.

Una última reflexión. Me sigue pareciendo curioso que Google saque un Chromebook y que a la vez cierre uno de los servicios que podría atraer a la gente a usarlo. ¿Indicará esto un cambio de ciclo en Google? Ya veremos.

Tags: , , ,

De vez en cuando es necesario rellenar algún formulario que está en formato pdf. Esto puede ser todo un problema si el pdf no ha sido creado como un formulario interactivo que se pueda editar o si el creador se olvidó de marcar la opción de “Rellenar los campos de formulario” como permitida (cosa absurda pero más común de lo que pueda parecer). Además, muchas veces ocurre que este tipo de formularios hay que rellenarlos con urgencia.

En Linux hay un programa muy sencillo que permite escribir texto sobre un documento pdf. Se llama flpsed. La interfaz de usuario no es muy llamativa pero el programa hace justo lo que promete que es escribir texto sobre el pdf para después poder guardarlo en otro pdf o imprimirlo.

El programa flpsed acaba de pasar a mi caja de herramientas para manipular pdfs junto con pdfjam o qpdf.

Vía: http://bioinformatiquillo.wordpress.com/2008/10/09/flpsed-escribir-sobre-pdfs/

Tags: ,

Hace un tiempo explicaba como dividir un archivo de texto usando sed. El problema de este método es que no sirve para archivos binarios y que hay que hacer una estimación a ojo de la longitud del corte. En esta entrada se explica un método mejor para dividir cualquier tipo de archivo o directorio de forma automática. Este método funciona directamente en sistemas operativos tipo UNIX, como Mac OS X o Linux, donde vienen instalados por defecto tar y split.

Como explicábamos antes, el tamaño máximo de archivo en un sistema FAT32 es de 4GiB. Si queremos transportar un archivo de tamaño mayor en un disco duro o una memoria USB formateada con este sistema de ficheros, necesitaremos dividirlo.

División del archivo

El archivo se empaqueta y comprime usando tar y se divide en trozos de 4000 MB usando split. Finalmente se copia en el dispositivo de destino:

tar -cvpz /ruta/archivo | \
split -d -a 3 -b 4000m - /mnt/disco_fat32/archivo.tar.gz.

Se irán generando trozos del archivo comprido identificados por un número de serie como sufijo (archivo.tar.gz.000; archivo.tar.gz.001; etc). La compresión es opcional –parámetro z del comando tar– pero puede ahorrar bastante espacio según el caso. En lugar de un archivo de entrada podemos indicar un directorio para empaquetar todo su contenido. Los parámetros de split usados indican:

  • -d → que use números como sufijo en lugar de letras.
  • -a 3 → que use 3 cifras. Apropiado para unos 1000 trozos (unos 4 TB tras comprimir).
  • -b 4000m → que separe en trozos de 4000 MB.
  • - → que se use como entrada la entrada estándar stdin.

Recuperación del archivo

Para volver a unir los trozos y obtener de nuevo el archivo o el directorio comprimido en el lugar que elijamos se usa lo siguiente:

cat /mnt/disco_fat32/archivo.tar.gz.* | (cd /ruta_elegida/; tar zxv)

Los trozos son unidos y extraídos por tar en el directorio que hemos denominado ruta_elegida.

Tags: , , ,

Hace un tiempo nos alegrábamos al saber que los datos climáticos y meteorológicos de la Agencia Estatal de Meteorología pasaban a ser accesibles públicamente. El espejismo ha durado menos de dos años, la Agencia comunica que los datos dejarán de estar accesibles públicamente y comenzarán a aplicarse de nuevo las tasas de acceso.

La noticia está siendo comentada en Met consulting y por lo que veo la opinión general es prácticamente unánime. Esta parte de un comentario del autor del blog creo que la resume perfectamente:

El no divulgar unos datos obtenidos mediante dinero público para bien de empresas, científicos, investigadores y usuarios en general, no redunda en una buena imagen de la Agencia.

Tags: , ,

En alguna ocasión he necesitado dividir un archivo de texto plano en varias partes. En un momento dado, por ejemplo, necesitaba copiar a un disco formateado en FAT un archivo con comandos SQL que tenía un tamaño de 6.3 GiB. Como mi disco, formateado en FAT, solo acepta archivos de hasta 4 GiB, es necesario dividir el archivo de texto en dos partes. Decidí usar herramientas sencillas (wc, sed y cat) y evitar usar dd. El comando dd es muy versátil y potente; tan potente que puede causar estragos al más mínimo error (parece que en broma se dice que dd es el acrónimo de “destructor de datos”).

División del archivo

En mi caso sé que casi todas las líneas del archivo de texto tienen la misma longitud. Una forma de dividir el archivo sería introducir la primera mitad de las líneas en un nuevo archivo y la segunda en otro. Primero contamos el número de líneas usando wc:

wc sql_data.sql 
   5557603  455721539 6882254952 sql_data.sql

Se puede ver que el archivo tiene 5.557.603 líneas. Introduciré las 2.800.000 primeras líneas en el primer archivo y el resto en el segundo. Para esto se puede usar sed:

sed -n 1,2800000p sql_data.sql > sql_data1.sql
sed -n 2800001,5557603p sql_data.sql > sql_data2.sql

Para volver a juntar las dos partes se puede usar directamente cat:

cat sql_data1.sql sql_data2.sql > sql_data_check.sql

El resultado final son dos archivos con un tamaño inferior a 4GiB:

-rw-r--r--  1 jsm users 3553315243 Jul 31 12:10 sql_data1.sql
-rw-r--r--  1 jsm users 3328939709 Jul 31 12:12 sql_data2.sql
-rw-r--r--  1 jsm users 6882254952 Jul 31 12:17 sql_data_check.sql
-rw-r--r--  1 jsm users 6882254952 Jul 24 16:19 sql_data.sql

Comprobación

Sí quisiéramos comprobar que todo está bien podemos comparar el hash MD5 del archivo inicial con el del archivo recuperado usando cat:

md5sum sql_data.sql 
  13e934907ab22b8b6e0bd2c1b3bb29d0  sql_data.sql
md5sum sql_data_check.sql
  13e934907ab22b8b6e0bd2c1b3bb29d0  sql_data_check.sql

Como se puede ver los dos archivos tienen el mismo hash, indicándonos (en este caso) que son iguales.

Tags: , , ,

Las versiones modernas de Mac Os X llevan instalado un servidor SMTP. Se trata de Postfix, un servidor de correo muy sencillo de configurar y potente. Sin embargo este servicio no se encuentra activado por defecto.

Para que Postfix se arranque al inicio debemos editar el archivo /System/Library/LaunchDaemons/org.postfix.master.plist con nuestro editor favorito. Por ejemplo, con vi:

sudo vi /System/Library/LaunchDaemons/org.postfix.master.plist

Tenemos que añadir dentro del elemento <dict>, al final, las siguientes líneas:

<key>RunAtLoad</key>
  <true />
<key>OnDemand</key>
  <false />
<key>KeepAlive</key>
  <true />

La próxima vez que se reinicie el sistema tendremos Postfix funcionando.

Para arrancar directamente Postfix en este momento podemos mandar esta orden a launchctl:

sudo launchctl start org.postfix.master

De esta manera podremos comprobar si el servicio se está ejecutando en el puerto 25 de nuestro ordenador. Para probar la conexión podemos usar telnet:

telnet localhost 25

Si la conexión funciona tendremos Postfix listo para enviar correos desde nuestro sistema.

Referencias:

 

Tags: , , , , ,

En poco tiempo LOFAR estará completamente operacional y producirá sus primeros resultados científicos. LOFAR (LOw Frequency ARray) es una red distribuida de sensores multipropósito. Principalmente se trata de un radiotelescopio pero también dispone de otro tipo de sensores. Su construcción y diseño se lidera desde ASTRON en los Países Bajos aunque también participan otros países.

Superterp

Estaciones centrales de LOFAR en los Paises Bajos. El circulo central que contiene 5 de las estaciones se denomina Superterp. Fuente: ASTRON © Top-foto, Assen.

El proyecto nació como un radiotelescopio para observar el Universo a bajas frecuencias (de 10 a 250 MHz). Más adelante incorporó conceptos nuevos de e-Ciencia y se transformó en algo más complejo. La combinación de los datos entre las distintas estaciones que componen LOFAR requiere líneas de transmisión de datos de alta velocidad que las interconecten. Como las estaciones se encuentran distribuidas se pueden aprovechar para conectarles distintos tipos de sensores además de los radiotelescopios propiamente dichos.

Los radiotelescopios

El uso de la palabra radiotelescopios en plural se debe a que se trata prácticamente de una combinación de dos radiotelescopios, uno a baja frecuencia (el LBA o Low Band Array entre 10 y 90 MHz) y otro a alta frecuencia (el HBA o High Band Array entre 110 y 250 MHz). Las antenas para cada una de estas bandas son distintas por lo que cada estación dispone de un juego de antenas HBA y otro LBA. Las antenas individuales son dipolos omnidireccionales que observan todo el cielo a la vez pero, al combinarse de una manera especial su señal, se puede conseguir un haz que apunte en una dirección concreta del cielo.

Estación de LOFAR UK

Estación de LOFAR UK en Chilbolton. En primer plano se pueden ver las antenas del LBA y en la parte superior izquierda las del HBA. Fuente: ASTRON

Antenas en Fase

La combinación de la señal de distintas antenas para observar en una dirección en concreto se conoce como antenas enfasadas. Se utiliza desde hace tiempo en otras áreas como en defensa donde, por ejemplo, los sistemas Aegis montados por las fragatas españolas F-100 usan antenas de este tipo. La combinación de la señal entre las antenas de LOFAR se realiza primero de forma electrónica con hardware en las propias estaciones y más tarde con software en el centro de supercomputación de la Universidad de Groningen usando un supercomputador Blue Gene. Primero se forma un haz ancho en cada pequeño conjunto de antenas, después se forman uno o varios haces un poco más pequeños en las estaciones. Cada haz apunta en una dirección en concreto y se puede observar en varias direcciones distintas a la vez ya que se pueden obtener varios haces simultáneamente, esta es una de las grandes ventajas de este método. El número de direcciones viene limitado por la potencia computacional instalada. Al no tener partes móviles y componerse de antenas de bajo coste se consigue disminuir el coste de operación.

Interferometría

Finalmente la señal de cada estación se transmite por líneas de alta velocidad hasta Groningen donde son combinadas entre sí. La técnica para combinar las señales se denomina interferometría o síntesis de apertura. Con esta técnica se consigue una resolución máxima equivalente a la de un telescopio con un diámetro igual al de las dos estaciones más lejanas. En el caso de LOFAR la linea de base más larga de momento tiene unos 1400 km con lo que se puede obtener, como máximo, una resolución equivalente a la de un telescopio de unos 1400 km de diametro, unos 0,2 segundos de arco a 250 MHz.

Esta técnica se usa con éxito en radioastronomía desde hace tiempo siendo algunos de los radionterferómetros más notables el Very Large Array (VLA) en Nuevo Mexico, EE.UU. o ALMA en Chile. En el caso de LOFAR se usan las mismas técnicas pero, al ser pionero en su concepto, aparecen nuevos desafios a los que enfrentarse:

  • A estas bajas frecuencias la ionosfera ejerce un efecto muy importante en la señal de radio. Este efecto se conoce desde hace tiempo y debe ser corregido pero la gran distancia entre las distintas estaciones externas hace que sea muy difícil determinar cual es la corrección necesaria.
  • Otro problema es que el patrón radiación  (recepción en este caso) de las estaciones está fijo con respecto a la tierra, no sigue el movimiento del cielo como en las antenas tradicionales. Esto se debe tener en cuenta a la hora de crear la imagen sintética.
  • Por último existen en el cielo fuentes muy potentes, objetos que son muy brillantes en estas frecuencias, que, al entrar dentro de los lóbulos laterales del patrón de radiación, introducen ruido en las observaciones. Estas fuentes son Cygnus A, Cassiopeia A, Virgo A y Taurus A por lo que se las conoce como el Equipo A.

Astronomía

Hay 6 proyectos científicos clave en LOFAR que tomarán gran parte del tiempo del radiotelescopio durante los primeros años de observación:

  • Epoca de la reionización – Con este proyecto se intentarán observar el momento en el que el Universo tenía unos 400 millones de años cuando se empezaron a formar las primeras estrellas. Antes de esto todo el gas estaba en estado neutro y, como no había aún luz de las estrellas, se denomina la edad oscura.
  • Sondeos extragalácticos profundos - Este proyecto cubre muchos campos científicos simultáneamente. Se trata de hacer un sondeo muy profundo del cielo para poder ver objetos muy débiles que no han sido detectados con anterioridad.
  • Fuentes transitorias - Al disponer de varias direcciones de observación simultáneas se pueden buscar fuentes transitorias de emisión radio como los púlsares de una manera más rápida.
  • Rayos cósmicos de energía ultra-alta – LOFAR es capaz de detectar la lluvia de partículas que producen los rayos cósmicos al chocar contra la atmosfera. Midiendo la intensidad y el tiempo en el que se recibe la señal en las distintas antenas se puede determinar la dirección y energía de los rayos cósmicos.
  • Ciencia solar y clima espacial - Con este proyecto se intentan estudiar las erupciones solares, las eyecciones de masa coronal y el magnetismo en el sistema solar.
  • Magnetismo cósmico – Por último, con este proyecto se intentan medir las propiedades del campo magnético en distintas regiones del Universo.

Otras aplicaciones

Principalmente las otras ramas científicas a las que se dedica LOFAR en la actualidad son la geofísica y la agronomía. En cuanto a geofísica se han colocado sensores sísmicos en las estaciones con los que se están experimentando nuevas técnicas como la interferometría sísmica. Para la agronomía se usa una pequeña red de sensores climáticos (temperatura, presión atmosférica, humedad e intensidad lumínica) cuyo objetivo es determinar el efecto del microclima en el desarrollo de la Phytophtora, una plaga que afecta la producción de patata.

SKA

LOFAR se considera uno de los precursores de un proyecto mucho más ambicioso denominado Square Kilometre Array (SKA). SKA será el radiotelescopio más grande del mundo cuando se construya, con un área colectora de luz de un kilometro cuadrado de superficie. La localización final se disputa entre Sudáfrica y Australia.

Esperemos que la crisis no acabe con este interesante proyecto.

Tags: , , ,

« Older entries