Avisos

Bruno no se dio cuenta lo cansado que estaba hasta que se acostó. Había decidido ir a la mina a la mañana siguiente, por lo que llamó a su secretaria para avisar que estaba bien y que iría al otro día. No acostumbraba a justificar sus ausencias o sus tardanzas, pero no quería que se asustaran, ya que él debería haber vuelto a trabajar de las vacaciones el día anterior.

A la mañana siguiente, se levantó, se bañó, y cuando se estaba secando, llegó un mensaje de conserjería indicando que había alguien esperándolo en la recepción del hotel. Bruno activó el videófono y le indicó al conserje que le pidiera una identificación al visitante, que tomara sus datos, y que le dijera que esperara unos veinte minutos, que él bajaría. (sigue acá)

Comentarios Imprimir

PyCamp 2008, Los Cocos, Córdoba

Viernes

Salimos desde retiro a eso de las 10 de la noche, Alecu, Riq, Lucio, Ricardo y yo. Estuvimos charlando como tres horas, hasta que decidimos dormir un poco. La verdad, que el viaje se pasó volando, porque me desperté ya pasando Córdoba Capital... a la hora ya habíamos llegado.

Teóricamente llegábamos 9:40, pero 7:40 ya estábamos abajo del micro. Preguntamos para dónde quedaba el centro, y empezamos a caminar para el mismo. En el camino nos encontramos con otro chico, Sebastián, que había venido de Santa Fe. Cuando llegamos al centro no había nadie, pero nos quedamos alrededor de un fogón (apagado), tomamos unos mates, y esperamos que llegue la gente.

Al rato nomás cayeron todos. Entramos, desayunamos, acondicionamos las instalaciones (computadoras, bandera, wifi, etc.), y nos pusimos a organizarnos un poquito.

Con la ayuda de un pizarrón, Darni lideró el consenso grupal de cómo íbamos a encarar los cuatro días. Terminamos pasadas las 12, listos para la primer actividad (presentación y contar qué está haciendo cada uno), y esperando el almuerzo, :)

Todo lo que íbamos a hacer

Como terminamos antes de lo previsto, decidimos arrancar con la parte en que cada uno contaba un poco quién era, cómo había conocido a Python, y qué estaba haciendo ahora con Python. Lo hicimos afuera, apretujados en el borde del mismo fogón que antes, pero enseguida comenzaron a caer unas gotas, y tuvimos que volver al salón. Seguimos contando quienes éramos, incluso mientras comíamos (unos fideos con boloñesa muy ricos), y así ya entramos en la tarde.

Estuvimos un rato boludeando, mientras terminaban de configurar la red, pero como esto se estiraba demasiado, yo di una pequeña charlita sobre la Wikipedia Offline, y cómo estábamos con eso. Nos pusimos un poco a trabajar, y así se pasó la tarde en general.

En la cena (milanesas con puré de papa), John Lenton dió una linda charla sobre Responsabilidad Regional, que básicamente versó en ser responsables en como "elegimos" con nuestro dinero. Si, por ejemplo, se lo damos a una multinacional que fabrica el puré de papa explotando gente en Nueva Guinea, en lugar de a una cadena chica local, solamente porque el puré de papas sale 8 centavos más barato (o sea, obvio que no vale la pena, pero normalmente ni nos fijamos).

Luego de comer llegó el tiempo de esparcimiento. Con Javi, John y Riq nos pusimos a jugar al FreeCiv en red, ¡buenísimo! Nunca había jugado a esto en red antes, y la verdad es que es muy divertido. A eso de las dos de la mañana, claudicamos y nos fuimos a dormir.

Sábado

A las 9 de la mañana ya estaba despierto. Luego de un lindo baño, y desayunar, me puse a trabajar. Pero diez minutos, nada más, porque luego comenzó una charla muy interesante, de Mauricio Rumboll, naturista y ornitólogo, quien habló sobre el cuidado del medioambiente, las especies en extinción. Hay que prestar más atención a Vida Silvestre, más de la que prestamos normalmente.

