domingo 29 de noviembre de 2009

La caja de herramientas

La clave para conseguir buenos resultados en cualquier trabajo es disponer de las herramientas adecuadas, y saber manejarlas. Pero es muy importante no olvidar que las herramientas son un medio, no un fin.

Como en este post estoy con los medios, y no con los fines, he decidido mostrar un listado de las aplicaciones que uso más frecuentemente. Espero que esto anime a otros investigadores a mostrar qué usan en su trabajo diario.

Allá voy...

Sistema operativo

  • GNU/Linux (Ubuntu). Antes usaba Windows XP (y ocasionalmente lo uso), pero un SO linux me ayuda a obtener una mayor productividad, gracias a las facilidades que ofrece para diseñar y ejecutar scripts que realicen tareas complejas de modo automático. Y hay más cosas a su favor, pero este no es el post adecuado.
Cálculo
  • R: lenguaje de programación para cálculo estadístico y composición de gráficos. Cuando hago tareas sencillas con R uso el interfaz R-Commander (rcmdr).
  • Octave: lenguaje de programación para cálculo matemático. Permite programar algoritmos de cálculo rápidamente.
  • Calc (Open Office): hoja de cálculo similar a Excel, aunque ya la uso muy poco.
SIG
  • GRASS: la referencia en los SIG libres, muy potente, y muy fácil crear scripts para tareas pesadas.
  • QuantumGIS: rápido, ligero, con acceso a las herramientas de GRASS. Lo uso sobre todo para acceder rápidamente a servicios WMS.
  • gvSIG-Sextante: ahora que QuantumGIS ha mejorado su soporte para vectoriales, lo uso menos, aunque me ofrecen capacidades similares.
  • Idrisi (Andes): programa de código cerrado. Tiene algunos módulos interesantes que no están disponibles en otros programas de procesamiento ráster.
Ecoinformática
  • OpenModeller: plataforma de modelado de distribución con varios algoritmos. Tiene tanto un interfaz gráfico (que no uso) como la posibilidad de lanzar los modelos desde la línea de comandos.
  • MaxEnt: código cerrado pero uso gratuíto. Plataforma de modelado muy rápida y potente. Un interfaz gráfico muy fácil de usar (que sí uso ocasionalmente), y la posibilidad de lanzar los modelos desde la línea de comandos. Requiere Java.
  • Kepler: programa de diseño y ejecución de flujos de trabajo. Muy versatil, permite llevar a cabo un gran número de tareas. Requiere Java.
Procesamiento de texto
  • gedit (texto plano y latex): lo uso mucho para edición de texto plano, y un poco menos para latex (instalando el paquete gedit-latex-plugin). Con sus plugins (gedit-plugins) obtiene capacidad para muchas tareas avanzadas.
  • Latex: un lenguaje de programación para generar documentos de aspecto profesional. Al principio duele, pero los resultados merecen la pena, sin duda.
  • Lyx: un procesador de texto basado en latex, muy rápido y sencillo para generar documentos con un aspecto bastante profesional. Muy recomendable, aunque yo tengo algún problema con el corrector ortográfico (el problema es que no me funciona en alguna máquina).
  • Kile: editor de latex muy fácil de usar (lo difícil es latex...). Lo uso cuando quiero generar un documento con cierto cariño (mi tesis, por ejemplo), o presentaciones.
  • Writer (Open Office): solo lo uso cuando el texto tengo que compartirlo con otras personas (jefes y compañeros). Hace meses que no lo uso, pero hasta entonces era mi editor de texto favorito.
  • Bluefish: lo poco que sé hacer con html (muy poco!) lo hago con Bluefish.
