Juanjo Conti: Las últimas cuatro novelas que leí

   Publicado:

Las últimas cuatro novelas que leí fueron escritas por personas con las que, de una u otra forma, tengo trato. No me había dado cuenta de eso hasta hoy.

La primera de las cuatro fue Chamamé, de Leonardo Oyola. Pude conocer al autor en persona y que me dedicó la novela mientras la estaba leyendo. El libro es difícil de conseguir en Argentina. Se lo compré a Eterna Cadencia por mail.

Chamamé

Dedicatoria

Luego, en la misma ciudad que fue escrita y pocos días después de compartir un SLAM con el autor, devoré La más importante de todas las historias, de Diego Arbit. Se lo compré al autor en mano. La di de alta en Goodreads.

La más importante de todas las historias

Apenas terminada la anterior, me metí con Todavía no cumplí cincuenta y ya estoy muerto, de Javier Chiabrando. Policial erótico. El autor nació en mi pueblo, pero nunca lo vi en persona. El título del libro se me había quedado grabado luego de ver una entrevista que le hicieron en canal 7. Compré el libro usado en Internet.

Todavía no cumplí cincuenta y ya estoy muerto

La última de este periodo de lectura fue El peor amigo del mundo, de Rafael Fernández. Novela de la cual soy un orgulloso mecenas y cuyo crecimiento seguí por Internet. También la di de alta en Goodreads.

IMG_3374 El peor amigo del mundo

 

Cuatro novelas que recomiendo.

Manuel Kaufmann (Humitos): Charla abierta de OpenStreetMap en Las Breñas

   Publicado:

El próximo Viernes 19 de Diciembre voy a estar dando la charla "OpenStreetMap: nuestros mapas" en la ciudad de Las Breñas, provincia de Chaco, Argentina.

flyer.thumbnail.jpg

Presentación de la charla

Tené en cuenta que...

  • ... la entrada es libre y gratuita
  • ... la charla está destinada a público en general, municipios, organizaciones, docentes, estudiantes de secundaria y universitarios, entre otros...

¿Dónde y cuándo?

  • Victor Mercante 870, Salón de Sesiones del Consejo Municipal, Ciudad de Las Breñas, Chaco, Argentina.
  • Viernes 19 de Diciembre de 2014 de 16 a 19 horas.

¡Están todos invitados. Los espero!

Juanjo Conti: Nueva edición de Santa Furia

   Publicado:

Ayer busqué en la imprenta una nueva edición de Santa Furia que hice para seguir experimentando con mi editorial Automágica. Es una versión extendida del libro que fue publicado este año por La Gota. Si alguien quiere un ejemplar, me chifla.

Santa Furia

Gonzalo Martinez: WebSocket Server Escalable Software

   Publicado:

Pareciera que los servicios de WebSocket en la nube están de moda. Muchos proyectos proveen una abstracción sobre los websockets con un modelo de pago por transacción que además parece ser bastante caro es masomenos entendible por que diseñar un servicio de WebSocket o de Publish/Subscribe parecería bastente dificil en principio pero no es más dificil que armar una API Rest sin framework hoy en día. Algunos datos del software que creo necesario para lograr hacer un WebSocket server escalable en Python obviamente ya que es el lenguaje que nos gusta en este Blog.

Tornado[0], es un Framework para hacer aplicaciones Web principalmente pero también es muy conocido por tener una clase para manejo de WebSockets y hay benchmarks que lo comparan en velocidad de respuesta con nodejs un muy conocido lenguaje de programación basado en el motor v8 sobre el que corre javascript en los browsers. [1]

SockJS[2], es principalmente una libreria de javascript que emula el funcionamiento de WebSockets intentando dar la mayor compatibilidad con los browsers a la vez que intenta mantener una interfaz muy similar al WebSocket puro. El único que inconveniente en principio es que para implementar sockjs y aprovechar todas sus caracteristicas se necesita una implementación del lado del servidor.

sockjs-tornado[3], es una libreria que implementar sockjs sobre un servidor tornado, esto se hace cambiando la clase de la que se hereda el WebSocketHandler.

redis [4], es un base de datos en memoria que utiliza como estructura principal key-value, donde las peticiones son hechas a traves de una clave y devuelven un valor, muy util para utilizar como cache. Pero en el caso de un WebSocket server vamos a usar una de sus caracteristicas como Publish/Subscribe [5].

