PyCon Atlanta 2011, la conferencia

Python — Domingo 13 de Marzo de 2011, 23:12


El formato de PyCon USA este año fue de dos días de tutoriales, tres días de conferencia (dos y tres cuartos, realmente), y cuatro días de sprints.

A los tutoriales no fui, pero sí a la conferencia y los sprints. Este post es sobre esos tres días de conferencia.


Primer día

Luego de la presentación y apertura del evento, tuvimos en la primera charla plenaria a Hilary Mason hablando de programación, análisis de datos, y varias cosas diversas... nada específico, pero entretenido.

Tuvimos un pequeño break y arrancó la primer sesión de charlas propiamente dichas. La primera fue "Distributed Tasks with Celery", por Ryan Petrello. Creo que la idea está buena, claramente resuelve casos de uso que se me presentaron y con los que estuve jugando... pero el diablo está en los detalles, dicen, hay que ver cómo es usar esto IRL.

"Getting more contributors (and diversity) through outreach" por Asheesh Laroia. Estuvo bien, aunque se focalizó más en "more contributors" que en "diversity", que era mi interés. Una idea para diversidad: hacer un evento especial para mujeres... hombres pueden ir, pero tenés que ir invitado por una mujer que vaya. Esto es algo que se inventó y probó en la comunidad de Ruby on Rails y que ha tenido bastante éxito... ya mandé un mail a la lista de correo de PyAr, veremos qué se opina por ahí.

Para dejar clara mi posición al respecto, lo que a mi me interesa es derribar las barreras actuales que evitan que las mujeres tengan las mismas oportunidades que los hombres en todo lo relacionado con tecnología.

La última charla de la mañana estuvo relacionada con la anterior, "Diversity in Tech: Improving our Toolset", por Jennifer Leech. Interesante aspecto relacionado con las expectativas y como estas afectan los comportamientos: "Si vos le decís a una persona cómo esperás que cumpla con una tarea en particular afecta profundamente cómo esa persona cumplirá con la tarea".

Luego el almuerzo, que fue durante la reunión de la Python Software Foundation, y las charlas de la tarde. Me quedé para dos relacionadas con Python 3: "Status of Unicode in Python 3" por Victor Stinner, y "Porting to Python 3", por Lennart Regebro.

Un break, una charla que no me gustó, y luego "Why is Python slow and how PyPy can help?", que no era lo que esperaba pero no estuvo tan mal (se dedicaron a hablar de que PyPy es más rápido que CPython y algunas cosas que hacen a nivel del JIT, pero nada más).

Sala de la plenaria

De cierre, las lightning talks. Alguna te puede gustar, otra no, pero el formato está buenísimo (justamente porque de las que te gustaron luego seguís investigando, y de las que no... bueno, no perdiste más de cinco minutos).

Al rato nos fuimos a cenar Dani Moisset, Armin Rigo (core developer de PyPy), Reid Kleckner que laburaba en Unsladen Swallow mientras el proyecto estaba activo, y yo. Comimos en un restaurant chino que estaba cerquita.

Al volver me puse a laburar en un fix a Twisted, y al sobre.


Segundo día

Al otro día, arrancamos con lightning talks de nuevo. Estuvo buena la de python-on-a-chip, que es una colección de ports de Python a algunos microcontroladores... me llamó la atención particularmente el port a DryOS, que es el sistema operativo de muchas Canon, incluída la que tengo.

También estuvo piola la de Brett Cannon contando que había hecho la nueva guía para desarrollar Python (Python, no en Python), y otro documento sobre cómo portar proyectos a Python 3.

Luego vino una plenaria sobre "How Dropbox did it and how Python helped", la cual estuvo pésima. Habló un poco de Dropbox, habló mucho de él y sus amigos... como charla normal, hubiese estado de medio pelo para abajo, y para una plenaria uno espera más. El flaco, como disertante, pésimo... creo que miró a la audiencia dos o tres veces, el resto leía de la laptop... mal.

Para cerrar el bloque, una entrevista relajada a Guido: básicamente una serie de preguntas que la gente fue mandando y votando a través de una página web. Habló de varias cosas, pero una frase que me encantó fue "The biggest innovation in Python is Community" ("la mayor innovación en Python es la Comunidad").

Luego de un break, comenzó la primer sesión de charlas. Me enteré de detalles históricos en "Ten years of Twisted", por Glyph Lefkowitz, y luego algunas ideas sobre documentación en "Writing great documentation", por Jacob Kaplan-Moss.  Antes de comer, una interesante charla de Alex Martelli, "API Design anti-patterns".

La sesión de la tarde, después del almuerzo,  arrancó con una charla de programación genética usando PyEvolve, y luego una charla sobre memoria: interesante, pero me hubiese gustado algo más de detalle en los internals y menos en lo que hace la biblioteca de este muchacho, gdb-heap. Antes del break cerramos con una charla sobre ZeroMQ... la biblioteca está interesante (una especie de socket mágico que puede ser 1:1 o 1:N, N:1, N:M, y con distintas semánticas con respecto a la respuesta), pero el flaco se la pasó cambiando ventanas, yendo para atrás y para adelante en la presentación a toda velocidad, y la verdad que se hubiese entendido más si hubiese mostrado todo mejor (no más, sólo mejor).