El día se desarolló luego normalmente: comimos, comimos, y comimos (almorzamos arroz con carne, muy rico). Ah, en el medio seguimos trabajando (yo incluso llegué a una conclusión importante, con ayuda de Alecu, Chipaca y Tuute, que generó este post), hubo un evento "Web Frameworks Deathmatch", que basicamente era una charla comparativa de Django, Turbogears, Zope y Plone, y una charla de NetHackAI, que es la forma de automatizar y poder hacer bots que jueguen solos a un juego muy interesante llamado Nethack.

Ya entrada la tarde, decidimos ir a comprar unas cervezas para hacer la reunión de PyAr. Debo decir que estuvo muy buena. Aunque eramos muchos (muchos, creo que el record), y el nivel de dispersión era alto, pudimos tratar algunos temas muy interesantes. Encima, teníamos algunos detalles que arreglar, y la gente de GrULiC ya había pasado por los mismos problemas, y tenía experiencia que aportar. Incluso, tengo que admitir que llegamos a conclusiones en las discusiones (mmm... quizás faltaba más cerveza... :).

Reunión al aire libre

Luego, a comer (carne al horno con papas y cebollas), y para terminar el día, como corresponde... ¡a jugar! Antes de que se larguen los juegos de mesa hicimos una actividad muy piola: un karaoke de charlas, donde por sorteo fuimos pasando todos y en cinco minutos teníamos que explicar la charla de otra persona... algunas charlas estuvieron más o menos, pero otras estuvieron muy divertidas, :)

Jugué un rato a un juego de cartas que se llama FLuxx, en el que las reglas mismas del juego van cambiando según uno tira las cartas, lo cual lo hace bastante atractivo (pero por esta misma razón a veces se gana de muy pura casualidad... y esto no está tan bueno). Después de dos partidos de esto ya estaba listo para irme a dormir, pero vi que unos chicos estaban jugando al tenis: era un dobles, cuatro jugadores, desde cuatro laptops separadas, por red. Estuve mirando un ratito y luego incluso jugué. Ya después de esto, me fui a dormir, apenas pasadas las cuatro de la mañana.

Domingo

Sin importar la trasnochada, a las 9 ya estaba desayunando. La mañana se pasó entre un pequeño "python bug morning" que hicimos, donde se cerraron algunos bugs de Python, y el trabajo en la Wikipedia Offline.

Ambos trabajos siguieron luego del almuerzo. En un momento se nos complicó con la red, y como yo dependía de la misma justo para lo que estaba haciendo, me empecé a embolar. Para no quedarme dormido, hice unos mates y me puse a jugar con los chicos a la versión electrónica de Pioneers, un juego bastante interesante.

Igual lo cortamos antes, porque se estaba haciendo tarde y queríamos salir a caminar un rato. Subimos a una sierra cercana, donde había un mástil, y nos sacamos algunas fotos allá arriba. Entre que subimos y bajamos caminamos unas buenas dos horas y media, fue un lindo ejercicio. Al volver, nos tiramos un rato en la pileta, y luego ya vino un espectacular asadito.

A un 80% del viaje

Durante los ratos libres seguí trabajando con los bugs de que habían corregido los chicos. Hice el commit de uno de John Lenton y uno de Javi Mansilla, y me quedó para después uno de Anthony Lenton. Ah, y aproveché también para cerrar uno que tenía asignado desde hace tiempo.

Ya luego de comer, como es costumbre, jugar jugar y jugar, aunque no me terminé acostando tan tarde, porque estaba realmente cansado.

Lunes

Amaneció super nublado, y con viento de lluvia cercana. Teníamos un paseo a la mañana, pero no nos decidíamos a salir después de desayunar por cómo estaba el cielo. Menos mal, porque un rato después se largó una tormenta muy grande: una lluvia torrencial por bastante tiempo, con truenos y todo.

