CCCP

El significado del título sale por siempre inspección: Computación Científica Con Python.

Existen una serie de módulos que hacen verdaderamente atractivo a Python como un lenguaje serio para tareas relacionadas con la computación científica. A lo largo de mi carrera (de grado y pos) he programado mas en Matlab que en lenguajes de propósito general. El argumento es válido, se necesita transmitir algún concepto al alumno y la forma más rápida sin perderse en prolegómenos del lenguaje es recurrir a estos entornos que permiten, leer datos, calcular, limpiar, procesar y finalmente visualizar con pocas sentencias y con un lenguaje amigable.

Aquí es donde entra en juego Python. Lo empecé a usar mas seriamente hace unos meses, justamente para realizar tareas de visualización, y me he sorprendido gratamente del desempeño y la escalabilidad del mismo. Por supuesto que siempre tenemos en cuenta que es un lenguaje interpretado, por lo que no pretendemos utilizarlo para realizar tareas de cálculo intensivo, al menos no de la forma clásica, ni esperando que tenga un rendimiento equivalente a C++.

El módulo fundamental para computación científica se denomina Numerical Python (en forma breve numpy) y contiene, entre otras cosas, las siguientes características (extraido de http://numpy.scipy.org/):

  • a powerful N-dimensional array object
  • tools for integrating C/C++ and Fortran code
  • useful linear algebra, Fourier transform, and random number capabilities
Como verán, añade a Python una estructura de datos fundamental: arreglos n-dimensionales. Esta estructura de datos además es soportada por decenas de otros módulos, por mencionar los dos más utilizados para visualización:  matplotlib (para 2D) y mayavi2 (para 3D).

Mayavi2 es una herramienta de propósito general independiente de la plataforma para visualización científica tri-dimensional. Algunas de sus características incluyen:

  • Visualización de datos escalares, vecotiales y tensoriales en 2 y 3 dimensiones.
  • Fácilmente programable desde Python.
  • Puede trabajar en forma transparente con arreglos numpy.
  • Fácilmente extensible.
  • Guardar las visualizaciones en varios formatos de imagen.
  • Funcionalidades convenientes para el ploteo científico a través del submódulo mlab.

La siguiente animación la hice con Numpy + Mayavi2 a partir de unos datos obtenidos de una simulación:

Por otro lado, me bajé de la nasa unas imágenes satelitales de Mendoza, y con ayuda de otros módulos (en otro post explicaré) + numpy + mayavi2 se puede explorar en forma interactiva (además de procesar para laburar obvio!), acá les dejo una captura :

Luego de un par de meses de internarme con Python y estos módulos que mencioné, logré resultados que serían muchísimo más complejos de obtener con un lenguaje como C++ o Fortran. Así y todo, aún se poco y nada sobre Python, pero ya con esto se pueden hacer grandes cosas y todo, como siempre, con Software Libre.

Guitar (la tocarra)

La cabeza suele nublarse con el laburo y las problemáticas cotidianas, esas tormentas casi siempre se me convierten en dolores de cabeza y a veces en migrañas. Nada mejor para despejar esos nubarrones que algo de deporte y actividades (pseudo)artísticas (en mi caso).

Entonces uno, muchas veces va a jugar al bolo (mal, pero va igual!). El tema es que el fulbito tiene una gran desventaja: no se puede usar la computadora en ningún momento.

Así es que decidí retrotraerme a mis momentos adolescentes y comprarme una viola para darle un poco de swing a mi vida. Fui, la compré, y empecé a tocar hasta que los dedos me quedaron mochos. Ahora bien, luego de tanto tiempo sin tocar (casi 15 años y la RPMadreQMP!!!) algunas notas ya no me las acordaba, o me vas a decir que Gsus4 es auto-explicativa?? Noo, ni ahí!!

Aquí es donde entra en juego la compu, que sin GNU/Linux no se si se la podría llamar compu. La cuestión es que encontré TuxGuitar . Un software multipista, que permite -entre otras cosas- afinar la viola, armar las tablaturas (o si sabés las partituras también), insertar las ya conocidas y finalmente reproducirlas. Ojo, yo no le saqué el brillo, pero lo utilizo para que me muestre cuales son las notas que mi memoria ya no puede sacar a la luz.

Aquí les dejo una captura, lo recomiendo ampliamente!

PD: lo del futbol es en chiiiiste, soy re bueno!

Tratame bien!

Tratar imágenes satelitales suele obligarnos a utilizar paquetes de software propietarios (cerrados!) desarrollados para tal fin. Estas aplicaciones suelen tener una universo de funcionalidades tan inmenso que no solo marean al usuario inexperto (como yo) sino que para tareas muy específicas termina siendo más complejo adaptarnos al “bendito” programa que resolver el problema en cuestión.

Si bien ya soy bastante manso, un dejo de rebeldía adolescente y la inquietud de una divina amiga franchuto-argentina me llevó a indagar otro tipo de solución.

Por suerte existe Python. Un lenguaje en el que se pueden hacer muchas cosas respetables, sabiendo muy poco del mismo (bue, tampoco es que yo soy muy respetuoso). El tema es que usando PyRaster -una colección de herramientas basadas en Python- se puede procesar eficientemente imágenes raster. Esta herramienta usa la Librería de Abstracción de Datos Geoespaciales GDAL (Geospatial Data Abstraction Library) para leer/escribir alrededor de 100 formatos de imágenes y tratarlos como una matriz estándar, por lo que, independientemente del formato se utilizan los mismos procesos.

Instalación

Descargar el módulo PyRaster de acá y luego importalo desde el programa principal.

Dependencias

-No me digás que tenés que tener instalado Python?
-Obvio querid@, (probado con la versión 2.6 sin problemas), pero además se debe instalar:

  • Numerical Python: Numpy 1.2.1 or greater
  • Pyhon bindings for GDAL: python-gdal 1.5.4 or greater

En debian/ubuntu:

#aptitude install python-numpy python-gdal

Aprendiendo a leer y escribir

En el siguiente código se lee la imagen prueba0.img (una imagen Erdas Imagine .img de formato HFA) y se obtienen los metadatos (header o información general sobre la imagen), así que los valores de todos los píxeles de la banda/layer 1 de la imagen en forma de matriz. Al final, y se muestra en pantalla el pixel de la fila 0, columna 1.

import rasterIO

file_pointer = rasterIO.opengdalraster(‘prueba0.img’)
driver, XSize, YSize, proj_wkt, geo_t_params = rasterIO.readrastermeta(file_pointer)
kelvin_band = rasterIO.readrasterband(file_pointer, 1)
print kelvin_band[0][1]

Y bue, así se hace eso que dije. Justo iba a escribir algo trascendental pero me acabo de quedar sin tinta.

Matrix revolutions

Si cuando era un puber con excesivo brillo en el rostro alguien me decía que laburar con matrices iba a estar relacionado con informática, hubiese levantado sutilmente mis hombros con mi mejor cara de “oliendo excremento”.

El tema es que las matrices andan por todos lados. En primer año de la carrera uno las agarraba, las manoseaba (gauss-jordan), las daba vuelta (inversión), las tumbaba (transposición) y un sin fin más de operaciones (casi todo lo que indica el libro hindú) sin tener real dimensión de cuán involucradas estaban en el mundo.

No solo fotos o imágenes satelitales, cualquier problema que involucre varias incógnitas y ecuaciones termina idefectiblemente en una matriz a resolver (Ax=b).

El mundo gnulinuxero nos ha bien-acostumbrado a buscar, renegar, probar, indagar una y otra vez en un ciclo casi infinito (casi infinito = infinito) hasta alcanzar la solución a nuestros problemas. Así es que uno presupone que al transitar un nuevo camino se topará con decenas de obstáculos hasta alcanzar lo buscado.

Ah Si?

NO!
No fue así, en el primer intento ya estaba resolviendo un simple sistema matricial utilizando rutinas REcontraREmilREprobadas y que por años luz serán más eficientes de las que pueda llegar a programar yo en mis mejores sueños. Asi es como puse a buscar las librerías BLAS y LAPACK para que hagan el laburo por mi o mis compañeros.

Lo primero que vamos a hacer es instalarlas, luego algún lenguaje para usarlas (por ahora solo en fortran) y finalmente un ejemplo para probar que la cosa ande.

Instalación BLAS+LACPACK

#aptitude install libblas3gf libblas-doc libblas-dev liblapack3gf liblapack-doc liblapack-dev

Instalación gfortran

#aptitude install gfortran

Ejemplito a resolver

  <pre>\begin{bmatrix} 3.1 & 1.3 & -5.7 \\ 1.0 & -6.9 & 5.8 \\ 3.4 & 7.2 & -8.8 \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix} = \begin{bmatrix} -1.3\\ -0.1\\ 1.8 \end{bmatrix}</pre>