En el último bloque sólo ví una charla sobre AST, que estuvo un poco densa pero me dió más info para algo que tenía en la cabeza... de esos proyectos que uno patea para adelante y realmente nunca empieza, je, maldito día de sólo veinticuatro horas.

Y para cerrar,  lightning talks de nuevo! Se habló de Read the docs, un sitio web que reúne documentación de forma muy piola: basicamente lo apuntás a tu proyecto, y te arma toda la documentación a partir de tus .rst, los sirve, búsquedas completas, descarga como PDF, etc; muy interesante. Barry Warsaw habló sobre flufl.i18n una herramientra de internacionalización de más alto nivel que la clásica gettext.

A la noche cena con Nati Bidart, Dani Moisset y Juan Pablo (un chico de Buenos Aires que no conocíamos... bah, nos vimos un par de veces en algún PyDay) a un mexicano cerca que no estuvo muy bueno.


Tercer día

Nuevamente arrancamos con lightning talks, en las que yo día una charlita sobre PyAr, básicamente hablando de las Charlas Abiertas de Python en La Tribu, y de la CDPedia.

Luego hubieron tres plenarias dadas por sponsors: Threadless, Disqus y OpenStack. La de Threadless estuvo super divertida, y la de Disqus fue interesante del lado técnico, pero nada más.

Torta  de los 20 años

Luego de un break bastante largo (porque estaba la "poster session"... eso de los posters no me llama mucho la atención) fui a la charla de Raymond Hettinger "Fun with Python's Newer Tools", donde habló sobre Counter, namedtuples, lru_cache y .format. Estuvo muy buena!

A la tarde asistí a una charla sobre cómo habían escalado el nuevo frontend de SourceForge, y a una en que Doug Hellmann contaba sobre "tesoros escondidos" de la biblioteca estándar (no estuvo mal, pero ya conocía todos los módulos que comentó).

Para cerrar el evento, más lightning talks y mucha gente desfilando diciendo qué sprint va a liderar, a ver si consigue gente. Yo ya lo tengo decidido antes de venir, voy a empezar a portar Twisted a Python 3.


Conclusión

La conferencia, a nivel charlas, estuvo bien. No hubieron demasiadas cosas que me volaran la cabeza, pero estuvo interesante. Creo que vale la pena venirse hasta acá (aunque quizás no todos los años, por el costo que implica).

Hubo una sorprendente cantidad de "ruido" alrededor de PyPy (el intérprete de Python escrito en Python), porque que alcanzaron un punto de madurez en el que cumplen 99.99% de Python2.6, y es más rápido que CPython (el intérprete de Python hecho en C).

También se habló mucho alrededor de Python 3 siendo el futuro evidente... ya nadie se pregunta "cómo" ni "si pasará", sino "cuando se hará el click" y "quienes se están quedando atrás".

Python cumplió veinte años, y está más vivo que nunca.


Junin, pasado y futuro

Python — Lunes 10 de Enero de 2011, 23:38

Les dejo los videos de las Sextas Jornadas de Software Libre de Junín; acá están todos, y si releen mi post sobre el evento, pueden sacar cuales me gustaron, :)

Eso con respecto al pasado... ¿y al futuro?

Bueno, resulta que en Junín se realizará la tercera edición de PyCon Argentina (organizada por la misma gente que hizo las jornadas mencionadas arriba). PyConAr 2011 será en dicha ciudad los días Viernes 23 y Sábado 24 de Septiembre; una semana antes que PyCon Brasil.

Muchas lecturas aleatorias y secuenciales, ¿mmap?

Python — Viernes 03 de Diciembre de 2010, 20:22


Con Guillo y Alecu empezamos a charlar sobre si, en un módulo que estaba haciendo Guillo para el laburo convenía usar mmap al tener muchas lecturas secuenciales y muchas lecturas aletorias sobre un archivo grande. Obviamente, usando Python (¿faltaba aclararlo?).

Como no nos decidíamos, decidí medirlo.

Medimos!

Creé un archivo de cien millones de bytes al azar, y probé con distintos scripts hechos en el momento, con un comportamiento parecido al que iba a hacer Guillo:

  • Una lectura secuencial de todo el archivo, de a dos tamaños diferentes. En el script leo 50 bytes, y luego 450 bytes, y así; en la realidad se haría una lectura de ~50 bytes, longitud fija, y luego una de ~450, longitud variable.
  • Doscientas mil lecturas al azar en todo el archivo, siempre de 450 bytes. En la realidad, se harían muchas lecturas, de un valor no fijo pero precalculado.

En ambos casos, las pruebas que realicé fueron haciendo .read() y .seek() sobre archivos normales, haciendo .read() y .seek() sobre el mmap, y usando el mmap como un string, accediendo por slices.


Resultados

Entonces, lectura secuencial, leyendo los cien megabytes de principio a fin (en milisegundos):

- .read() y seek() sobre el file:  501 mseg
- .read() y seek() sobre el mmap:  492 mseg
- usando slices sobre el mmap:     169 mseg


Es notable la diferencia.