Antes de terminar con las tecnologias a usar voy contarles por que necesitamos un server con la modalidad de Publish/Subscribe. Una aplicación web masomenos bien diseñada puede escalar horizontalmente [6][7], gracias a que hay un tercero donde comparten la información, y esa es la base de datos comunmente relacional del tipo SQL. En cuanto al WebSocket cada conexión hecha contra un servidor puede (en su implementación normal) solamente comunicarse con otros websockets dentro del mismo servidor por eso la única manera para hablar entre diferentes servidores es agregando a un tercero que maneje algo parecido a canales de comunicación y a eso viene la funcionalidad de Publish/Subscribe, que nos ofrece tener canales donde dos servidores o más  pueden publicar y subscribirse y al subscribirse recibiran todos los mensajes que vayan a ese canal. De esa manera podemos levantar n servers sabiendo que todos los websockets aunque estén distribuidos si se subscriben al canal adecuado van a recibir los mensajes que les corresponden.

tornado-redis[8] es una implementación de redis para tornado, lo que permite generar un solo cliente por instancia de tornado y manejar las subscripciones desde ahí, además, tiene una clase de abstracción para manejar subscripciones basadas en sockjs-tornado[9]

Y eso creo que es todo ya tenemos todo un hermoso Stack de tecnologias para empezar a desarrollar nuestra aplicación web basada en Sockets ahora es cuestión de juntar todo y ponerse a escribir código.

[0] http://tornadoweb.org/
[1] http://swizec.com/blog/benchmarking-node-tornado-and-django-for-concurrency/swizec/1616
[2] http://sockjs.org/
[3] https://github.com/MrJoes/sockjs-tornado
[4] http://redis.io/
[5] http://redis.io/topics/pubsub
[6] http://blog.deploshark.com.ar/2014/01/otros-atributos-de-calidad-capitulo-12.html
[7] http://es.wikipedia.org/wiki/Escalabilidad#Escalabilidad_horizontal
[8] https://github.com/leporo/tornado-redis/
[9] https://github.com/leporo/tornado-redis#pubsub

Manuel Kaufmann (Humitos): Somos mimos

   Publicado:

Las pocas semanas que estuve en Paraná, luego de volver de la Segunda Etapa del proyecto Argentina en Python, fueron muy intensas. La verdad que no me esperaba nada de todo lo que pasó.

Todo lo que pasó, en partes, se generó a raíz del Curso de Python en Paraná. Gracias a Pablo Zubizarreta (con quién alguna vez había hecho un taller de "Edición de audio y video") que me puso en contacto con Jaimo, un arquitecto y animador de Paraná.

Crucé muy pocas palabras con Jaimo por Facebook y así coordinamos para hacer una mini-reunión para charlar de qué se trataría el taller y ver cómo le íbamos a dar difusión. Sinceramente, no tenía ni idea para qué nos íbamos a juntar hasta después de haber ido a la casa y charlar con él. Yo solo acepté en ese momento. Ese día, al llegar a la casa creo que conectamos inmediatamente. Él me saludó como uno más y yo estreché mi mano con un tinte de admiración, ya que conozco algunos de sus laburos [1] [2] y me encantan.

Inmediatamente pasamos a otro plano y nos pusimos a hablar del curso, de qué días podíamos cubrir, del precio e inebitablemente caímos en la parte filosófica del Software Libre, el proyecto Argentina en Python y un poco de mi historia. Charlamos muchísimo, de muchísimos temas. Todos temas que no me esperaba y que me dejaron helado. Después de un par de horas, que creo ninguno de los dos tenía pronosticado emplear en esa juntada, me di cuenta que es un tipo muy culto y con una mirada interesante de las cosas (ahí lo adopté como referente para futuras charlas). Tenía muchas ganas de seguir charlando con él un buen rato más, pero lamentablemente ese encuentro llegó a su fin y cada uno tuvo que ir para su lado.