Programita a compilar (test1.f)

c solving the matrix equation A*x=b using LAPACK
	Implicit none
c declarations, notice single precision
	Real*4 A(3,3), b(3)
	integer i, j, pivot(3), ok
c define matrix A
	A(1,1)=3.1
	A(1,2)=1.3
	A(1,3)=-5.7
	A(2,1)=1.0
	A(2,2)=-6.9
	A(2,3)=5.8
	A(3,1)=3.4
	A(3,2)=7.2
	A(3,3)=-8.8
c define vector b, make b a matrix and you can solve multiple
c equations with the same A but different b
	b(1)=-1.3
	b(2)=-0.1
        b(3)=1.8
c find the solution using the LAPACK routine SGESV
	call SGESV(3, 1, A, 3, pivot, b, 3, ok)
c
c parameters in the order as they appear in the function call
c    order of matrix A, number of right hand sides (b), matrix A,
c    leading dimension of A, array that records pivoting,
c    result vector b on entry, x on exit, leading dimension of b
c    return value
c
c print the vector x
	do i=1, 3
	   write(*,*) b(i)
	end do
	end

Compilación

$gfortran -lblas -llapack test1.f -o test1.bin

Ejecución y resultado

$./test1.bin
1.0000001
1.0000004
1.0000004

Para mayor información: busque más información!!

