Muerte

Según datos del 2003 de UNICEF, por año se mueren en Argentina 15 mil chicos de menos de cinco años. Según datos (EDITADO: la url no existe más) del 2002 del Ministerio de Salud y Ambiente de la Nación, el 47.7% de estas muertes son reducibles por prevención y/o tratamiento (este porcentaje es sin contar otros métodos de reducibilidad).

Esto significa que en Argentina se nos mueren por año más de 7 mil chicos, y muchas de muertes se podrían evitar (este número se podría reducir solamente por prevención y/o tratamiento).

Siete mil chicos de menos de cinco años. 7000.

Ahora vayamos a los 50 muertos en Londres. O para el caso, los de Madrid, de las torres gemelas, de Irak, o de la AMIA. Son todas muertes lamentables, y no debería haber ninguna. Pero por otro lado se nos mueren miles de chicos, y podríamos evitar que se mueran. Se mueren en nuestras manos y lo único que hacemos es horrorizarnos por una bomba en Inglaterra.

¿De qué nos espantamos? ¿Es que los chicos que se mueren son negritos y pobres, y por eso ni nos molestamos? ¿El problema es que se murieron 50 en una bomba, o que esa muerte nos puede rozar a nosotros?

La tapa del Clarín de hoy dice "Esta vez fue en Londres", ocupando casi un cuarto de la hoja. ¿Por qué no sale todos los días, en la tapa, aunque sea chiquitito, "Hoy podríamos evitar que se nos mueran 20 chicos"?

Comentarios Imprimir

Ultimos días de EuroPython 2005

EuroPython, días 4 y 5

Ya terminados los días de conferencia, comenzó el sprint. En esta oportunidad yo lideré uno, el de PyMoney. Eramos tres, y aprovechamos bien el primer día. Aunque todavía no empezamos con el código en si, discutimos bastante y tomamos algunas decisiones claves que me permitieron prácticamente armar el 90% de los casos de prueba.