Pasaron los días, pasó el primer encuentro del Curso de Python y luego de las primeras 4hs nos quedamos con Jaimo hablando un rato sobre este primer encuentro y otras cosas más. Una charla muy interesante también en la que, no de casualidad, lo nombre a Manuel Quiñones (ya que también es animador y, ¡un groso!) [3] . Desde ese entonces, me quedó un gusto amargo en la boca. Algo que me decía que tenía que hacer que estos dos tipos se junten, así que, cuando terminó el curso y estábamos un poco más libre, les mandé un mail a ambos para conectarlos. En ese mail salió juntarnos los tres a tomarnos una cerveza y ver qué pasa...

Esa noche conocí a tres admiradores de tres personas. En el momento que me quedaba solo con manuq, él me decía: "Che, qué groso este Jaimo" y al rato, cuando manuq se hacía a un lado, Jaimo me decía: "Increíble lo que hizo este tipo". Yo también, en cada momento que podía intentaba hacerles saber que ambos eran unos groso para mí...

Entre cervezas, hablamos de programación, de animación, de educación, de cómo mezclar la programación con la educación y la animación, ¿qué herramientas hay para los chicos y porqué es importante que aprendan a programar y dibujar?: a expresarse. ¿Qué quiere decir ser animador y hacer una tira de humor gráfico en el diario? ¿Porqué es importante expresarse? ¿De qué están hablando las personas que hablan en los medios? ¿De qué estamos hablando nosotros mismos? ¿Cómo lo decimos? ¿Porqué nos autocensuramos? ¿A qué le tenemos miedo?...

Así, analizamos algunas tiras de humor gráfico que hoy están de moda y charlamos sobre qué dicen y a qué público están destinadas. ¿Porqué vende más hacer chistes sobre Facebook o WhatsApp que sobre políticos / realidad / sociedad?

Mientras nosotros estábamos hablando de estas cosas sentados en el bar Shine, en la vereda de San Martín y Colón, vemos que un colectivo doble piso aparece en la esquina (en una calle que es pleno centro) e intenta girar por Colón viniendo por San Martín. Como era de esperarse, el giro no le da pero ni de casualidad y, entre maniobra y maniobra se escucha:

Debería estar prohibido que estos colectivos circulen por acá.

Seguro que lo está, pero a nadie le importa.

Como el chofer no pudo resolver la situación, optó por subirse a la vereda para tener un mejor giro. En esa subida, tuvo que maniobrar varias veces para no pegarle al cartel del bar ni tampoco perder el espejo como así también zafar del auto que estaba estacionado a 45° en la vereda de enfrente. Así, como pudo, terminó de maniobrar y se fue. Nosotros... Seguimos con nuestra charla.

Entre pizzas, charlas y cervezas, manuq nos mostró un Software para programar gráficamente y hacer cosas locas con muy poco esfuerzo, solo conectado bloques con entradas y salidas predeterminadas. ¡MUY loco! ¿Cómo se llamaba?

Terminamos de comer y decidimos ir a dar una vuelta caminando. Dejamos algunos bultos y arrancamos para la zona del Rosedal por calle Alameda de la Federación. En el camino, pasaron y vimos varias cosas que me recordaron muchos aspectos que no me gustan de Paraná como ciudad. Algunos que son importantes (al menos para mí) y otros que soy conciente que son una boludez, aunque igualmente me molesten. Uno de los temas que recuerdo de esa caminata hasta llegar al Rosedal, fue el minado de reductores de velocidad en las doble líneas amarillas de algunas calles de la ciudad. Básicamente, pusieron unos semi-círculos de plástico amarillo a lo largo de varias calles de la ciudad para que no se pueda pasar a otro auto; de esa forma si tenés a uno adelante no lo podés pasarlo. Cada uno explicó sus motivos a favor y en contra hasta que llegamos al corazón del Rosedal donde nos encontramos con un tacho de basura, de esos comunitarios (que también ya había sido tema de conversación en la caminata). Pero este tenía dos particularidades interesantes. Primero, estaba en una zona que no es residencial, por lo que nadie tiraría la basura ahí. Segundo, estaba ubicado en el medio de una curva y... Tercero, arruina muchísimo la vista del llugar:

DSC_2773.thumbnail.jpg

Tacho de basura ubicado en la curva del parque Rosedal, Paraná

Hablamos mucho de esto. Tanto, que me sentí mal por un tiempo. Mi cabeza se llenó de recuerdos sobre muchas de las pésimas decisiones que se toman en Paraná y lo frustrado que me hacen sentir. Quizás exajero, pero es lo que me pasa en esos momentos.