Con la tormenta se vinieron cortes de internet, y en el peor momento de los rayos también desenchufamos todo por seguridad (lo bueno de tener laptop es que pudimos seguir trabajando, :)).

Durante la primera parte de la mañana terminé de trabajar con el bug que había corregido Anthony, y luego ya me puse a full con la Wikipedia Offline. Estuvimos un buen rato discutiendo arquitecturas y soluciones, y luego hicimos el mapa de todos los pasos del proceso general de construcción del producto final.

Ambiente de trabajo

En el medio comimos (un pollo al horno con ensalada rusa y tomate, más arroz con atún, todo muy rico). Y luego ya me metí a codear la parte que había elegido: el índice para los títulos. Con esto estuve trabajando pila y pila hasta las siete de la tarde, donde ya habiendo logrado algo funcional (aunque todavía ineficiente), commiteé todo y me fuí a bañar y a preparar el bolso.

Luego saludamos a todos, caminamos hasta la parada, esperamos el micro, y ya comenzamos el viaje de vuelta. Todas las fotos, acá.

Como conclusión de estos cuatro días, quiero destacar lo bueno que es juntarnos programadores de distintas provincias, para no sólo programar sino también jugar, comer juntos, charlar, etc. Trabajamos, nos divertimos muchísimo, y todo esto une más aún a la comunidad, no sólo de Python o de Software Libre, sino de, aunque parezca redundante, personas.

Comentarios Imprimir

Wiki XML a HTML, no way

El otro día comenté sobre la Wikipedia Offline, y en el sexto comentario apuntaron a unos parsers de terceros para pasar de XML a HTML.

Si uno pudiera tener un xml2html.py que armara el HTML a mostrar al usuario a partir del XML original, los volúmenes de datos a manejar en todas las etapas del proyecto serían bastante menores.

Me alegré bastante cuando encontré mwlib, una biblioteca hecha en Python para parsear los artículos XML y generar el HTML. El primer día de trabajo en PyCamp 2008 lo pasé tratando de usar esto.

El XML que publica Wikimedia, con sólo los artículos, templates y etcéteras en la última versión (y no todas las discusiones, ni todo el historial) pesa 1.7GB, con lo cual era imposible abrir el XML con herramientas de fácil uso como ElementTree. Pero Chipaca hizo un parseador en SAX (que va recorriendo el XML gradualmente, y no tiene que cargarlo entero en memoria), que yo luego modifiqué un poco y dejé en articleExtractor.py.

Ya pudiendo separar el artículo, me puse a jugar con la biblioteca mwlib en si, para convertirlo a HTML. Acá me encontré con algunas sorpresas, pero luego de hacer algunos análisis durante un par de horas, las pudimos descartar.

Una era que teníamos la dependencia de latex, para transformar texto en formato MathML en una imagen con la fórmula matemática en si. Vimos sin embargo que en el XML teníamos el MathML, y como Firefox es capaz en sí de parsear esto y mostrarlo como corresponde, decidimos que no era un problema.

El otro punto era la dependencia en PIL, la biblioteca de manejo de imágenes de Python. Como el tratamiento de las imágenes, qué incluir y cómo era todo un tema aparte, decidimos no preocuparnos acá hasta que llegue el momento.

Y finalmente, teníamos una dependencia de perl, para crear unas imágenes de linea de tiempo. Tuute estuvo buscando un montón y realmente apenas hay de estas imágenes en la Wikipedia en español. Encima, la utilización de esta capacidad en la biblioteca está complicada, porque necesita usar unos directorios en particular, y cosas así. Entonces, decidimos "tocar" la biblioteca para que directamente no use esto.

Finalmente, entonces, éramos capaces de traducir el XML a HTML. El proceso es bien simple, si se fijan el código de xml2html.py es bastante simple. ¡Y genera un HTML bastante piola! Sin embargo, da algunos errores y me puse a ver qué pasaba.