C’est fini

 

Instalar Debian en una netbook

La interpretación del título es literal, acá voy a mostrarme como preparar un pendrive usb para instalar debian testing en una netbook.

Al día de hoy la versión testing de debian se denomina, wheezy, y claro está que será la  que reemplace a la actual estable, squeeze.

En términos generales lo que tenemos que hacer es:

1- Darle al usb los archivos necesarios para que sea booteable

2- Cargar en el usb una imagen para llevar adelante al instalación

Ahora bien, llevamos adelante el primer paso:

1.a- Descargamos el boot.img.gz de la rama testing

1.b- Extraemos el archivo escribiendolo en el usb (/dev/sdc)

# zcat boot.img.gz > /dev/sdc

1.c Montamos el usb en algún directorio, por ejemplo, /mnt :

#mount /dev/sdc /mnt

Ahora, continuamos con la segunda parte.

2.a Descargamos la iso del net-install (debian-testing-i386-netinst.iso) correspondiente a la misma versión del boot.img.gz,

2.b La copiamos al usb, que tenemos montado en /mnt :

#cp debian-testing-i386-netinst.iso /mnt

Finalmente desmontamos y nos queda bootear la netbook desde el usb y comenzar la instalación…

wheezy

FLISOL 2011

Una vez más se realiza en Santa Fe una  nueva edición del Festival Latinoamericano de Instalación de Software Libre (FLISOL). Junto con el LugLi (Linux Users Group of Litoral) se ha organizado este evento,  que es considerado el más grande del mundo referido al Software Libre.

Nuevamente este año se ha superado la cantidad de sedes. En Argentina ya hay confirmadas 34 localidaes y además en 20 países con alrededor de 200 ciudades. Así es que en todo el continente latinoamericano se estará instalando Software Libre el mismo día!

Si dictarán charlas, talleres y por supuesto instalaciones.

Acercate, instalá libertad!

Lugar: CTA – Rivadavia 3185
Día y Hora: Sábado 9 de Abril de 10hs a 18hs.
Más info: http://www.flisolsantafe.com.ar
Registrate: http://es.amiando.com/flisol2011

 

frases piolas

Cada vez nos cuesta más pensar que hay cosas que nos superan: todavía no somos capaces de desplazar placas tectónicas.

Martin Caparrós

Blues local

Como todos sabrán, no solo de pan vive el hombre.

Así que este sábado aburrido, en el que no tenía ganas de laburar, ni de leer, y para colmo se me suspendió el futbol, no me quedó otra que revivir al frustrado músico interior.

Homenajeando al bluesman argentino Norberto Pappo Napolitano, a 6 años de su lamentable muerte, me animé con un pequeño blues sacado de algún método por ahí..

little blues

En sincronía

Para sincronizar directorios o archivos entre sistemas pinguinísticos no hay demasiados problemas, una rápida búsqueda en google nos muestra cientos de ejemplos. Instalamos el rsync, tiramos un par de comandos y ya está todo andando.

Lamentablemente no solo de pinguinos y ñues está hecha la vida, sino también de malditas ventanas. A la larga o a la corta vamos a tener que renegar en cómo usar en el sistema de bill algo que era tan simple en nuestro sistema preferido.

Así que acá voy a dejarme una breve referencia de cómo hacer andar el rsync utilizando clientes windows hacia un servidor Debian GNU/Linux.

La situación es la siguiente: varias PCs corriendo windows deben sincronizar determinados directorios contra un servidor Debian GNU/Linux.
Ahora, por qué no lo copiamos usando el scp directamente? porque lo que queremos es subir solamente los cambios, las diferencias, y porque pretendemos poder restablecer una subida de datos ante un eventual corte. Estas características nos la brinda el rsync.

Paso a paso.

1- Configuramos en el servidor para que el rsync corra como servicio.

1.a Instalamos

#aptitude install rsync

1.b Lo configuramos

Esto se puede hacer de varias maneras, yo lo hice desde inetd. Fue la primera alternativa que probé y me anduvo sin problemas.
Copiamos el archivo de ejemplo del rsync, ubicado en /usr/share/doc/rsync/examples/rsyncd.conf, con destino /etc

cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf

Además de parámetros globales tenemos diferentes módulos en donde indicamos qué usuarios se podrán conectar, el directorio al que se sincronizará y un corto etcétera. Por ejemplo:

[modulo_pc1]

path = /home/pcs/pc1
comment = Dir de la PC1 (requires authentication)
uid = nobody
gid = nogroup
read only = false
auth users = norberto_napolitano
secrets file = /etc/rsyncd.secrets

Lo único que voy a destacar de la configuración previa es que el archivo rsyncd.secrets debe ser del modo usuario:contraseña, para el ejemplo sería, norberto_napolitano:blueslocal
Donde el usuario es norberto_napolitano y la contraseña es blueslocal. Este archivo debe tener permisos de lectura/escritura SOLO para el root (chmod 600), sino NO VA A FUNCIONAR.

1.c Lo dejamos disponible como servicio.

Agregamos en /etc/inetd.conf la siguiente linea:

rsync stream tcp nowait root /usr/bin/rsync rsyncd --daemon

Luego de toquetear el rsyncd.conf mandamos al inetd  la señal HUP

killall -HUP inetd

Por último, dejamos en /etc/default/rsync la linea:

RSYNC_ENABLE=inetd

2 Configuramos el cliente windows

Para tener funcional el cliente rsync en windows, vamos a instalar el cygwin y ahí tildaremos el paquete rsync.
Una vez hecho esto, solo hará falta ejecutar el comando para realizar la sincronización del directorio que deseemos contra el directorio configurado en el módulo del servidor.
Por ejemplo, en la linea de comandos:

C:\cygwin\bin>rsync.exe -avrPO /cygdrive/c/dir_a_sincronizar/ norberto_napolitano@www.miservidor.com.ar::modulo_pc1

Lo único que debemos saber, además de las opciones del rsync, es que el cygwin mapea las unidades del windows bajo /cygdrive, así, en el ejemplo previo, el directorio dir_a_sincronizar bajo el disco “c:\” se lo referencia haciendo /cygdrive/c/dir_a_sincronizar/

A la salida del tunel

Como dije en el post previo, ahora vamos a ver como crear y configurar todo lo necesario para el cliente del openvpn. Resumiendo, lo que vamos a hacer es acceder al servidor y crear el certificado, luego llevarlo (junto a un par de archivos que se crearon) al cliente y crear la configuración del mismo.Antes de esto, un poco de teoría informal y liviana.

¿Para qué quiero una vpn?
Porque resulta que tenés varias pcs que tienen internet pero no podés acceder directamente a ellas (por ej, su ip no es pública) y querés ingresar y usarlas como si estuvieses en una misma red pero además quisieras resguardar del ojo ajeno todo el tráfico que hay entre vos y ellas. Y bueno, esa es una posible cuestión, te armas un servidor openvpn al que todos las pcs se conectan y arman una especie de LAN, y vos desde tu amada máquina hacés lo mismo.

Crear certificado para el cliente
1- Estando en el servidor, ingresamos al directorio /etc/openvpn/easy-rsa/2.0/ y hacemos:

# source vars
# ./build-key nombre_cliente_vpn

Aceptar todos los valores por defecto y cuando aparece Common Name, ponemos nombre_cliente_vpn . Luego le damos todo enter y todo que sí. Terminado este proceso, tendremos adentro del directorio keys/ un conjunto de archivos nombre_cliente_vpn.* y ca.crt .

2- Con estos archivos hacemos un tar.gz que enviaremos a la pc cliente bajo /etc/openvpn.

tar -cvzf nombre_cliente_vpn.tar.gz nombre_cliente_vpn.crt nombre_cliente_vpn.csr nombre_cliente_vpn.key ca.crt

Configurar el cliente
1- Usando como base el archivo de ejemplo lo copiamos a /etc/openvpn/

#cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf .

2- Lo imprescindible es modificar la ruta de alguno de los archivos que se nos generaron para el certificado y la ip del servidor al que debe conectarse para armar la vpn y el tipo de cifrado (igual al que elegimos en el server). Sería:

# certificados
ca ca.crt
cert nombre_cliente_vpn.crt
key nombre_cliente_vpn.key

# servidor y puerto
remote www.miservidordevpn.com.ar 1194

#cifrado
cipher AES-128-CBC

3- Una vez hecho esto, iniciamos el openvpn y listo

#/etc/init.d/openvpn start

El lector aplicado entenderá que esto fue escrito al vuelo de pájaro, por ende se han omitido ciertos detalles que pueden ser observados en los archivos de configuración que se mencionaron. Por ejemplo, si la red es udp, o tcp, si se usan 1024 o 2048 bits para la encritación, así como un sin fin de particularidades.

Social Widgets powered by AB-WebLog.com.