Seguimos hablando de esto, del edificio del hotel Maran Suites que estaba en frente a nosotros y los problemas que se decía que tenía (estaba torcido y no servía) hace varios años. Jaimo nos contó la historia que él conoce y nos dió su opinión arquitectónica. Nosotros, éramos dos niños que asentaban con la cabeza cada uno de sus comentarios sin entender mucho del tema...

Emprendimos la vuelta caminando nuevamente por Alameda de la Federación, ahora en sentido contrario, ya volviendo para el Bar Shine dónde teníamos nuestros autos. De camino, nos encontramos con la Escuela Centenario -una escuela muy importante de Paraná- y vemos que está muy pintadita y que además había un cana merodeando por delante de esta. Recordamos también, que habíamos visto a otro cana en una de las calles que rodea a la escuela ya que estaba cortada. ¿Cortada? ¿Porqué?

A todo esto, nos llama la atención la cantidad de tubos que salían de una caja de chapa / metal y se introducían por la ventana de la escuela, que estaba muy bien iluminada (como para no notarlo, ¿no?). Esto nos impactó y nos preguntamos ¿qué será?, ¿porqué la escuela estaría recién pintada y con estos tubos?. Inmediatamente caímos en cuenta de que se trataba del lugar dónde se iba a realizar la Cumbre del Mercosur y que esos tentáculos eran para refrigerar el lugar. Así, entre pros y cons, nació:

DSC_2772.thumbnail.jpg

Escuela "Tentáculo" Centenario. Aclimatada para la Cumbre del Mercosur. ¡La estupidez humana en su máxima expresión!

Al llegar al Bar, como la charla estaba tan intensa, se generó una presión en ese momento en el que ninguno quería tomar la posta de ser el primero en emprender rumbo hacia su auto. Así fue como nos quedamos hablando en la esquina del Bar durante, al menos, una hora más. En ese tiempo, mientras hablábamos sobre "Nadie dice nada", "La autocensura", "No estamos hablando de lo que hay que hablar" y "Una publicidad de una radio de Paraná que tiene un Mimo como protagonista" escuchamos el ruido de un auto que venía a toda velocidad por San Martín y dobla -no sé a cuánto, ¿unos 60 o 70 Km/h quizás?, hace chillar las cubiertas, la cola le patina bastante y las cubiertas delanteras intentan traccionar durante unos segundos para zafar de pegarle al auto que seguía estacionado a 45° (ese mismo que casi se lleva el colectivo) y, afortunadamente logra errarle y seguir su rumbo con la música a todo lo que daba...

DSC_2774.thumbnail.jpg

Demente en dos ruedas

Así, entre la bronca, la impotencia, la estupidez humana, pregunto:

¿Cómo querés que quiera vivir acá? Sí, pasa en todos lados. Entiendo. Pero, ¿no te parece que hemos visto MUCHO en 2 horas que hace que estamos caminando? Bueno, al menos, me gustaría reducir un poco todo esto mientras pueda.

Miro a mi alrededor. En el bar había unas cuantas personas. Nadie dijo nada. Nosotros... No dijimos nada. El dueño del bar... No dijo nada. ¿Alguien dice algo?

¡Boludo, somos mimos! ¿Cómo la radio no va a tener un mimo de protagonista? No se nos están riendo en la cara, nos están poniendo un espejo enfrente. ¡Somos unos putos mimos! Todos vemos todo y nadie dice nada.

Tip

Como no tenía cámara de fotos a mano y quería expresar de alguna forma gráfica lo que ví en ese momento, me tomé el trabajo de hacer mi mejor intento y representarlo con un dibujo hecho a mano con una fibra roja.

En partes, también, es para mostrarle a Jaimo lo pésimo que soy dibujando :)

[1]Incierto: http://vimeo.com/69433594
[2]Masaltov: http://vimeo.com/7688348
[3]Viaje a la tierra del Quebracho: https://www.youtube.com/watch?v=EJwEljkr25w

Juanjo Conti: Última reunion de RubyLit del 2014

   Publicado:

Anoche fue la última reunión/juntada/meetup del grupo local de usuarios del lenguaje de programación Ruby. Hubo asado y pileta. También una charla a cargo de Eloy (que estaría bueno postee en algún lado así no queda solo en nuestro recuerdo).