Una de los primeros detalles es que no encontraba algunas categorías. Y esto era porque en el XML, al ser en español, están los tags como "categoría", y no como "category". Luego de revisar durante un buen rato como cambiarle el locale al parser antes de laburar, encontré que esto estaba bastante chancho: están hardcodeados en los programas estos tags para inglés y alemán, pero nada más. Feo, sucio. Pero agregué algunos en castellano y seguí experimentando. El HTML ahora se parecía más al original.

Otro gran detalle es que no encontraba unos templates. Nuevamente con la ayuda de Tuute, encontramos que los templates están en el .xml grandote que teníamos: el template otrosusos era un artículo allí llamado "Plantilla:Otrosusos" (nótese el cambio de minúscula a mayúscula).

Acá me di cuenta que para más o menos poder seguir generando la info, tendríamos que extraer estas Plantillas de forma previa, para poder alimentársela al parser. Como el parser y el resto están preparados para conectarse a una base de datos como la de Wikipedia, había que: o generar una base de datos similar, o seguir tocando la biblioteca para que acepte las cosas de otra forma.

En el mismo proceso, actualicé el archivo xml, ya que antes de venir para acá había bajado la última versión pero por error seguía usando la versión anterior. Y aparecieron nuevas categorías, lo que implicaría seguir modificando la mwlib a mano, no sólo ahora, sino en el futuro, :(.

En función de todos estos drawbacks y dependencias, entendimos que no podríamos pasar de XML a HTML en el momento de servirlos, en la máquina del usuario final, sino que debíamos generar una especie de htmls reducidos y más simples, de manera de procesar y guardar HTMLS de forma similar a la idea original del proyecto, pero con volúmenes más simples.

Pero luego estuvimos viendo como iba creciendo el HTML que estábamos generando (todavía faltaba incorporarle los templates), y consideramos los tamaños relativos con respecto a los HTMLs estáticos que la misma Wikipedia genera (y que eran la fuente de datos originalmente).

Entonces, luego de analizarlo, con Alecu y Tuute decidimos que este camino no nos llevaba a ningún lado, y decidimos que no valía la pena seguir explorándolo.

Comentarios Imprimir

Terminando la(s) semana(s)

Bueno, la verdad es que desde que volví de vacaciones, hace semana y media, estuve todos los días ocupados, siempre algo que hacer luego del laburo. Ojo, no me quejo, un 80% de las veces era parranda, :)

Pero ya termina este rally, aunque seguimos con parranda. Bueno, descanso. Bueno, Python, :). Hoy a la noche salgo para Córdoba, al Campamento Python (EDITADO: la url no existe más) organizado por Except (EDITADO: la url no existe más), el cual se extenderá hasta el lunes (incluido).

Ah, y no quería cerrar la semana sin presentar en sociedad al hijo de mi primo Adrian y Analía, Tomás Arias:

Tomasito, :)

Je, es igualito a Adri...

Comentarios Imprimir

Identidad

Segundo capítulo de Hielo Rojo.

Además, acomodé un poquito mejor las imágenes, y agregué una cita abajo del título, de la que me había olvidado antes.

--

Cuando despertó le dolía tremendamente la espalda. Yacía acostado, semidesnudo, en una especie de camilla. Estaba en un lugar limpio, aséptico, olía como un hospital. Aunque pensó que había abierto los ojos, aún tenía los párpados cerrados, y sólo veía manchones de luz. Segundos después pudo finalmente abrirlos viendo una potente luz sobre él.

A su alrededor había demasiados cromados como para ser un hospital. Se sentó en la camilla, la cual no era sino una plancha de acero inoxidable. Comenzó a registrar con la vista la habitación. Buenas luces, grandes casilleros cubriendo una pared. Frente a él, una camilla similar a la que estaba él, y más allá, junto a la camilla, una mesita con instrumentos de cirugía. ¡Estaba en una morgue, sobre una mesa de autopsias! Se dio vuelta asustado, para ver la mesita que correspondía a su camilla y allí estaba el resto de su ropa, prolijamente doblada. (sigue aquí)

Comentarios Imprimir