Hay que tener en cuenta que los primeros dos hacen dos llamadas a función por cada vuelta del loop (vean los archivos para más detalle), lo que suma 400 mil function calls en total. Yo había medido antes el costo de una llamada a función, y eran de un poco menos de 250 nanogundos: no parece mucho, pero en 400 mil llamadas, suman 100 milisegundos, lo que explica un poco la diferencia en lo medido.

En la lectura secuencial, tiempo total desde que se tiene la posición a leer hasta que se obtiene el string (en microsegundos):

- .read() y seek() sobre el file:  18.1 useg
- .read() y seek() sobre el mmap:  10.8 useg
- usando slices sobre el mmap:     10.3 useg



Conclusiones

Si vamos a usar mmap, en estos casos, conviene usar el acceso por slices (con corchetes).  

Tomando esos tiempos, mmap es un 296% más rápido en la lectura secuencial, y un 75% más rápido en el acceso aleatorio.

Claramente mmap es el ganador.


Disclaimers

Uno: Esto lo hice usando Python 2.6.6 en un Linux.

Dos: Mi disco es un SSD, seguramente en un disco con platos magnéticos la diferencia entre acceso secuencial y acceso aleatorio sea mayor.

Tres: Inmediatamente antes de hacer cada prueba, hay que decirle al sistema operativo que descarte los caches del filesystem, para que esto no nos deforme las medidas. Eso lo hice con este script.


Sextas Jornadas de Software Libre en Junín

Python — Lunes 08 de Noviembre de 2010, 20:23

El finde pasado estuve también de conferencia, en dichas jornadas.

Fuimos en mi auto Luciano, Roberto, Fisa y yo. Arrancamos el viernes tempranito y a eso de las dos de la tarde ya estábamos allá, donde fuimos muy bien recibidos. Hicimos el check in, almorzamos, y luego hicimos algo de tiempo (yo hice una micro siesta y me pegué un baño) y finalmente cruzamos la calle hasta la Universidad, donde arrancó el evento.

Yo abrí la conferencia con la charla de Python más rápido que C y luego hubieron algunas más que ya había visto, y una de "Fortificacion en instalaciones de servidores Debian" por Luciano Bello, que estuvo muy bien, super interesante.

Esa fue la última charla del día (que como había arrancado a la tarde, terminó a las nueve de la noche), así que luego de un rato en el que pasamos apenas por el hotel, nos fuimos a un asado los organizadores y disertantes (los que estábamos allí y un par que cayeron más tarde). El asado estuvo genial, todo muy rico (picada, asado y postres), y el ambiente copadísimo. Hace rato que no me reía tanto en una reunión así.

Ya pasada medianoche emprendimos el regreso caminando (eran unas quince cuadras hasta el hotel), pero media cuadra antes de llegar al mismo vimos un pool abierto, y la tentación fue muy grande: con Nico César nos quedamos como tres horas más jugando y charlando.

Al otro día obviamente me levanté más tarde de lo que hubiese debido, me afeité, bañé, desayuné y llegué a la Universidad para la segunda charla. El segundo día también estuvo interesante, destaco las charlas de Andrés Riancho sobre aspectos de seguridad web, la de Nico César sobre administración de sistemas en gran cantidad de servidores, y otra de Luciano Bello sobre Linux capabilities.

La última charla del evento fue Entendiendo Unicode, luego algunas palabras de los organizadores, un sorteo, fotos, y desbande generalizado.

Con algunos de los chicos nos fuimos a tomar una cerveza, y luego hicimos un rato de tiempo hasta que fuimos a comer, a un club local. Luego al hotel, a dormir tempranito, porque el domingo arrancábamos el viaje de regreso a las ocho y media de la mañana...

La verdad es que la pasé genial el fin de semana. No sólo porque el evento en sí estuvo bárbaro (casi todas las charlas me resultaron interesantes, y estuvo bien organizado), sino que me volví a ver a un grupo de gente con el que me llevo muy bien. Es notable la dinámica que se logra en estas conferencias, porque hay un montón de gente de todo el país que si no fuese por estos eventos no nos veríamos (¡ni nos hubiésemos conocido!) y nos vamos reencontrando algunas veces al año en distintos puntos de nuestra geografía.

Es un lujo poder participar en esto.

Conferencias Python Cono Sur 2010

Python — Jueves 28 de Octubre de 2010, 09:00

Una atrás de la otra, pasaron más rápido de lo que hubiese querido.

En Córdoba estuve un par de días antes de la conferencia http://ar.pycon.org/, incluso un día trabajando desde allá (el otro ayudando un poco). Pero igual me fui con la sensación de que me faltó charlar con un montón de gente. Quizás estoy mal acostumbrado por los PyCamp, donde son cuatro días no tan estructurados como en una conferencia, y uno puede lograr un mayor contacto humano.

Como conté, dí dos charlas, las cuales salieron bien. Las Charlas Relámpago estuvieron geniales, los keynotes no tanto. Los dos días luego de la conferencia estuvieron buenos (el viernes hubo un asado que no fue asado, lejos de la ciudad, y el sábado una cerveceada, en un bar copado a unas cuadras de la Uni).

Cerveceada cordobesa