A continuación, las fotos de rigor. Como el que toca nunca baila, el que saca fotos no es retratado (al menos que usemos el modo automático).

IMG_3292 IMG_3294 IMG_3297 IMG_3303 IMG_3304 IMG_3305 IMG_3302 IMG_3293 IMG_3306 IMG_3307 IMG_3309 IMG_3310 IMG_3312 IMG_3313 IMG_3316 IMG_3317 IMG_3318 IMG_3319 IMG_3321 IMG_3328 IMG_3333 IMG_3334 IMG_3338 IMG_3339 IMG_3300 IMG_3298 IMG_3324 IMG_3326 IMG_3335

Marcelo Fernández: Fedora Day Buenos Aires 2014

   Publicado:

La comunidad Fedora Argentina se complace en anunciar el evento más importante de Fedora en el país hasta el momento:

¡El Sábado 13 de Diciembre los esperamos en la UTN de Medrano 951, CABA, para celebrar el Fedora Day!

Será un día con charlas de varios ponentes de Argentina y Latinoamérica, donde se hablará del futuro de la distribución y de varias tecnologías como Ovirt, Docker, Openshift, etc. También estaremos celebrando el Release Party de la nueva versión de Fedora, Fedora 21, ¡con la posibilidad de instalarlo en sus computadoras o en un pendrive para llevarlo!

Si desean participar en el evento no duden en registrarse de forma gratuita en el siguiente link [1].

También iremos actualizando la información del Fedora Day en la página oficial [2] y en la wiki de Fedora [3].

Si estás interesado en dar una charla sobre “inserte tema aquí” relacionado con Fedora no dudes en registrarte en nuestra lista de correos [4] y enviarnos tu propuesta.

En Fedora es muy importante para nosotros la comunidad y es por eso que estamos buscando nuevos colaboradores. Si estás interesado, no te pierdas nuestras charlas al respecto o acercate a cualquier colaborador el día del evento.

Ante cualquier duda o consulta por favor contactate con Matías <delete@fedoraproject.org> o con Rino <villadalmine@fedoraproject.org>

¡¡¡Los esperamos!!!

Saludos,
Fedora Argentina

1. http://goo.gl/zYsClS
2. http://fedoraday.com
3. https://fedoraproject.org/wiki/Fedora_Day_Buenos_Aires_2014
4. https://lists.fedoraproject.org/mailman/listinfo/argentina

Facundo Batista: Logging levels

   Publicado:


Cuando empecé con el concepto de loguear, me parecía demasiado tener niveles. Con el tiempo y la experiencia me di cuenta que son imprescindibles, :)

En la biblioteca estándar de Python hay un módulo logging que trae varios niveles prefijados. Son estos, con una pequeña anotación de cómo los uso, más un ejemplo de la vida real (tomados de mi programa de Encuentro o de fades).

- CRITICAL: creo que nunca lo usé :)

- ERROR: problemas de todo tipo; cosas que no deberían pasar, y si pasan son un inconveniente; muchas veces el programa no continúa, o continua de forma parcial o limitada, luego de este tipo de linea logueada. En este ejemplo logueo que no se pudo bajar la lista de los backends durante una actualización (también en este caso se le avisa al usuario mediante una ventanita, y el programa sigue, aunque la actualización no se concretó):

    try:
        _, backends_file = yield utils.download(BACKENDS_URL)
    except Exception, e:
        logger.error("Problem when downloading backends: %s", e)
        tell_user("Hubo un PROBLEMA al bajar la lista de backends:", e)
        return

- WARNING: para indicar que sucedió algo que en general no debería pasar; en general no son cosas malas, sino más bien anómalas, y no presentan una situación problemática. En el siguiente ejemplo estoy dejando registro que ignoro la opción 'quiet' que pasó el usuario (porque también pasó la opción 'verbose', que es más importante):

    if verbose and quiet:
        l.warning("Overriding 'quiet' option ('verbose' also requested)")