El segundo día de sprint fue también productivo, ya que terminé todos los casos de prueba, tomamos las decisiones que faltaban, y lo único que quedó colgado fue terminar de armar la estructura con la info de tipo de moneda y paises (John Pinner hizo bastante, pero ahora me estoy dando cuenta que no armó la estructura que teníamos pensada... :( ).

Incluso al final del segundo día envié una mail a las listas de usuarios y desarrolladores de Python para indicarles que este era el momento de participar si querían hacerlo (y el sábado ya tuve feedback de Raymond Hettinger, :).

Con respecto a las dos tardes, fuera de los sprints, nada especial que contar. Paseé bastante el primer día, y luego volví a trabajar un par de horas antes de irme a dormir. El segundo día me fuí con Gustavo Niemeyer al Jardín Botánico. Primero pasamos por el campus a dejar las cosas, caminamos veinte minutos hasta la estación para ver que nos podíamos tomar, y terminamos viajando en un colectivo que pasa a una cuadra del campus, :p.

El Jardín Botánico estuvo bueno, pero se terminó pronto. Como todavía era de día decidimos volver caminando, pero no por el camino corto, sino pegando una vuelta para conocer. Llegamos a la zona del campus casi dos horas después, apenas pasadas las 10. Ahí descubrimos algo de Göteborg: todos los lugares para comer cierran a las 10 de la noche, :(. Podríamos haber comido alrededor del centro, pero no sabíamos que iba a estar todo cerrado... y después no queríamos volver para el lado del centro. Incluso nos encontramos con alguno de los otros chicos en un restaurant, y nos sentamos, pero la cocina ya estaba cerrada (aunque sí nos trajeron una cerveza).

En ese restaurant me encontré con una señora que era chilena. En total, en esta semana, me crucé con cinco chilenos. Hablando un poco, me contaron que en la época de las dictaduras, se fueron a Suecia argentinos, chilenos y uruguayos, pero que luego argentinos y uruguayos se fueron volviendo. Así que no es extraño encontrarse con chilenos allí.

EuroPython, día 6

El título miente un poco, porque no era un día oficial de EuroPython para mí, ya que tenía sólo dos días de sprint luego de la conferencia. Sin embargo, el sábado me fuí a donde se juntaban los chicos de PyPy, porque quería chequear mails y trabajar un poquito en SiGeFi. También quería arreglar con Holger Krekel porque él quería que vayamos todos (o al menos él, Gustavo y yo, porque él puede ver al resto más seguido, están todos en Europa) al cine, a ver The Hitchhiker's Guide to the Galaxy.

Buscamos un poquito por internet justo antes de que yo me vaya y no encontramos nada, así que arreglamos llamarnos para ver que hacíamos. Yo me fuí al mediodía de allí, pasé por el campus a dejar algunas cosas, y luego estuve paseando por el centro, que era la zona que me faltaba, hasta eso de las siete de la tarde.

Finalmente no fuimos a ver la película, porque todavía no se estrenaba en Suecia, pero sí nos fuimos a comer todos juntos. El lugar estaba lindo; un poco caro pero la comida estaba muy bien. Sin embargo no me gustó porque nos hicieron esperar muchísimo y encima luego comimos en dos mesas separadas. Sí, estaba bastante lleno el lugar, pero creo que deberían haber rearmado un par de mesas ahí mismo y listo.

A eso de medianoche un grupito se fue a seguir tomando unas cervezas por ahí, pero yo me volví con otra gente para el campus: al otro día arrancaba bien tempranito, todavía no había empezado siquiera a armar la valija, y teníamos una caminata de media hora para volver.

Regreso

Salí del campus a las 8:30 de la mañana del domingo. Caminé hasta la estación y esperé el bus hasta el aeropuerto (¡que llegó con retraso!). En el aeropuerto hice el check-in, cambié el dinero que me quedaba en Coronas Suecas por Euros, y me fui a esperar el avión. El viaje tenía una escala en Amsterdam, donde yo cambié de avión (pero las valijas seguían camino a México derechito).

Una vez en México, retiré las valijas, pasé por aduana, hice una hora y media de cola para hacer el check-in en LAN (eran lentíííísimos para atender), volví a pasar por la zona de seguridad, y me encontré en el mismo lugar del aeropuerto en el que había arrancado, pero luego de perder más de dos horas. Nada, los vuelos eran completamente separados y no se podía hacer otra cosa.

Compré un tequila y un ron (creo que pasar por México sin traerte alcohol es como pasar por Argentina sin llevarte alfajores, :p), y esperé hasta que saliera el avión, derechito a Santiago de Chile para cambiar de avión. Todo sin mayor novedad, por suerte el último viaje era cortito. Era media mañana, y pude ver muy bien la cordillera, ¡realmente hermoso!

Finalmente llegué a Argentina, y luego a casa. En total, horas reloj (sin andar jugando con las diferencias horarias), el total del viaje fue de 33 horas, :(.

Comentarios Imprimir

Procesamiento distribuido

Como comenté en otro post, descubrí en una de las charlas al SimpleXMLRPCServer. Básicamente lo que hace este pedazo de software es "publicar" via http, en el puerto que uno quiera, una determinada función.

Luego, uno puede ejecutar esa función desde un cliente, vía la conexión HTTP. Aquí tenemos dos códigos, `clnt_trivial.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/clnt_trivial.py>`_ y `serv_trivial.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/serv_trivial.py>`_, que muestran como esto funciona. Ejecuten el servidor, que va quedar escuchando, y luego el cliente. Este último sale sólito cuando termina, el otro hay que cortarlo con un ctrl-c.

En ánimos de simular una tarea en la que se pasa poca información pero el tiempo de procesamiento es alto, creé un módulo (`factorizar.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/factorizar.py>`_) con una función (factoriz_sum) que recibe un número, lo factoriza, luego suma los factores y devuelve ese total. Para probarlo, tenemos `serv_lineal.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/serv_lineal.py>`_, que importa el módulo y sirve la función. Y `clnt_lineal.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/clnt_lineal.py>`_, que llama a la función 10 veces, con un número alto incrementándolo de a uno (de manera de que cada factoreo tarde distinto).

La mecánica de prueba es la misma, y verán como va procesando la función para los distintos números, mostrando el server una conexión para cada ejecución de la función. Luego de probar los diez números, muestra el total de tiempo tardado.

Y acá llegamos a la idea que tuve cuando escuché hablar de este módulo: procesamiento distribuido. La idea es tener el mismo programa servidor, con la misma función, en máquinas distintas, y de algún lado ir alimentado estos servidores para que procesen en paralelo, y devuelvan el valor procesado.

El lado del servidor es fácil, ya que se ejecuta el mismo programa en distintas máquinas, `serv_processes.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/serv_processes.py>`_, llamándolo con el número de puerto en el que queremos que escuche. El lado del cliente, `clnt_processes.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/clnt_processes.py>`_, es apenas más complicado para ejecutarlo: solamente debemos indicarle los distintos pares servidor/puerto. En ambos casos, pueden ejecutar al programa sin argumentos para que les muestre la sintáxis.

Lo que es más complicado es el código del lado cliente, ya que debe llevar la cuenta de cuantos servidores tiene disponibles, ir disparando threads para usar cada servidor, y dinámicamente cada vez que un servidor termina lanzar otro thread para usarlo y procesar un nuevo valor. Armé entonces un módulo, `reparteThreads.py <http://www.taniquetil.com.ar/bdvfiles/code/procdistrib/reparteThreads.py>`_, que se encarga de todo este trabajo.

Para usarlo tenemos tres etapas: instanciamos la clase con los servidores que creamos y el nombre de la función que hay que ejecutar. Luego le pasamos cada uno de los valores a procesar. Y finalmente le indicamos que termine, para esperar los últimos threads, y obtener todos los resultados. Fíjense en el programa cliente y verán cuán sencillo queda.

Entre este módulo, y el poder de SimpleXMLRPCServer, tenemos un framework para procesamiento distribuido bien fácil de usar. Disfrútenlo.

Comentarios Imprimir

EuroPython 2005, día 3

El día comenzó bien, con una charla de Gustavo Niemeyer sobre un administrador de paquetes para Linux que él desarrolló como parte de su trabajo en Mandriva (fusión de Conectiva y Mandrake).

Luego del café, en el segundo bloque, participé en la charla que tenía preparada John Pinner, en la que trató de generar un feedback del público sobre PyMoney (un proyecto mío para que Python tenga un módulo Money). John presentó unos slides en 10 minutos, y luego me largó para que trate de sacarle algo al público. No salió muy bien, ya que no estaban muy preparados para participar, los agarró de sorpresa. La charla siguiente, donde yo mostré en que estado de desarrollo estaba el módulo, fue mejor recibida.

Los dos bloques de la tarde fueron ocupados con Charlas Rápidas. Hubieron algunas interesantes, pero ninguna demasiado. Yo dí la de SiGeFi.

Luego de que terminó todo, volví a mi habitación, dejé las cosas y me fuí a comer con Juan Davir y Luis, los chicos que trabajan en Francia y son de España y Chile respectivamente. Justo cuando salíamos del restaurant, nos cruzamos con dos de los otros chicos, que estaban volviendo y nos comentaron de que había una pequeña reunión de despedida, en uno de los patios del campus (bah, patios, son espacios verdes entre los edificios, básicamente pasto).

No nos la íbamos a perder, así que volvimos y estuve tomando unas cervezas con el resto de la gente hasta que se hizo demasiado tarde, y me volví a dormir.

Comentarios Imprimir

Películas y configuración

  • Batman begins: +1

  • Be cool: +0

Me cansé de medio configurar vim cada vez que estoy en una máquina diferente, así que preparé la configuración que me gusta, la copio acá, y luego ya la tengo. Lo siguiente va en el archivo de configuración local de vim (en Ubuntu es el /etc/vim/vimrc.local).:

" no pone tabs, sino 4 espacios
set expandtab
set tabstop=4

" hace backups antes de grabar en /tmp
set backup
set backupdir=/tmp

" prende el coloreado de sintáxis
syntax on

" va buscando mientras tecleamos, resalta lo que encuentra
set incsearch
set hlsearch

" cambiamos para que se vea mejor lo que busca
highlight Search ctermfg=black ctermbg=lightgreen
Comentarios Imprimir