¿Cómo es un asado que no es asado? Originalmente iba a ser asado, pero terminó siendo algo que parece estar muy de moda en Córdoba: "pata". Con el término "pata" se refieren a que uno contrata el servicio de una gente que vienen con una pata graaande de ternera, ya cocida, calentita, mucho pan, algunos tarritos con diferentes salsitas, y la cortan ahí "en vivo", y uno mismo se va haciendo sanguchitos. No me quedó claro si el tomate y la lechuga que había la habían puesto los organizadores, o vienen incluidos en el servicio de "pata".

Todas mis fotos de PyCon en Córdoba, acá. Y acá están las de Marcos Dione, fotógrafo (semi?) oficial del evento.

PyCon Brasil fue mucho más express. Como mi keynote fue decidida medio de emergencia, mi vuelo fue medio "como pude". Viajé a Curitiba el jueves a la mañana, vía Montevideo (buenísimo, porque salí de Aeroparque), y llegué allá a media tarde, perdiéndome casi todo el primer día de la conferencia. Una cal y una de arena con respecto al vuelo de Pluna: no te sirven nada a bordo a menos que lo compres, pero los aviones (Bombardier CRJ-900NG) son realmente cómodos.

Me pasaron a buscar por el aeropuerto, me llevaron hasta al hotel donde hice el check-in y dejé algunas cosas, y fuimos a la conferencia. Llegué más o menos justo para las Lightning Talks, y me quedé en la Asamblea de la Asociación de Python Brasil, donde casi no entendí nada de lo que discutían. Casi. Luego, fuimos todos a cenar a una especie de tenedor libre en la que pasean un montón de mozos con distintos cortes de carne y te van sirviendo. Comí muy bien, luego me llevaron hasta el hotel, y al sobre.

Al otro día me levanté no demasiado temprano, desayuné tranqui y me tomé un taxi hasta la Universidad. Estuve un rato con la gente, hasta que a las once y cuarto arrancó una charla donde contaban qué es Arduino, cómo se conecta, un ejemplo de programita en C, y luego cómo usarlo desde Python a través de Firmata.

Luego del almuerzo (algo bien brasileño en un lugar cercano), vino mi keynote. Mi charla sobre Comunidad, anarquía y subversión salió muy bien, pude hilar todos los conceptos que quería, y hacer el remate con el efecto deseado sin que parezca tirado de los pelos. Tuve muy buen feedback, no sólo por algunas preguntas en el momento, sino gente que luego se me acercó. "Motivadora" fue un adjetivo que me gustó.

Luego hubieron un par de charlas más, y llegaron las charlas relámpagos. Yo dí una de las charlitas: Archivos ejecutables de Python, una pequeña receta que ya pondré acá como post, tomada de una charla más larga de John Lenton. Ni bien terminaron me llamé un taxi, y me volví al hotel. Compré algo para comer, y a dormir temprano, que estaba destruido...

PyCon Brasil

El sábado todo fue más tranquilo, yo me desperté tarde, llegué a media mañana, pero vi bastante gente que llegó más tarde que yo. Como había desayunado tarde terminé no almorzando, sino que paseando un poquito por ahí. Presencié la keynote de Ruby, y estuve en un par más pero sin prestar atención casi. Al final del día, volví a presentar una Charla Rápida, esta vez sobre PET (Python Entre Todos, la revista de PyAr), cuya primer edición está siendo traducida al portugués en este momento (ya está en castellano e inglés).

A la noche, fuimos a comer a un lugar de comida árabe. No estaba demasiado ambientado, ni nada, pero era árabe posta (o sea, no era "árabe para turistas", sino "árabe para árabes"). Comí muchas cosas raras. Incluso algunas que al principio no me animé, como carne cruda condimentada (pero no cocinada con limón, por ejemplo...).

El domingo me levanté temprano, y me llevaron a pasear a una feria artesanal, luego a almorzar, y finalmente me alcanzaron hasta el aeropuerto (gracias Ramiro!). El viaje de vuelta todo muy bien, y finalmente pude llegar a casa. Todas las fotos de PyCon Br, acá.

¡Se vienen las conferencias Python del Cono Sur!

Python — Jueves 14 de Octubre de 2010, 15:03

Mañana y pasado, en Córdoba, tenemos la segunda edición de PyCon Argentina, con un montón de charlas buenísimas.

Yo doy Python más rápido que C (con Lucio), y Entendiendo Unicode.

Las dos charlas plenarias, con invitados internacionales, son de Leah Culver y Christiano Anderson:

Leah y Christiano

La semana que viene, es PyCon Brasil! Resulta que uno de los keynotes que iba a venir a PyCon Ar y Br (Ian Bicking) canceló a último momento porque falleció un familiar suyo. Entonces, en PyCon Ar lo reemplazamos con Christiano, y a PyCon Br a dar la keynote voy yo! :D

Todavía no tengo la charla terminada, pero voy a hablar de "Comunidad, anarquía y subversión". Creo que va a quedar interesante.

Python Argentina, la historia

Python — Domingo 05 de Septiembre de 2010, 10:48

