Foto interesante: Chicago luz

Como dice el título, Chicago. Marzo del 2008, un frio de cagarrrrrrrrse, esperando el tren en la plataforma elevada para volver al hotel. El viaje que contextualiza la foto: PyCon USA 2008. La foto no fue demasiado complicada, una larga exposición buscando algún juego de contrastes entre lo oscuro de las vias y el cielo atrás (las primeras parecen apuntar a lo segundo), lo muy brillante de las luces, y el punto medio en los edificios.

Chicago luz

Las otras fotos interesantes hasta ahora, acá. |

Comentarios Imprimir

Analizando la memoria en Python

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.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 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

Comentarios Imprimir

Arrancamos con las charlas en La Tribu

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.

Comentarios Imprimir

Felipe Ramón

Un celular que reproduzca mp3s, fueron algo como $700 (no me acuerdo bien...).

Tener una canción copada como ringtone, nada.

Ver que tu hijo se pone por motus propio a bailar Los Ramones, no tiene precio, :D

Click para ver el video

Aclaración, por las dudas: Felu *no se llama Ramón...*

Comentarios Imprimir

Fotos interesantes

Compré mi primer cámara digital allá por el 2005, una Fuji FinePix A350 (la cual hoy en día ha superado ampliamente las treinta mil fotos sacadas).

En algún momento me empezó a parecer interesante sacar algunas fotos. No es que iba con la cámara por ahí, cual cazador de imágenes, tratando de sacar todas fotos artísticas, pero había momentos, lugares, o cosas, que hacían que quisiera sacar la foto de alguna manera que sólo se puede sacar si uno sabe sacar fotos, :)

No estudié fotografía formalmente, pero leí algunos documentos y cansé a preguntas a gente que sabe más que yo en el tema, y comencé a entender un poco de qué va la mano.

Rápidamente me di cuenta que esa cámara me quedaba corta en muchísimas situaciones, y como a esa altura ya la tenía recontra amortizada, empecé a averiguar para comprarme algo que me permitiera jugar más y mejor. Luego de mirar y mirar qué había y qué tenían otros, tomé la decisión de que no quería una cámara reflex digital, porque aunque me permitían sacar mejores fotos, tenían dos contras importantes: son caras y yo no había tomado la decisión de sacar fotos en serio o estudiar fotografía... es más, aún no la tomé..., y son grandes, tan grandes que no se pueden llevar en el bolsillo de una campera, o en una riñonera, etc.

Encontré (bah, un compañero de Ericsson me recomendó) la Canon PowerShot G10: no es reflex, y el lente no es el que se puede encontrar en una cámara más grande, pero después de eso me da todo lo que yo necesito (hoy) de una cámara, a un precio intermedio, y con un tamaño súper piola.

Toda esta intro es para comentarles que decidí elegir algunas fotos interesantes de todas aquellas que he tomado con ambas cámaras.

Son fotos que no serán la gran cosa, pero en las que he buscado algo, un efecto, mostrar alguna cosita, jugar con alguna luz o la ausencia de ella, etc.

Estas fotos las voy a ir poniendo acá, comentando un poquito sobre las mismas. Y las voy a ir agrupando también en Flickr (puse este enlace en la barrita de la derecha).

Cabe acotar que estas fotos NO están postprocesadas de ninguna manera, más allá de algún recorte o cambio de tamaño. Quizás en el futuro juegue con cambiar colores, o brillos, o lo que sea, lo comentaré en la foto, pero a priori son todas como salieron de la cámara.

Arrancamos con una que fue complicada:

Luis Longhi y su bandoneón

El de la foto es Luis Longhi, de Demoliendo Tangos, cuando festejaron su décimo aniversario en el Teatro Moliere. Fue complicada porque obviamente él se estaba moviendo todo el tiempo, y la iluminación era poca y difusa, así que tuve que jugar un rato para encontrar algo interesante.

Comentarios Imprimir