Presentaciones
  • Latex (Beamer): por algún motivo que no alcanzo a comprender, decidí hacer la presentación de la defensa de la tesis con Beamer, una librería de Latex especialmente diseñada para esta tarea. Lo cierto es que me encanta (el resultado visual es muy bueno), y desde entonces (no ha pasado tanto) lo uso bastante, aunque la primera experiencia con Beamer es como andar descalzo sobre cristales...
  • Impress (Open Office): similar a Power Point (creo), es bastante fácil de usar. Para presentaciones cortas y sencillas es preferible a Beamer por su rapidez, y exporta el resultado a pdf.
  • Impressive: se trata de un programa para mostrar presentaciones guardadas como pdf. Tiene algunas características sensacionales, pero no puedo explicarlo. Hay que verlo funcionarlo para entenderlo. Una pega, no soporta animaciones en los pdf, lo que nos lleva al siguiente punto.
  • Adobe reader: programa de código cerrado y uso gratuíto. El único visor de pdf que soporta animaciones. Si la presentación las lleva, es mi elección. Si no, Impressive, sin duda.
Mapas mentales
  • CmapTools: programa de código cerrado y uso gratuíto. Un programa sensacional para generar mapas mentales, con la posibilidad de colgarlos en la red para que otros puedan acceder a ellos. Como inconveniente, es algo pesado porque requiere Java y lleva incrustada su propia máquina virtual.
  • View Your Mind (vym): un programa muy completo para generar mapas conceptuales, muy sencillo de utilizar, y con muchas posibilidades: añadir enlaces a los conceptos, exportar a múltiples formatos, y muchas más.
  • Kivio: cuando más que un mapa mental necesito un diagrama de flujo, o un esquema un poco más complicado uso Kivio. Es muy fácil de usar, y el resultado suele ser bastante bueno.
Imagen
  • The Gimp: un editor de imagen muy completo, similar en concepto al conocido Photoshop. Aunque tiene un interfaz un poco confuso, compuesto por muchas ventanas (como GRASS...), me gusta bastante, y lo uso casi a diario, sobre todo para preparar imágenes para presentaciones.
  • Imagemagick: editor de imágenes para la línea de comandos. Sensacional para procesar imágenes usando scripts. Sobre todo lo uso para convertir entre formatos de imágenes.
Virtualización
  • Virtual Box: para probar nuevos sistemas operativos sin tener que instalarlos en el ordenador.
Internet
  • Firefox
  • Evolution: cliente de correo, calendario y tareas.
  • Pidgin: cliente de mensajería instantánea. Me permite usar simultáneamente mis cuentas en msn (yo pecador) y gtalk.
  • Vinagre: cliente vnc, me permite acceder de forma remota al escritorio de mi pc de la facultad.
  • ssh: acceso remoto seguro a mis ordenadores desde la línea de comandos.
  • Blogger: para escribir esta lista, y contar otras historias.
  • Gmail: para recibir correo, y compartir algunos documentos.
  • Scribd: para sacar documentos del cajón y dejarlos a la vista.
  • Facebook: para ver caras de viejos conocidos, y hacer algún nuevo amigo.
Otros
  • pdftk: gestión de ficheros pdf desde la línea de comandos. Para unir varios pdf, sacar páginas, y otras tareas similares.
  • xampp: un servidor web muy fácil de instalar y utilizar. Para colgar material en mi pc de la facultad (cuando el router no se cae, o no hay apagones inesperados...).
  • Bash: la navaja suiza de Linux. Un lenguaje de programación que permite hacer prácticamente cualquier cosa. Indispensable, aunque no lo controlo todo lo que debiera.
Hay algunos más que uso ocasionalmente, pero solo he querido mostrar aquellos con los que casi trabajo a diario.

A ver si alguien más destapa su lista...

sábado 28 de noviembre de 2009

Procesamiento paralelo con Bash en Linux

La mayoría de nuestros nuevos ordenadores tienen entre dos y cuatro núcleos (procesadores), y esa característica los dota de la facultad de hacer varias cosas a la vez.

En realidad, es muy difícil para un usuario normal aprovechar todo el rendimiento que puede proporcionar una máquina con varios núcleos. Pero cuando estamos hablando de procesamiento masivo de datos o simulaciones, es fundamental tener en cuenta esta posibilidad.

Trabajando en GNU/Linux (en este caso Ubuntu Jaunty) es realmente sencillo aprovechar todo el potencial de la máquina utilizando Bash, un lenguaje de programación que traen de serie las distintas distribuciones del pingüino.