El siguiente texto formó parte de la Primera Edición de PET - Python Entre Todos, la revista de PyAr. Tiene un montón de artículos copados, y la pueden ver online, o bajarla en PDF en distintos formatos. En la semana va a salir el mismo número, pero en inglés, y esperamos una segunda edición prontito. ¡Disfrútenla!

Ahora, el artículo.


Conocí Python en el 2001, buscando un lenguaje piola para trabajar en entornos Unix y Windows, y frustrado por algunas experiencias anteriores. Inmediatamente ví que era algo que me gustaba, y comencé a invertir tiempo, aprendiendo y profundizando en él.

No conocía muchos que usaran este lenguaje. Sí, estaba la lista de Python en español, y la lista en inglés, pero no tenía contacto con otros argentinos que programaran en él (más que un par de compañeros de trabajo). Buscando gente, caí en un sitio que organizaba reuniones de todo tipo, me anoté, pero nada.

Llegó el 2004. Pablo Ziliani (más conocido como un tal Pablo) encontró el mismo sitio pero lo tomó, lo sacó de su hibernación, y mandó invitación para juntarnos.

Esta juntada fue finalmente la Primera Reunión de Python Argentina. Nos encontramos en un bar céntrico, el 9 de Septiembre de 2004, Pablo, un chico llamado Javier que no volvimos a ver, y el que suscribe.

Aunque sólo charlamos de generalidades alrededor de Python, el ímpetu no quedó ahí y con esa base se organizó la próxima reunión, en la que ya se empezó a formar el grupo propiamente dicho.

En esta segunda reunión, a fines de Octubre, se bautizó al grupo como “PyAr - Python Argentina”, y decidimos crear la lista de correo y establecer un portal web donde se den a conocer los objetivos y actividades del grupo, las instrucciones para participar, enlaces a información útil, y generar contenido propio (como por ejemplo experiencias locales en el uso de Python).

El primer año del grupo pasó a pura reunión. Darnos a conocer no era fácil, y aunque hacíamos promedio una reunión por mes, éramos entre cuatro y siete personas, siempre los mismos. Pero en función de llegar a más gente fue que en la reunión de Agosto del 2005 decidimos participar en CaFeConf 2005, las Jornadas Abiertas de GNU/Linux y Software Libre organizadas por CaFeLUG. Presentamos entonces dos charlas para dicha conferencia, Lucio dió una sobre PyGame y yo una de introducción a Python.