- INFO: información general del funcionamiento del programa, cosas que son imprescindibles saber y que siempre queremos que sean registradas; en general no involucran gran cantidad de lineas, pero permite seguir el flujo de ejecución del programa desde un nivel alto. Normalmente los programas que se entregan a los usuarios o corren en los servidores están configurados para realmente mandar a disco desde este nivel. En las siguientes dos lineas muestro lo primero que loguea Encuentro al arrancar: con qué versión de Python está siendo ejecutado y qué versión de sí mismo es:

    log.info("Running Python %s on %r", sys.version_info, sys.platform)
    log.info("Encuentro version: %r", version)

- DEBUG: toda la información necesaria para analizar en detalle la ejecución del programa. Puede involucrar grandes cantidades de información, y hasta ser un problema con respecto al uso de disco o afectar la performance, pero en general no se corren los programas en este nivel, sólo durante el desarrollo o en casos de tratar de analizar un problema específico. No es raro, por ejemplo, pedirle al usuario que ejecute el programa con un parámetro especial que configura los logs en este nivel y que trate de reproducir el problema que tuvo, para luego hacer un análisis forense de la situación. En el siguiente ejemplo estoy dejando constancia que fades tuvo que instalar pip a mano en el virtualenv:

    logger.debug("Installing PIP manually in the virtualenv")

Me ha pasado en sistemas muy complejos de necesitar un nivel más abajo que DEBUG para loguear toda aquella información que podría llegar a ser útil para un análisis del comportamiento del programa, pero que normalmente sería un exceso de datos (lo cual complica desde la lectura de los registros hasta el mismo manejo de los archivos). Entonces, usábamos un nivel TRACE, que casi nunca se prendía, para este propósito.

La macana es que el módulo de logging no tiene un nivel TRACE, pero lo creábamos a mano:

    TRACE = 5
    logging.addLevelName('TRACE', TRACE)

Fíjense el 5 ese: es que DEBUG es 10, entonces queda "más abajo". Claro, para que funcione todo, teníamos que usar un Logger custom:

    class Logger(logging.Logger):
        """Logger that support our custom levels."""

        def trace(self, msg, *args, **kwargs):
            """log at TRACE level"""
            if self.isEnabledFor(TRACE):
                self._log(TRACE, msg, args, **kwargs)

Para más información sobre la infrastructura de logging de Python y consejos generales sobre qué, cómo, o cuándo dejar registro de lo que sucede, pueden ver mi charla sobre el tema (estos sons los slides, y en algún momento se publicará acá el video de esta misma charla que dí en la PyCon de Rafaela).

Manuel Kaufmann (Humitos): Parte de la historia

   Publicado:

En el 2008 conocí un proyecto llamado One Laptop Per Child que me llamó mucho la atención y, además de parecerme una locura, me pareció genial.

Le dediqué un buen tiempo a conocerlo, a estudiarlo y a probar algunas cosas. Incluso, hicimos un juego en Python que luego lo portamos a OLPC.

DSCF1971.thumbnail.JPG

Máquina de escribir al lado de una OLPC

En 2012, gracias a manuq empecé a trabajar formalmente en OLPC. Sí, como si fuese un trabajo normal pero no parecía un trabajo. Era demasiado bueno para llamarlo así.

En 2014, caminando por Salto, Uruguay con Johanna visitamos el Museo del hombre y la tecnología y nos encontramos con una máquina de escribir al lado de una OLPC en la sección Educación. ¡Terrible emoción! Lagrimié un poco.

DSCF1976.thumbnail.JPG

Emocionado sosteniendo el manual de uso de la OLPC

¡Gracias a Manuel Quiñones, a Gonzalo Odiard y a Martín Langhoff por acercarme seriamente al proyecto, acompañarme y guiarme!

Juan Bautista Cabral: Implementación de un sistema de cómputo Map-Reduce sobre AMQP

   Publicado:

Para el cierre de la materia de de “Aprendizaje automático sobre grandes volúmenes de datos“, se me ocurrio que seria interesante la creación de una infraestructura “a la hadoop” en puro Python y sobre AMQP. Bueno hice eso y el resultado lo pueden ver acá: http://poopy.jbcabral.org

Además del código presente un informe de como encare el proyecto que esta disponible acá: https://bytebucket.org/leliel12/bigdata_famaf/raw/tip/poopy/build/latex/poopy.pdf

Creo que el informe es bastante ideal para el que quiera entender AMQP o los conceptos muy básicos de Hadoop desde AMQP


Share