Os voy a contar del modo más sencillo que he encontrado como funciona esta característica.

En primer lugar, abre el monitor del sistema de cualquiera de estos dos modos:

  1. Menú Sistema > Administración > Monitor del Sistema
  2. Llamándolo desde la consola mediante la orden gnome-system-monitor
En la pestaña Sistema aparecen las características básicas de vuestra máquina.


En este caso aparecen cuatro procesadores, por lo que el equipo es idóneo para usar procesamiento en paralelo. Si "solo" tienes dos procesadores, también funcionará.

En la pestaña Recursos se monitoriza en tiempo real el rendimiento del sistema. Céntrate en el Histórico de la CPU. Aparecerán tantas líneas de colores como procesadores tiene tu máquina. En el eje x el tiempo, y en el eje y el porcentaje de carga. Cuanto más trabaja un procesador, más alto será este valor. Este gráfico va a ser importante para comprobar las ventajas del procesamiento en paralelo..



Ahora abre un terminal (menú Aplicaciones > Accesorios > Terminal).

Y ahora vamos al lío. Utilizaremos un sencillo código en Bash que obliga al ordenador a contar (si, como si cuentas mentalmente de 1 a 100, lleva un rato...).

for ((i=0; i<=1000000; i++)) do a=$i; done

Esta línea de código dice literalmente algo como: comenzando en i (que vale cero) súmale uno hasta que i valga un millón. En cada suma, guarda el valor de i en la variable a.

El código completo que vamos a utilizar es el siguiente:

for ((i=0; i<=1000000; i++)) do a=$i; done
for ((i=0; i<=1000000; i++)) do b=$i; done
for ((i=0; i<=1000000; i++)) do c=$i; done
for ((i=0; i<=1000000; i++)) do d=$i; done
sleep 5
for ((i=0; i<=1000000; i++)) do a=$i; done &
for ((i=0; i<=1000000; i++)) do b=$i; done &
for ((i=0; i<=1000000; i++)) do c=$i; done &
for ((i=0; i<=1000000; i++)) do d=$i; done &
sleep 5

Tenemos dos bloques de código.

Un primer bloque de cuatro líneas que comienzan con la instrucción for, que obligan al PC a contar hasta un millón cuatro veces, pero que se ejecuta línea a línea (en serie). El ordenador no comienza a procesar una línea hasta que ha terminado la anterior.

Una orden sleep, que para la ejecución durante 5 segundos (no es importante, pero nos servirá para diferenciar los dos bloques en el gráfico de rendimiento).

Otras cuatro instrucciones for, seguidas por un símbolo &. Este símbolo le dice a Bash que lance la ejecución de la siguiente línea inmediatamente, sin esperar a que termine la ejecución de la línea actual.

Otra orden sleep (para asegurarnos de que se ejecutan todas las líneas for del segundo bloque. Al pegar el código en la consola, la última línea puede quedar sin ejecutarse si no pulsamos Enter).

NOTA:
Si tu ordenador solo tiene dos procesadores, elimina las dos últimas líneas de cada bloque de cuatro instrucciones for. (Opción avanzada: puedes insertar la orden wait entre la segunda y tercera línea for del segundo bloque, de este modo el ordenador primero ejecutará en paralelo las dos primeras, y después las dos últimas.)

Ahora copia el código y pégalo en la consola (menú Editar > Pegar, o Ctrl + May + V), y observa el comportamiento de la gráfica Histórico de la CPU.


Según el gráfico, el primer bloque de cuatro órdenes ha tenido ocupado un solo procesador durante algo más de 30 segundos, mientras que el segundo bloque ha tenido ocupados los cuatro procesadores durante algo menos de 10 segundos (el tiempo variará según la potencia de vuestra máquina. Si va muy lento, cambiad en el código el 1000000 por 100000).

La diferencia entre 10 y 30 segundos puede parecer poca, pero trabajando con simulaciones que van a llegar largo tiempo, la diferencia entre 10 y 30 días sí que puede ser importante.