Las primeras reuniones del 2006 nos encontraron ya con más gente (entre diez y veinte por reunión), y discutiendo sobre otros temas a nivel de grupo más allá de la difusión. Estábamos con la creación de las primeras remeras, Ricardo había creado un canal de IRC en Freenode (el viejo #python-ar), y Alecu proponía formalizar un poco el tema de las reuniones, creando un procedimiento para las mismas.

También con estructuras más afianzadas se empezaron a barajar otros desafíos, como reuniones en interior del país, traer algún invitado internacional a CaFeConf 2006, traducir documentación oficial de Python, y algo que en su momento se llamó NERDcamp...

En Febrero de ese año yo realicé mi primer viaje a PyCon USA (la conferencia de Python más importante del mundo), donde PyAr comenzó a hacerse visible más allá de nuestras fronteras, no sólo porque dí una Lightning Talk de nuestro grupo, sino porque aproveché para vender muchas de las remeras que habíamos hecho.

En reuniones de esa primera parte del año también hablamos sobre el contenido de la lista de correo (si la separamos en sub listas o qué hacemos para limitar las conversaciones no específicas a Python; esta discusión la seguimos teniendo hoy en día...), hablamos del Día Python realizado en Mendoza, y charlamos sobre cómo organizar el grupo a nivel estructura: si íbamos a definir /cargos/ dentro del grupo, o seguir como estábamos en una estructura plana sin presidentes ni presididos.

La organización del grupo merece un párrafo aparte. Desde el comienzo de Python Argentina hasta ahora no hubieron nunca personas con cargos específicos, sino que siempre mantuvimos una muy saludable anarquía, en donde había una asociación y un pacto voluntario entre las personas del grupo que quisieran llevar algún proyecto interno adelante, sin necesidad de "decisiones oficiales" que impongan recorridos al resto de las personas del grupo. En otras palabras, si alguien en PyAr desea empujar un proyecto, sólo tiene que hacerlo, y tendrá más o menos participantes y/o ayudantes en función de si el proyecto es interesante o no, pero no tiene que "oficializarlo", o pedir aprobación sobre el mismo.


Siguiendo con la historia

En Junio del 2006 se realizó la Primer Jornada Python Santa Fe, en la Universidad Tecnológica Nacional, ciudad y provincia de, justamente, Santa Fe. Las jornadas fueron un éxito, y en la reunión / sprint posterior a las mismas (mientras comíamos pizza y hablábamos de todo un poco) se empezó a trabajar en un proyecto importante para el grupo: una versión offline de la Wikipedia. Este evento nos motivó bastante, y en la reunión siguiente Pablo Ziliani  sugirió que tratemos de ponernos como objetivo "organizar una reunión /federal/ al menos una vez al año", y decidimos que queríamos tener una bandera de PyAr.

Septiembre del 2006 nos encontró participando en la tercera edición de PyWeek, una competencia internacional en la que se debe programar un juego en Python en una semana, arrancando desde cero y terminando con algo que prueban el resto de los competidores. No era la primera vez que participábamos, pero en esta oportunidad uno de los grupos de PyAr ganó la competencia con el juego Typus Pocus (¡y otro grupo nuestro quedó tercero!).

La segunda mitad del año no trajo mayores novedades hasta que llegamos a CaFeConf 2006, donde estrenamos stand con una bandera recién salida del horno, y además una de las plenarias del evento era dada por Alex Martelli (habló de "Qué es Python y por qué importa"), invitado internacional traído por gestiones propias de PyAr.

Luego de este evento empezamos a reconocer lo importante que era para Python Argentina participar de estas conferencias y jornadas abiertas a la comunidad, ya que luego de las mismas notábamos un salto en la cantidad de suscriptos a la lista de correo. Además, empezamos a establecer buenos vínculos con el resto de la comunidad de software libre de Argentina, comunidad a la que algunos conocíamos pero en la que no estábamos involucrados.

El año 2007 fueron meses de consolidación. Se realizaron varias reuniones en Capital e interior, estuvo el segundo Día Python en Santa Fé (esta vez con dos tracks, de nuevo un éxito), y PyAr participó en CaFeConf, en Unlux y en las Jornadas Regionales de Software Libre, en Córdoba. Como se discutió en la reunión del grupo luego de esa conferencia, Python Argentina era un grupo nuevo que estaba naciendo y  aprovechábamos la gentileza de los “hermanos mayores”: la capacidad organizativa y la gente involucrada en los LUGs. Un detalle importante a considerar es que Python era el único lenguaje de programación con stand propio, tanto en CaFeConf como en dichas Jornadas.

Durante este año también la lista de correo alcanzó una cantidad de participantes suficientes como para que la rueda gire sola: la gran cantidad de respuestas a las preguntas dejó de surgir del grupito de 20 o 30 personas que arrancó el grupo y pasó a ser generadas por personas más nuevas. También activamos el IRC como medio de comunicación, pero usando #pyar como canal en Freenode (necesitábamos hacer algunos cambios y no teníamos acceso a Ricardo, que había creado el anterior). En conjunto, la lista y el canal de IRC, probaron ser los mejores medios de comunicación para el grupo, complementándose entre ellos ya que la dinámica es distinta en cada caso, y ambos teniendo como soporte persistente al sitio web, que de a poco se fue llenando de Recetas, Cartelera de Trabajo, Novedades, Documentación, FAQ, etc.

2008 arrancó con una gran novedad: el primer PyCamp. Organizado por Except, una empresa de Córdoba, este evento se desarrolló durante cuatro días en los que fuimos a trabajar en distintos proyectos de Software libre relacionados con Python, a socializar, y a tener algún pequeño contacto con la naturaleza.

En la reunión de Mayo de ese año se charló sobre las participaciones del grupo en otros eventos internacionales. Estuvimos representados nuevamente en PyCon y por primera vez en Fisl (donde integrantes de PyAr hicieron Falabracman, un juego en 36 horas para la competencia OLPC Game Jam, ¡la cual ganaron!).  También se charló una diferencia importante entre los grupos de usuarios de USA y de Argentina; en Estados Unidos se juntan directamente a programar o a hablar de cosas netamente técnicas, y en Argentina las reuniones son con un fin más social, para conocernos las caras y quizá tomar alguna que otra cerveza.  Relacionado con una idea que venía de antes, Humitos nos contó que estaba haciendo una traducción al español de manual de Django, y surgió el tema de traducir el Tutorial oficial de Python, con la posibilidad de imprimirlos y encuadernarlos para venderlos o regalarlos en algunos eventos.

La segunda mitad del año estuvo bien movidita también. No sólo por reuniones en Buenos Aires e interior (¡primera vez en Rosario!), sino que terminamos de definir el diseño de la segunda tanda de remeras de PyAr, y participamos nuevamente en las Jornadas Regionales de Software Libre. En este evento Python volvió a pisar fuerte, no solo por la cantidad de charlas presentadas o lo exitoso del stand, sino que volvimos a traer un invitado internacional (Raymond Hettinger) para que dé una plenaria en un evento de primera linea.

También se realizaron las 3ras Jornadas Python en Santa Fe, donde se anunció formalmente que al año siguiente se realizaría la primera conferencia nacional de Python en Argentina. En la última reunión del año en Buenos Aires se terminó de discutir el arranque de la organización de esta importante conferencia, y terminamos el 2008 con muchas ganas de que arranque el próximo.


Quinto aniversario

Los últimos días de Marzo del 2009 nos trajo la segunda edición del PyCamp, nuevamente en Los Cocos (Córdoba). Fueron nuevamente cuatro días en los que se desarrollaron muchos proyectos, y se profundizaron muchos lazos dentro de la comunidad Python.

La segunda parte del año tuvo como plato fuerte a PyCon Argentina 2009, la primera conferencia en español del mundo, un merecido festejo del quinto cumpleaños de PyAr. Fueron dos días en Septiembre, mañana y tarde, con tres secciones en paralelo la mayor parte del tiempo. Usamos tres auditorios de distintas capacidades, siendo el mayor para 300 personas, y dividimos las exposiciones en tres tipos: charlas comunes (tuvimos 33 distribuidas en ambos días), lightning talks, y plenarias.

PyCon fue todo un éxito (no esperábamos tanta gente, vinieron más de 400 personas, muchas de Buenos Aires, pero una buena parte de interior, y también gente de otros paises), y tuvo muy buena repercusión tanto en nuestro país como en medios internacionales. A esto último ayudó que tuvimos dos invitados de primera linea (Jacob Kaplan-Moss y Collin Winter) que se lucieron en sus respectivas charlas plenarias.

Para la conferencia pudimos terminar uno de los proyectos de larga data dentro del grupo: ni más ni menos que la traducción completa al castellano del Tutorial de Python (el oficial), que publicamos en la red pero que también imprimimos en cantidad para repartir durante la conferencia (especialmente en la charla de Introducción a Python), y que luego fuimos llevando a los otros eventos que participamos. Además, aprovechando que PyAr tiene mucha gente estudiando en Universidades, donamos Tutoriales a las Bibliotecas de dichas instituciones.

Terminamos el año con una participación en un evento amigo, Fábrica de Fallas, en La Tribu. No es un ámbito tradicionalmente orientado a la programación, y aunque PyAr siempre tuvo buena acogida en ese ámbito, nos sorprendió gratamente que uno de los momentos artísticos del evento haya sido la pintada de un mural cuya base es un tutorial de Python!

El comienzo del 2010 tuvo al clásico PyCamp en la primera parte del año, pero esta vez no en Los Cocos, como en las dos ediciones anteriores, sino en Verónica (Buenos Aires). Cambió el lugar pero no el estilo: los PyCamps son uno de los eventos de programación más interesantes que conozco, y uno de los que más cumplen a la hora de aprender y divertirse.

También se aceleró el trabajo sobre la CDPedia, el proyecto que ya les había mencionado sobre meter la Wikipedia en un disco para usarse sin estar conectados a Internet. En la versión CD entraron más de 80 mil artículos, la mayoría con imágenes. Y en la versión DVD entraron todos, casi todos con sus respectivas imágenes. Si podemos terminar algunas funcionalidades que necesitamos, estaríamos distribuyendo la CDPedia en muchas escuelas de todo el país, a través del Ministerio de Educación.

En Mayo se realizó el primer Python Day en Rafaela, Santa Fe, el cual fue un éxito, llevando a casi 100 personas. Y para Septiembre se hará el primer Python Day en Buenos Aires, que esperamos ansiosos.

La segunda parte del año nos traerá también el primer Ciclo de Charlas Abiertas, en La Tribu (una serie de charlas sobre programación y Python, a la gorra, abiertas a la comunidad), y la segunda edición de PyCon Argentina, esta vez en Córdoba.

Seguramente cerremos el sexto año del grupo festejando todo lo hecho, pero también planeando nuevos eventos, nuevas formas de promover Python, y de juntarnos entre todos los usuarios de Python del país.

Analizando la memoria en Python

Python — Viernes 20 de Agosto de 2010, 13:32

Estoy haciendo un análisis de la memoria del cliente de Ubuntu One (particularmente unos módulos que conforman el SyncDaemon propiamente dicho), y me pareció tan copado que muestro acá parte de eso (aprendí el 99% de esto gracias a Guillo).

El análisis se basa en usar Heapy. Si a ubuntuone-client se lo levanta con --debug-heapy_monitor, el mismo hace (sacando el manejo de error):
import guppy.heapy.RM
guppy.heapy.RM.on()
Nada más. Entonces, lo ejecuté, y lo llevé a un estado en donde quería probar un par de cosas.

En otra terminal, ejecuté:
python -c "from guppy import hpy; hpy().monitor()"
Y eso me abrió una linea de comandos a través de la cual me conecté a mi programa Python que estaba ejecutando en la otra ventana (sí, a SyncDaemon):
<Monitor>
*** Connection 1 opened ***
<Monitor> lc
CID PID  ARGV
  1 4451 ['bin/ubuntuone-syncdaemon', '--debug-heapy_monitor']
<Monitor> sc 1
Remote connection 1. To return to Monitor, type <Ctrl-C> or .<RETURN>
<Annex> h

Documented commands (type help <topic>):
========================================
close  h  help  int  isolatest  q  reset  stat

<Annex> stat
Target overview
------------------------------------
target.sys.executable   = /usr/bin/python
target.sys.argv         = ['bin/ubuntuone-syncdaemon', '--debug-heapy_monitor']
target.wd               = /home/facundo/canonical/u1-client/aq-memory-improvements
target.pid              = 4451
------------------------------------
Abrí una consola interactiva, y le dije que me tomara un snapshot del heap:
<Annex> int
Remote interactive console. To return to Annex, type '-'.
>>> h1 = hp.heap()
Luego hice tiré un archivo con contenido a Ubuntu One, volví a pedir el heap. Y miré las diferencias:
>>> h2 = hp.heap()
>>> h2.diff(h1)
Summary of difference operation (A-B).
        Count     Size
  A    204310 17394824
  B    204296 17393604
  A-B      14     1220  =   0.00701 % of B

Differences by kind, largest absolute size diffs first.
 Index  Count     Size  Cumulative  % of B Kind (class / dict of class)
     0      3      468       468   0.00269 str
     1      2      272       740   0.00425 dict (no owner)
     2      2      152       892   0.00513 ubuntuone.syncdaemon.marker.MDMarker
     3      1       92       984   0.00566 ubuntuone.syncdaemon.action_queue.Upload
     4      1       56      1040   0.00598 unicode
     5      2       56      1096    0.0063 ubuntuone.syncdaemon.logger.mklog
     6      1       52      1148    0.0066 ubuntuone.syncdaemon.action_queue.MakeFile
     7      1       36      1184   0.00681 types.MethodType
     8      1       36      1220   0.00701 ubuntuone.syncdaemon.sync.FSKey
     9      0        0      1220   0.00701 dict of ubuntuone.syncdaemon.event_queue.MyReader
    10      0        0      1220   0.00701 ubuntuone.syncdaemon.event_queue.MyReader
Seguí haciendo unos experimentos, y llegó un punto en que ciertos elementos no deberían estar más en memoria, pero estaban. Lo más piola es que pude ver dónde:
>>> markers = h5[39]
>>> markers
Partition of a set of 241 objects. Total size = 18316 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0    241 100    18316 100     18316 100 ubuntuone.syncdaemon.marker.MDMarker
>>> markers.referrers
Partition of a set of 2 objects. Total size = 6332 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      1  50     6280  99      6280  99 dict (no owner)
     1      1  50       52   1      6332 100 collections.deque
>>> markers.referrers[0].referrers
Partition of a set of 1 object. Total size = 136 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      1 100      136 100       136 100 dict of ubuntuone.syncdaemon.action_queue.DeferredMap
>>> markers.referrers[1].referrers
Partition of a set of 1 object. Total size = 520 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0      1 100      520 100       520 100 dict of ubuntuone.syncdaemon.file_shelf.LRUCache
El segundo es un caché, y está todo bien, está acotado y cuando se suelte, se volarán. Pero el primer es un leak (del código nuestro, no de Python), y me confirmó lo que yo había visto por inspección del código.

Buenísimo el Heapy, :D

Arrancamos con las charlas en La Tribu

Python — Lunes 16 de Agosto de 2010, 14:37

Las dos primeras charlas ya fueron el mes pasado.

La primera fue "Introducción a la Programación", charla que estrenaba completamente, y que implicaba la dificultad adicional del tema: no era Python, era "programar", un tema difícil de explicar, y más aún de mostrar en slides para un público masivo.

La segunda fue "Introducción a Python". Aquí yo dí la misma charla de siempre, pero en muchísima más profundidad. Tomás Zulberti completó al final hablando sobre la Biblioteca Estándar, y Diego Mascialino cerró con un ejemplo de procesamiento de números.

Las dos charlas fueron un éxito bárbaro: tuvimos un lleno completo en el aula, ¡la gente se amontonaba en el pasillo! Y lo mejor, es que se fueron todos contentos, :D

Los slides y los videos de los dos días están en la página de las charlas , así como también la planificación para el resto del año.

Este sábado, tenemos "Introducción al Desarrollo Web I", por Alejandro J. Cura, a la mañana de 10:30 a 12:30, y "FooBar (virtualenv, buildout, nose)", por Roberto Alsina, a la tarde de 13 a 15 horas. La entrada es libre y gratuita. Se pasará una gorra voluntaria durante los cursos para hacer frente a viáticos y gastos generales.

Vengan con tiempo, para conseguir buenas ubicaciones. Los esperamos en La Tribu, Lambaré 873, Ciudad de Buenos Aires.

Charlas Abiertas de Python en La Tribu

Python — Viernes 16 de Julio de 2010, 14:13

Python Argentina y Colectivo La Tribu se enorgullecen en presentar el Ciclo 2010 de Charlas Abiertas de Python.

Distribuidas a lo largo de varios sábados del segundo semestre del año, cubren temas desde lo más principiante a temas muy avanzados, cerrando incluso con un taller.



Las charlas serán dadas en La Tribu, Lambaré 873.

La entrada es libre y gratuita. Se pasará una gorra voluntaria durante los cursos para hacer frente a viáticos y gastos generales.

No hace falta registrarse, pero vengan temprano para asegurarse un lugar porque los cupos son limitados.

Para más información y actualizaciones, pueden consultar la página oficial de las charlas.

Por favor ayuden con la difusión! Si quieren pueden imprimir este folleto y pegarlo en vuestros lugares de trabajo y/o estudio. Muchas gracias!

Entrenando al pequeño

Python — Sábado 24 de Abril de 2010, 00:41

Felipe enojado

Community Award

Python — Viernes 19 de Marzo de 2010, 12:05

Y cuando uno cree que ya nada lo sorprende, va y recibe un premio de la Python Software Foundation!

El premio de Facundo Batista fue por organizar PyCon Argentina y la comunidad argentina de Python, así como también por sus contribuciones a la biblioteca estándar y por su trabajo en traducir la documentación de Python.

¡Estoy *tan* contento por esto!

:D

Powered by LifeType