Este simple símbolo (&) en los scripts de Bash y GRASS que he utilizado durante mi tesis me han permitido ahorrar MUCHO tiempo. Para dar una idea de las ventajas, os contaré el coste en tiempo de un experimento de simulación real, que corresponde al Capítulo 8 de la mencionada tesis.

Territorio: Andalucía
Resolución espacial: 100 metros

200 especies de plantas
8 modelos de distribución ensamblados por especie (MaxEnt y OpenModeller)
2 escenarios de cambio climático
10 periodos de tiempo dentro de cada escenario

Estos números dicen que en total, durante el experimento se generaron unos 32000 modelos de distribución (sí, 32000), durante 30 días en 7 ordenadores diferentes. No quiero pensar el tiempo que hubiera llevado sin contar con la capacidad de procesamiento en paralelo. Tal vez aún no habría leído la dichosa tesis...

NOTA IMPORTANTE: No se puede abusar del procesamiento en paralelo, porque puede perderse eficiencia si mandamos demasiadas peticiones a los procesadores. Y en los scripts de GRASS hay que tener mucho cuidado, porque una operación secuencial es posible iniciar una tarea antes de que el material que necesita para ejecutarse esté disponible. Todos los scripts no son susceptibles de ser paralelizados (si es que la palabreja existe...).

viernes 27 de noviembre de 2009

DOCUMENTOS EN SCRIBD [autobombo]

Hace algo más de un mes comencé a colgar los documentos que se quedan en el "cajón" en scribd, una plataforma de publicación de documentos que empieza a ser bastante popular.

A mi cuenta voy subiendo poco a poco los documentos que voy produciendo. Tutoriales sobre SIG o Kepler, publicaciones (pocas, las que hay), y otros documentos que estaban condenados a desaparecer en algún disco duro dañado, como la memoria para la obtención del DEA, el trabajo de fin de master de UNIGIS, o la dichosa tesis doctoral, entre otros.

Ojo con las licencias de los documentos, que todas tienen validez legal. Los que proceden de revistas científicas tienen copyright tradicional :-( , pero los de producción propia tienen licencias Creative Commons (aquí puedes consultar los distintos tipos de licencia).

Espero que alguno de los documentos te sea útil.

martes 17 de noviembre de 2009

Curso de Kepler: sistema para diseño y ejecución de flujos de trabajo científico

Desde hace un par de años uso Kepler, un programa de diseño y ejecución de flujos de trabajo pensado para su aplicación en ciencia.

Hoy mismo he impartido en el Centro Andaluz de Medio Ambiente un seminario sobre este programa con el objetivo de explicar sus características básicas y ofrecer unas prácticas de iniciación a su uso.

He colgado el material correspondiente en un servidor:

http://botanica2.ugr.es/seminario_kepler_sin_instalador.zip material del seminario (sin instalador de Kepler) 4.3 MiB

http://botanica2.ugr.es/seminario_kepler_con_instalador.zip material del seminario con el instalador de Kepler) 169 MiB

-----------------------------------------------------------------------------------------------------------
ACTUALIZACIÓN: El material también se encuentra disponible desde este enlace:
http://observatoriosierranevada.iecolab.es/index.php/Curso_analisis_datos_ecologicos_R
en la sección Seminario Paralelo: Introducción a Kepler (abajo). Desde la misma página puedes acceder al material del curso sobre el lenguaje estadístico R impartido por Luís Cayuela.
----------------------------------------------------------------------------------------------------------

El seminario está pensado para máquinas con Windows (es el instalador que adjunto), pero puede hacerse sin problemas en un linux cualquiera instalando la versión de Kepler adecuada.

Para seguir el curso basta con ir poco a poco con la presentación que está guardada en la carpeta doc, o desde scribd:

CURSO DE KEPLER (PRESENTACIÓN)
Es muy sencillo de hacer (unas tres horas, tal vez cuatro), y creo que merece la pena, sobre todo para aquellos que necesiten automatizar tareas y no sepan demasiado sobre lenguajes de programación.

Un saludo!