Canonical Voices

What Bitácora de Vuelo talks about

facundo

Migrando Encuentro a PyQt


Este no es un post sobre Encuentro precisamente, sino sobre la experiencia de migrar Encuentro a Qt.

O, mejor dicho, a PyQt. ¿Qué es PyQt? Sencillo: una capa de unión para poder usar Qt desde Python. ¿Y qué es Qt? Qt es una biblioteca multiplataforma para desarrollar aplicaciones con interfaz gráfica. En otras palabras, una biblioteca para hacer las ventanas, botones, y todo eso que arma la interfaz gráfica de un programa de escritorio.

Con esa descripciones no tendríamos diferencia entre PyQt/Qt y PyGtk/Gtk, que es lo que usaba Encuentro hasta ahora. Entonces, ¿por qué migrar?

Son varias las razones... pero principalmente porque empaquetar PyGtk en un .exe es un dolor de muelas, y eso llevó a que la última versión que corre en windows es la que no funciona porque cambió todo el backend web (cuando los videos pasaron de ser hosteados por Encuentro a estar en Conectate). En otras palabras: la última versión de Encuentro que corre en windows no sirve para nada, y básicamente es culpa de Gtk.

Otras razón de menor importancia es que no me gustó como Gtk evoluciona. El futuro del framework es Gtk3, y ya estuve tirando código para usarlo, y lo que usé me gustó menos que Gtk2, así que me pareció un buen momento de cambiar. Finalmente, es una buena excusa para aprender Qt, ;)

Qt

En fin. La migración ya está terminada, pude hacer en Qt todo lo que tenía que hacer en función de la interfaz de Encuentro. ¿Qué me pareció? Bueno, las sensaciones son varias.

Me gustó Qt, mucho más cuadradito, más pytónico especialmente en la versión 4 que es la que yo estoy usando. Aunque la mayoría del código es muy similar, hay varias cosas que son más sencillas que en Gtk, aunque no todas, y hay bordes que limar.

(En este punto quiero aclarar que en ningún punto usé Qt Creator, el constructor gráfico de interfaces, sino que hice todo todo a mano, lo cual me permitió meterme bien adentro del framework y aprender mucho de su estructura subyacente.)

Un ejemplo de borde sencillo: no se puede saber si una señal está conectada o no. Entonces, por ejemplo, yo tengo un botón que muta de función, y a veces tiene que tener una señal conectada, y a veces otra (para que al hacer click haga una cosa u otra; en particular en el contexto de Encuentro: que el botón dispare la descarga del episodio, o la reproducción). Cuando el contexto cambia y se hace la revisión del estado del botón, no puedo decirle que desconecte cualquier señal que tenga, o preguntar qué señal tiene y desconectarla, tengo que (a mano) guardar en algún lado la señal que había conectado antes para desconectarla y conectar la nueva que corresponda.

Un ejemplo de algo complicado de hacer en Qt (que en Gtk es trivial): QTreeWidget no soporta HTML en el texto. Esto es, la habilidad de insertar tags para cambiar el tipo de texto (en el caso de Encuentro, yo lo necesito para resaltar en amarillo el fondo de las letras que coinciden con lo que el usuario ingresó en el campo de filtrar). Finalmente lo pude hacer, adaptando un ejemplo que Roberto Alsina encontró en la web, pero lo hace más lento, le agrega pequeños glitches que aunque no me joden, no deberían estar, y me mete a mí código oscurísimo que no es ni cerca de fácil de debuguear.

Por último, la integración con Twisted no es trivial. Hay cosas que en Encuentro están hechas con Twisted que podrían hacerse con herramientas más propias de Qt, sí, pero en este caso de migración, ya estaban hechas en Twisted y mi idea era aprovecharlas. Pero tuve que meter en el proyecto todo un módulo de integración y levantar la aplicación y cerrarla de una manera no trivial (y que me costó tiempo y sudor hacer que funcione correctamente, especialmente la parte de cerrar la aplicación, porque tuve que apagar los hilos de Twisted a mano).

La conclusión es que Qt me gustó bastante, y aunque extraño algunas cositas de Gtk, seguramente mis nuevos proyectos estarán usando PyQt.

Read more
facundo

¡Hola Malena!


La fecha original (esa que se calcula desde el principio del embarazo) para el nacimiento de Malena era por alrededor del veintipocos de Abril.

Más entrados en los meses del embarazo, y ya viendo que iba a cesárea por el tamaño que venía Male y el historial de alta presión de Moni, se fijo la fecha para el 5 de Abril.

Sin embargo, llegando a fin de Marzo, al ver que todo venía muy bien, decidimos pasar esa fecha una semanita más. Que sea el 12.

Este martes pasado, 9 de abril, Moni fue a un control y tenía alta presión, y le dijeron "te quedás". Yo cerré (operativamente) mil cosas de emergencia, y salí corriendo.

A las 18:51 nació Malena (por cesárea), pesando 3766g (150g más que Felipe) y midiendo 50cm (dos cm más larga que el hermano).

Malena

Yo estuve en el parto, como la otra vez, y fue todo más o menos igual, desde mi punto de vista. Todos los partos son distintos, sin embargo, para la madre.

Sí, también era una cesárea, pero era la segunda. Y los dolores son diferentes, las cositas que pasan son distintas, etc. Moni estuvo el primer día con mucho dolor y con un pico de alta presión por ese motivo, pero luego de alguna intervención especializada, todo volvió a su correcto cauce.

Male se prendió bastante bien a la teta (lo cual fueron excelentes noticias luego del baile que tuvimos con Felu por tener succión aplanada), y aunque las primeras 36h estuvo muy molesta por cólicos, se la nota algo pancha :)

Hablando de Felu... él se quedó con mi vieja estos días, y el primer día lo trajeron a que la conozca. Aunque siempre tuvo muy buena relación con "la panza", estábamos curiosos de cómo iba a resultar el "primer encuentro".

La verdad, estuvo genial. Entró preguntando por Male, y aunque paró un segundo para darle a la madre un ramo de rosas que le habían comprado, su atención fue para la hermana. Se sentó en la cama y la miraaaba, :).

Ya es hermano mayor :D

Y la tocaba, medio bruto porque obviamente todavía no sabe tocar a un bebé, pero la acariciaba y le hacía mimos. Y preguntaba... ¿por qué llora? ¿por qué abre y cierra los ojos? ¿por qué hace tal ruido? etc. O directamente daba órdenes: "mamá, dale la teta a Male que llora".

Lo importante es que estuvo muy cariñoso, nada celoso (vamos a ver cómo evoluciona esto cuando la vea "ocupar espacios" en casa), y se portó bien todo el tiempo. Incluso en el momento de irse, que se fue con sus abuelos sin problema (nosotros teníamos la preocupación de si iba a querer irse "sin Moni").

Volviendo a Male y estos días en la clínica... por suerte los grandes dolores del primer día pasaron rápido, el miércoles estuvo mucho mejor, y hoy jueves la verdad es que estuvimos bastante tranquilos, incluso con algunas visitas.

Male y Moni

Nos queda mañana viernes, y suponemos que el sábado a la mañana estaremos yendo a casa. Moni y Male están muy bien, así que mañana recibiremos más visitas y nos prepararemos para el gran segundo cambio en la dinámica de familia, estar los cuatro en casa :D

Read more
facundo

Linux Containers


A nivel de máquinas virtuales de uso genérico (por lo tanto descartando ScummVM o cosas similares) siempre me manejé con VirtualBox. Aunque ahora es de Oracle y no lo miro con buenos ojos, siempre funcionó bastante bien (sin pedirles cosas demasiado locas) y es una buena manera de tener un Windor corriendo aunque uno esté todo el día en Linux (por ejemplo, para poder hacer facturas en la AFIP, la puta que los parió).

Incluso, cuando laburaba en Ericsson, que me obligaban a usar Windor, tenía un VMWare con un Ubuntu instalado (un Gutsy, o un Hardy, creo... cuanta agua bajo el puente!) que me servía para cuando tenía que hacer cosas serias a nivel de red, o para el caso cualquier cosa divertida.

Pero nunca había encontrado una forma piola de tener máquinas virtuales de Linux bajo Linux. Y con "piola" me refiero a que funcione bien y que sea relativamente fácil de armar.

Y acá entra LXC.

Linux container

Aunque LXC no es propiamente dicho una "máquina virtual" (es más bien un "entorno virtual"), igual permite la ejecución de un linux que no se mezcla a nivel de configuraciones ni de paquetes instalados ni de lo que uno puede romper del sistema con la máquina que uno tiene.

¿Para qué se puede usar? En mi caso lo uso mucho en el laburo, ya que mi máquina de desarrollo es un Ubuntu Quantal, pero los sistemas que corren en los servers son bajo Precise o Lucid (entonces tengo un container para cada uno). Y también los tengo pensado usar para probar instalaciones desde cero (por ejemplo, al armar un .deb por primera vez, probar de instalarlo en una máquina limpia).

¿Cómo se arma y usa un contenedor? Luego de instalar los paquetes necesarios (sudo apt-get install lxc libvirt-bin), la creación de un contenedor es bastaaaaante simple (de acá en adelante reemplazar en todos lados el "mi-lxc" por el nombre que ustedes quieran para el contenedor):

    sudo lxc-create -t ubuntu -n mi-lxc -- -r precise -a i386 -b $USER

Desmenucemos. El -t es el template a tomar, y el -n es para el nombre que le vamos a dar. A partir de ahí vemos un "--", lo que significa que el resto son opciones para el template propiamente dicho. En este caso, que use el release Precise, la arquitectura i386, y mi mismo usuario.

Lo maravilloso de esto es que el container, adentro, tiene mi usuario, porque el home es compartido! Y con esto todas las configuraciones de bash, vim, ssh, gnupg, etc, con lo cual "hacer cosas" adentro del lxc es directo, no hay que configurar todo (pero, al mismo tiempo, podemos "romper" el home desde adentro del container, ojo al piojo).

Para arrancar el container podemos hacer

    sudo lxc-start -n mi-lxc

Y esto nos va a dejar con el prompt listo para loguear, y acá alcanza con usar los propios usuario y password. Una vez adentro, usamos el container como si fuera una máquina nuevita.

Todo muy lindo, pero igual me gustan hacerle algunas configuraciones que hacen el uso aún más directo y sencillo. Y estas configuraciones, a nivel de sistema, son basicamente para que podamos entrar al container más fácil, y usar desde adentro aplicaciones gráficas.

Para entrar más fácil, tenemos que tener Avahi configurado. Más allá de instalarlo (sudo apt-get update; sudo apt-get install avahi-daemon), hay un detalle a toquetear.  Adentro del lxc, abrir el archivo /etc/avahi/avahi-daemon.conf y aumentar bastante el rlimit-nproc (por ejemplo, de 3 a 300).

Con esto ya estamos listos para entrar fácil al container. Lo podemos probar en otra terminal; hacer:

    ssh mi-lxc.local

Lindo, ¿no?. Pero también está bueno poder forwardear los eventos de X, así podemos levantar aplicaciones gráficas. Para eso tenemos que tocar lo siguiente en el host (o sea, no en el container sino en la máquina "real"): editar /var/lib/lxc/mi-lxc/fstab y agregarle la linea:

    /tmp/.X11-unix tmp/.X11-unix none bind

En el container, tenemos que estar seguros que /tmp/.X11-unix exista, y reiniciarlo luego de estas configuraciones.

También necesitamos setear DISPLAY. Esto yo lo mezclé en el .bashrc, poniendo algo también para que cuando entro por ssh me cambie el color del prompt (incluso, poniendo distintos colores a distintos containers). Lo que estoy usando es:

    if [ `hostname` = "mi-lxc" ]; then
        export PS1='\[\e[1;34m\]\u@\h:\w${text}$\[\e[m\] ';
        export DISPLAY=:0
    fi

Para terminar, entonces, les dejo los tres comandos que más uso en el día a día con los containers, más allá de la instalación en sí: levantar el container (fíjense el -d, que lo levanta como un demonio, total nos conectamos por ssh); conectarnos (fíjense el -A, para que forwardee la conexión del agente de autenticación); y finalmente apagar el container:

    sudo lxc-start -n mi-lxc -d
    ssh -A mi-lxc.local
    sudo lxc-stop -n mi-lxc

Que lo disfruten.

Read more
facundo

Palabras que sustentan


Me encantó este pedacito de la editorial de Eduardo Aliverti para su programa Marca de Radio (que pueden escuchar ahí en la web, o leer acá en Página 12, se las recomiendo).

Ojo que, como él mismo dice, estas palabras son de Julio Rudman....

Dice un poco antes haber recordado que los nombres son sustantivos; es decir, palabras que sustentan. Y dice un poco después que pensó en Evita, el Che, Fidel, Cristina, Evo, Rafael, Lula, Dilma, Hugo o Comandante, Pepe, Néstor. (...) Nadie nombra al presidente Sebastián o Juan Manuel. "¿Alguien recordará al presidente Fernando, o Arturo, o Eduardo, o (...)"? Imposible frenarse y no agregar si la historia nombrará a Mauricio, o a George, o a Mariano, o a Angela, o a Silvio. "La cuestión –termina Rudman– es que estos pueblos del sur del sur han hecho propios los nombres propios de sus dirigentes; los han comunizado (...)."

Read more
facundo


Finalmente terminé de armar todo para liberar al mundo la versión traducida al español del tutorial de Python 3.

Realmente había terminado de traducirlo hace un par de semanas. Pero (aunque la generación del HTML fue bastante directo), generar el PDF me trajo bastante problemas.

Por un lado, el PDF generado por inkscape para los headers bonitos que tenemos es incorrecto en algunos detalles, así que tuve que meter un hack en el proyecto pdfrw para evitar que explote con ese problema. Luego habían problemas con páginas en blanco al final de capítulos que tuvieran footnotes, así que metí un workaround en rst2pdf para que reportlab no la cague al generar el PDF. Y dos o tres detalles más, pero menores (gracias Roberto Alsina por toda la ayuda en este bardo). Todos los parches (para poder reproducir la generación de algo copado) están en el README del proyecto.

También tuve que renovar el cómo presentábamos el tutorial, porque ahora tenemos el mismo para las versiones 2 y 3 de Python. Entonces ahora puse que la URL principal del tutorial apunte a un HTML muy bonito (gracias Rodrigo Bistolfi) que te deja elegir si querés ir qué versión del tutorial, tanto en Python 2 o 3, como en su formato: HTML o PDF. También reformulé la página del tutorial dentro del sitio de PyAr.

En fin. Disfruten y pásenlo.

Read more
facundo

El árbol fluorescente


En otra edición de "cosas que hice hace tiempo y me resultaron útiles ahora", les presento un proyecto que nació hace cinco años y medio de una charla de PyAr.

Como explico en este post, para jugar un rato con un amigo hice un árbol Trie, que luego de algunas optimizaciones degeneró en algo que llamé "Fucked Trie".

Este árbol para guardar palabras y buscarlas por prefijo de forma muy muy rápida resultó ser lo que necesitaba en el laburo un par de semanas atrás, pero con un cambio: ahora cada palabra tenía que guardar cierta metadata (que luego se obtendría al buscar).

Entonces, agarré el código original, lo modifiqué un poco, y armé este proyecto nuevo que se llama Fluorescent Trie (porque Fucked quedaba muy fuerte para un proyecto, vissste).

Fluorescent trie

Características de este árbol:

- Está pensando para mantenerlo en memoria: ocupa poco, y carga rápido

- Las búsquedas son por prefijo: O sea, entrando con "foo" encuentra "foo" y todo lo que empieza por "foo". No encuentra "grafoo".

- Las búsquedas son extremadamente rápidas (en el orden de los 10-4 segundos).

- Cada palabra tiene un payload que puede ser cualquier cosa.

Si lo necesitan para algo, aprovechen.

Read more
facundo

A la caza de la laptop perdida


Hace un año y medio que me quiero comprar una laptop nueva. No es que la necesite, pero la empresa ya me dió la plata para renovarla y debería hacerlo.

Hace un año y medio más o menos que también entró en vigencia toda esa loca restricción para las importaciones.  Ojo, no es que no se importen laptops, se importan y muchas. Pero son para el mercado masivo, y las características de máquina que yo quiero/necesito para trabajar no son las más comunes.

En fin. Estuve largo tiempo buscando qué máquina comprar acá, en Argentina. No encontré. Tomé la decisión de comprarla en USA, aunque los putos no me venden con teclado latinoamericano (ya los vamos a terminar de conquistar, falta poco).

Y el teclado es una de las características que más me importan de la máquina (sí, ya sé, muchos no pueden entender esto, pero gustos son gustos, y comentarios acerca de esto lo dejan en /dev/null que después veo).

Es más: a pesar del teclado y todo, casi compro la máquina afuera: una Lenovo; pero a Lenovo no le gustaba mi tarjeta (putos!), y cuando me prestaron una tarjeta no les gustó a dónde la quería mandar (putos ** 2!).

Obviamente, hay mil opciones más que Lenovo, pero en el sitio de este fabricante me dejaban elegir los componentes, y en otros lados no. Además, yo sabía que el teclado y la pantalla de la Lenovo estaban bien (que son las principales formas de interacción con la máquina). En fin, no iba a comprar una máquina "más o menos" en ebay o newegg, porque en general estás comprando algo que no sabés exactamente qué, y no las podés ver/tocar antes.

Decidí mandar a cagar a Lenovo, y cualquier compra en USA. Me sugirieron Uruguay, o Chile. Chile está lejos, pero si la podía comprar en Uruguay, es un paseo ir a buscarla. Llamé a una casa de computación que me recomendaron, charlé largo rato, mandé mail... y nunca me contestaron. Ok, cero onda. El que sigue.

Por otros temas, terminé yendo un par de veces a Garbarino y Frávega. Y estuve revisando las notebooks que tenían, y habían un par que no estaban nada mal, que me gustaba la pantalla, teclado, en general estaban bastante bien, sólo cortas de memoria. Y comentando esto a un amigo, me animó a ir a Galería Jardín para ver si se conseguían esas máquinas con más memoria.

Hace una semana fui finalmente a Galería Jardín, y estuve paseando tipo hora y media. Entré a alrededor de unos quince locales a preguntar por la máquina que quería, y el punto en común que encontré fue lo gracioso de las caras de las personas que me atendían.

Es que ponían muy buena cara cuando entraba al negocio, yo les decía que estaba buscando una laptop, y sonreían muy amistosamente. Entonces les tiraba la primera: "Quiero 8 GB de RAM". En ese punto, se les notaba que revisaban mentalmente las máquinas disponibles, buscaban en su memoria, perdían un poco la sonrisa... en fin, descartaban gran parte de la oferta que tenían.

Ahí, les tiraba la segunda: "Quieron una pantalla de entre 12 y 13.5 pulgadas". Ahí la sonrisa volvía, pero una sonrisa nerviosa, evidenciando que la oferta se caía a casi nada. Y muestra de esto, es que ya se empezaban a mover para ir a la computadora o papeles para encontrar lo que coincidiría con mis dos pedidos.

Y ahí nomás, antes de que empiecen a buscar, les tiraba la tercera: "Y quiero teclado latinoamericano". Ahí ya los polarizaba en dos respuestas. En el 80% de los casos, me decían "no, ahí me terminaste de matar, no tengo nada". En pocas ocasiones, por otro lado, me decían "teclado español", yo les decía "no, latinoamericano", y me contestaban "es lo mismo". Ahí yo ya les ponía cara de "flaco, ponete una verdulería", les decía con tono triste "no, no es lo mismo", y me iba.

Pero a veces me ofrecían algo. Y ese algo fue en dos o tres ocasiones la Samsung Ultrabook, un par de veces la Asus Zenbook, una Sony, y una Dell.

La Sony no me gustaba estéticamente (y para sus características, un poco cara). La Dell era una Latitude muy ladrillo, pero buenas prestaciones (especialmente a nivel batería), pero salía $13500; descartada. Y la Asus también salía como 11 o 12 lucas, las razones del precio que me indicaban era porque tenía un disco SSD, mientras que (me decían) la Samsung Ultrabook no tiene un disco separado SSD, sino un "caché de 24GB".

La última escala del paseo la hice por un local de Samsung muy muy cheto, en el cual mostraban dos ultrabooks, una serie 5 y una serie 9. Ahí también me indicaron que la serie 5 "es más barata porque no tiene disco SSD sino un cache", y que la serie 9 también está 11 o 12 mil pesos porque tiene el disco SSD separado, además de otros detalles.

En fin. No quería gastar tanta plata, así que me decidí por la Samsung Ultrabook NP530U3C-A01AR.

Samsung Ultrabook

Como la gran mayoría, viene con 4GB de RAM, pero en el local me la subían a 8GB. Precio final (IVA incluído): $7000 (en Previus).

La compré este último viernes, pero como tenía otras cosas que hacer luego, recién la probé el sábado a la mañana. Ya había visto que para que el BIOS reconozca el pendrive con el instalador de Ubuntu había que toquetear algunas cosas. Yo lo primero que hice fue meterme en el BIOS, sí, pero para curiosear. Realmente no tuve que cambiar nada más que el orden de booteo (que tenía primero al rígido).

Así que sin haber booteado nunca en el windor (por cábala, viste) me puse a instalar el Ubuntu. Le dije al instalador que quería customizar las particiones, y ahí vi que realmente la máquina tiene DOS discos, uno "clásico" (de esos que tienen platitos magnéticos que giran, un HDD), y otro de silicio (o sea, los denominados SSD).

Dudé qué instalar dónde, busqué un poco y esto que encontré me pareció bien. Basicamente: "/" en el SSD entero, y en el disco de platos un swap de 6GB, "/var" con 20GB, y el resto para "/home".

Particionado durante la instalación

Si miran con cuidado van a ver que le pifié a las cantidades: puse los valores en MB en lugar de GB... por suerte el particionador se avivó y me dijo que necesitaba más espacio en "/var" que lo que estaba poniendo, así que me di cuenta del error y lo corregí.

El único detalle que hay que tener cuidado (que yo le pifié) es que el disco marcado como boot tiene que ser el HDD (aunque barra esté en el SSD), porque el BIOS sólo bootea del primero. Nada importante.

En fin, luego de instalar un rato, y que baje las actualizaciones y eso, ya tenía mi notebook nueva con Ubuntu Quantal.

Contento con la renovación, :)

Read more
facundo

Películas, arrancamos 2013


Varias películas vistas en esta etapa (incluyendo algunos clásicos que no estaban anotados acá, como Back to the future), pero la cantidad de nuevas que aparecieron que pintan interesante son más...

  • Don't be afraid of the dark: +1. Muy bien hecha, y el tema es interesante. Cada vez me gusta más Guillermo del Toro como director...
  • Edge of Darkness: +0. Un poco flojo el tema, pero bien llevada la trama. El personaje es interesante y todo, a pesar de Mel Gibson.
  • Extraordinary measures: +1. Muy buen tema de la película, muy buen laburo de Ford y Fraser la zafa. Igual, acá lo que vale es la historia, y está muy bien.
  • In my sleep: -0. Buena historia, aunque podría ser más profunda en detalles, pero muy malas actuaciones.
  • Leaves of grass: -0. Parte de la historia está buena, pero no llega realmente a construir nada potable, como que son varias potenciales historias que no se llegan a tratar realmente.
  • Los abrazos rotos: +0. Nada del otro mundo, pero es una historia entretenida, dinámica, y bien contada.
  • Love and other drugs: +1. Muy interesante la historia, me esperaba una peli pasatista pero es bien profunda, aunque no aburre ni es dramática al pedo.
  • Machete: +0. Muy bizarra, típica película de Robert Rodriguez, con todo el coctel: mexicanos, armas, sangre, y chicas lindas. A mí me gustó, pero si no te gustan este tipo de películas, ni te acerques.
  • Predators: -0. Nada realmente nuevo.
  • Rango: +1. Muy divertida, y estoy seguro que si conocés de películas "del oeste" vas a encontrar mil referencias a las mismas (pero gusta más allá de que las conozcas o no).
  • Splice: +1. Me sorprendió, no esperaba que esté tan buena. Estuve todo el tiempo esperando golpes bajos que no venían, y se sucedían giros inesperados super interesantes. No apta para "conceptualmente impresionables".
  • The ghost writer: -0. La historia está bien, pero todo muy predecible. Y las actuaciones hasta ahí.
  • The hobbit: An Unexpected Journey: +1. Obviamente conocía la historia, pero me gustó mucho cómo está contada.
  • The switch: -0. Tiene sus momentos interesantes, pero es una peli romántica medio pelo. No la salvaJeff Goldblum, y Jennifer Anniston cada vez la tengo más y más como indicadora de película mediocre.


Estas son las que anoté a futuro... hay de todo, viene bien variadito el asunto:

Read more
facundo

Launcherposta 0.9


Una nueva versión de este programa que es básicamente un ayudante para lanzar aplicaciones que uno lanza seguido (como poner launchers en el panel, pero como eso no existe más en Unity...).

La principal novedad es que ahora hay una manera muy fácil de buscar las aplicaciones instaladas en el sistema para agregarlas en el menú (en el diálogo de agregar una entrada, hay un botón que muestra todas las aplicaciones con sus iconos).

También muestra un mensaje de error (no sólo el código) cuando hay un error al ejecutar algo, ahora tiene una man page, y algún que otro detalle.

Supongo que esta es la última versión del programa, ya que tiene toda la funcionalidad que buscaba y no hay ningún bug abierto.

Más info, cómo descargarlo, etc., en la página del proyecto. Enjoy.

Read more
facundo

Pequeño paseo matinal


El domingo pasado fuimos a Plaza Francia a buscar alguna cosita puntual que no puedo develar, pero también servía de paseo de domingo con la familia.

Un bardo para estacionar, más que nada porque los carteles son confusos, pero llegamos, Felipe jugó un buen rato en un árbol que es increíble de grande, y paseamos por la feria un rato.

Moni y Felu en el árbol

Bueno, no paseamos tanto porque a los diez minutos de caminar encontramos el mismo puesto al que otros años le compramos cosas similares, estuvimos un rato ahí eligiendo, y nos volvimos.

Me gustan mucho estos paseitos, :)

Read more
facundo

CDPedia 0.8


Luego de bastante laburo las últimas semanas, estoy muy contento de anunciar (de mi parte y de Python Argentina) que está en la calle la versión 0.8 de CDPedia, un proyecto que permite acceder a la información de la Wikipedia en castellano sin necesidad de una conexión a Internet.  Se puede descargar libremente de la red y grabar a CDs, DVDs o memorias USB para repartirla sin restricciones.

La CDPedia funciona en cualquier computadora, ya sea que tenga Linux, MacOS o Windows como sistema operativo, y esta última versión incluye contenido de Wikipedia a Diciembre de 2012.

Para mayor información e instrucciones para la descarga, visitar la página del proyecto.

Logo


Esta versión trae las siguientes novedades:

  • Renovamos completamente la generación del ejecutable para Windows, se deberían tener muchísimos menos problemas para usar la CDPedia en ese entorno.
  • Al extraer las páginas de Wikipedia, se les hace un análisis para evitar los artículos vandalizados (en este caso, se baja una versión más antigua, pero correcta).
  • El servidor interno ahora es multiusuario, lo que simplifica enormemente instalar CDPedia en un servidor y que sea accedida desde distintos clientes.
  • Ahora se incluyen en los discos todas las páginas de las categorías, no sólo la primera.
  • Actualizamos el contenido a Diciembre 2012.
  • Varias mejoras a la hora de la generación de discos y tarballs, así como también en la calidad del código.

Si tenés discos disponibles, hacé algunas copias de CDPedia para regalar a tus familiares y amigos, a la biblioteca de tu barrio, o a la escuela de tus hijos. ¡Difundí CDPedia!

Read more
facundo

Videoclips


Les había comentado en otra oportunidad que estaba bajando automáticamente un montón de videoclips, por torrent.

A ese proceso siguió uno de buscar en You Tube también los videos según la música que tenía. Y cuando tuve todo en el disco, los fui viendo, eligiendo uno de entre tantos si tenía varias versiones para el mismo video, y también corrigiéndolos: sacando principios y finales cuando tenían ruidos raros o molestos, o cambiándoles el factor de forma si estaban estirados para arriba o a lo ancho.

Obviamente todo esto no fue un proceso rápido, y es por eso que me casi llevó un año, :p.

Para administrarlos prolijos, me hice un programita que me arma un reporte de todos los videos, indicando intérprete, tema, la duración, cuanto pesan, y el formato, más info de la parte de video y del audio.

Quedó lindo. Ahora a pasarlos al disco del WDTV y disfrutarlos en la tele...

Read more
facundo

Tratando de colaborar


Hace alguna semanas ví un tuit sobre la posibilidad de ayudar con la revista on line Hackers & Developers, un magazine digital de distribución mensual sobre Software Libre, Hacking y Programación.

La revista está interesante, y se nota que le ponen un montón de laburo atrás. Entonces, me pareció copado ayudar. Lamentablemente no tengo tiempo en ponerme a escribir artículos desde cero (habrán notado cuanto participé en otras iniciativas como PET, la revista de Python Argentina... más allá de algo puntual, no tuve tiempo tampoco de escribir nada nuevo).

Pero, hay algo que sí me da el tiempo y es revisar algún que otro artículo. O sea, agarrar un artículo de Python y asegurarme que esté (a nivel de Python, no de castellano) correcto.

Entones mandé un mail a la cuenta a la que uno se podía postular: "(...) Me gustaría ser *revisor* de cualquier artículo que tenga que ver con Python.".

Me contestaron que gracias por mi contacto, que "... estamos buscando profesionales que deseen incorporarse al Staff permanente de HDMagazine, como columnistas/redactores.  Si estás interesado en sumarte como redactor, por favor, no dudes en hacérnoslo saber."

O sea, no les gustó mi propuesta. Quise ser revisor, me dijeron que no, que estaban buscando otra cosa.

Todo bien.

Hoy me acordé de eso y tuiteé que me había postulado como revisor y me habían rechazado.

Me contestaron desde que la revista "no es un grupo de satisfacción de deseos personales" (publicamente) y hasta me trataron de mentiroso y malintencionado (en privado), lo cual más allá de que uno lo relativice, no deja de doler.

En fin. Mejor enfocar energías en quienes lo merecen.

Read more
facundo


Y digo que es un regalo para las fiestas porque esta versión trae algunas cosas interesantes.

Por un lado, ¡hay un nuevo backend! Cuando actualicen los contenidos van a ver que pueden descargar programas del Banco Audiovisual de Contenidos Universales Argentino (gracias Gonzalo!),

Por otro lado, rediseñamos la GUI en el último sprint. Ahora tenemos un sector a la derecha con la imagen del programa (gracias Diego!) y la descripción (más un botón de acción). Y también hay una cola de descargas, donde se muestra lo que se está descargando, lo que ya terminó (y cómo), y lo que está encolado para después.

Los programas terminados ahora se ponen de otro color, y son fáciles de filtrar porque hay un checkbox que hace que se muestren sólo esos.

También hay un mejor manejo de las cancelaciones, más logging, y otras pequeñas mejoras y correcciones.

Como siempre, las formas de instalarlo, toda la info, y etc, en la página del proyecto.
   
¡¡Feliz fin de año!!

Read more
facundo

Cortando mal


Una de las cosas que repito mucho en mi charla de Entendiendo Unicode es que "siempre, siempre, siempre, hay que procesar los textos estando en unicode, no en bytes, porque se pueden obtener resultados inesperados".

Acabo de encontrar un caso de estos. Lo interesante es que es un caso que no había visto nunca.

Estoy agregando a mi programa Encuentro un nuevo backend: BACUA. Bueno, ya casi está (gracias a la ayuda de Gonzalo Martinez), el tema es que había una página que tenía problemas de unicode. Me puse a investigar, y resulta que el problema es que se estaba decodificando con el encoding incorrecto.

Se intentaba decodificar con UTF-8, pero como fallaba, se decodificaba con otra cosa, y algunas palabras quedaban mal.

Empecé a ver en detalle, y resulta que la página está toda bien codificada en UTF-8, excepto una parte. La linea "molesta" es esta:

'          <h5 class="sinopsis_cat">Los Ludomatic, banda de m\xc3\xbasica infantil exitosa en los a\xc3\xb1os 80, se re\xc3\xbane luego de veinte a\xc3\xb1os para ver que sus vidas no son como lo hab\xc3\xadan imaginado tiempo atr\xc3\xa1s. Toni, Becca, Marco, Lupe y Ren\xc3 ...</h5><br/>\r\n'

Como pueden ver, está toda casi bien, en utf8... por ejemplo, dice "Los Ludomatic, banda de música", y ahí vemos que la "ú" está bien codificada en utf8 como 0xC3 0xBA. El problema está al final, en el último nombre. Seguramente debía decir "Toni, Becca, Marco, Lupe y René", pero está cortado (con el agregado de los tres puntos, para indicar continuación).

Y está cortado mal.

Obviamente, si los que generaron la página hubiesen procesado el texto como unicode, se hubiese cortado antes de la é o después de la é. Pero no, lo manejaron como bytes, donde la é codificada como utf8 es 0xC3 0xA9. Y por mala suerte el corte cayó en el medio de esos dos bytes. Y quedó el 0xC3 suelto, que no es utf8 válido.

Y bueno. Eso. Recuerden: Siempre hay que procesar los textos como Unicode.

Read more
facundo

Extrapolando la realidad


Con el tiempo me fui dando cuenta que disfruto muchísimo las historias de ciencia ficción donde el autor agarra algo ya de por sí interesante de la realidad, lo extrapola para otro lado, y le agrega una historia copada alrededor.

Esto hace que si yo ya conocía las bases reales de la historia, disfrute mucho la extrapolación y las posibilidades que se desprenden. Y si no las conocía, tuve contacto con las mismas y es una excusa para aprender.

Por ejemplo, tomemos algo interesante de la realidad sobre lo cual estaba leyendo el otro día: un teorema de incompletitud de Kurt Gödel que básicamente dice que en cualquier teoría siempre hay enunciados que no se pueden probar como verdaderos o falsos a partir de los axiomas de la misma teoría. O sea, no se puede demostrar toda la teoría, completamente, desde adentro.

Una extrapolación de esto (totalmente fuera de lo que dijo Gödel, ya entrando en terrenos propios de la ciencia ficción) es que viviendo dentro de un Universo no se puede llegar a conocer toda la física que explique el funcionamiento de ese Universo. Por ejemplo, los fantasmas, el alma, o lo que pasa adentro de un agujero negro: existen y funcionan con reglas físicas del Universo, pero estas reglas no son deducibles/encontrables a menos que al Universo se lo estudie de afuera.

A eso le agregamos toda una historia, posiblemente que involucre comunicación entre científicos entre dos Universos distintos (mediante mediums o interlocutores paranormales!), lo escribimos bonito e interesante, y tenemos un libro.

Y la parte complicada es esta última.

Ideas de historias copadas tiene cualquiera. Armar un buen libro, interesante y lindo de leer, es otro tema.

Read more
facundo

Charlas repetidas


Les comentaba en un post anterior que había vuelto a dar "Entendiendo Unicode" en las PyCones de Argentina y Venezuela. Charlando con alguien más de este tema, le decía que seguramente era la charla que más veces dí.

Bueno, no, este es el top 5 de todas las charlas que dí:

   13  Introducción a Python
   10  Entendiendo Unicode
    8  Python más rápido que C
    4  Python 3000
    3  Comunidad, anarquía y subversión

Se acumulan las repeticiones.

Y es algo natural, teniendo en cuenta que por año preparo casi siempre una charla nueva pero presento entre media docena y una docena de veces...

Read more
facundo

Películas, catching up


Al fin una buena temporada donde vi muchas pelis...

  • A Nightmare on Elm Street: -0. Dentro de todo zafa, pero no tiene vueltas la historia, y es todo muy repetitivo y predecible.
  • Che: +1. Más allá que la historia es conocida, está muy, pero MUY bien filmada, y contada. Imperdible.
  • Cop out: +0. Para ser una de "polis que se llevan bien/mal en tono de comedia", es bastante rescatable.
  • From Paris with love: +1. Típica de superagentes contra el mal, pero divertida y bien hecha (y muy violenta, como deben ser estas pelis).
  • Hot tub time machine: -0. Tiene sus momentos bastantes divertidos, pero no vale la pena como peli en general. A menos que estén muy al pedo...
  • Pirate radio: +0. Buenas historias, divertidas actuaciones, algunos temas interesantes... imperdible musicalización.
  • Prince of Persia: The Sands of Time: +0. Película de acción, de las berretas; por ejemplo, el tipo después de estar toda la película en el desierto, tiene el pelo sin arena...
  • Robin Hood: +1. Muy buena versión, que no cae en contar lo mismo de siempre, y arma una historia muy interesante.
  • Salt: +0. Parecida a 'From Paris with love' en su concepto (espías, el bien y el mal, violencia), pero un escalón abajo.
  • The Dark Knight rises: +1. No es la mejor Batman, y tiene una de las peores actuaciones de "me estoy muriendo, me morí", pero la peli en general está buena.
  • The imaginarium of Doctor Parnassus: +1. Muy difícil de describir... es una peli muy loca, pero muy interesante.
  • The raven: +1. Una historia alternativa sobre los últimos días de Edgard Allan Poe, convertido en un thriller macabro de suspenso, bastante bien hecho.
  • Tinker tailor soldier spy: -0. Muy enroscado todo al principio para disolverse en un final que no me pareció demasiado interesante... pero si te gustan las películas de espías (a nivel de inteligencia y contrainteligencia), adelante.
  • Toy story 3: -0. Más de lo mismo.
  • Wall Street: Money never sleeps: +1. Recontra interesante cómo explican la timba financiera en USA, tomando como ejemplo (real) el debacle que sufrieron de las hipotecas. ¡Para verla hasta entenderla! ;)
  • When you're strange: +1. Muy bien contada la historia de los Doors, muy bien mezclada con la música. Imperdible si te gusta la banda.


Obviamente, hay una buena tanda de nuevas anotadas:


Finalmente, el conteo de pendientes por fecha:

(24-Sep-2008)   15   6
(21-Ene-2009)   18  18  12   1   1
(09-May-2009)   13  11  10   5
(15-Oct-2009)   17  16  15  14
(01-Mar-2010)   18  18  18  18  16   4
(12-Sep-2010)   19  18  18  18  18  18
(14-Dic-2010)   13  13  13  13  12  12
(13-Abr-2011)       23  23  23  23  23
(09-Ago-2011)           12  12  11  11
(06-Ene-2012)               21  21  18
(27-Jul-2012)                   15  15
(26-Nov-2012)                       12
Total:         113 123 121 125 117 113

Read more
facundo

Noviembre complicado


El mes pasado les decía que la agenda venía complicada, que cerrar el año no iba a ser descansado, etc...

A fines de Octubre me fui para Venezuela con la familia. ¿La excusa? Fui invitado a dar un par de charlas en la primer PyConVe, y también una charla en una "mañana Python" en la ciudad de Mérida, así que aproveché y llevé a Moni y Felu para convertir el resto de los días en vacaciones :)

La verdad es que estuvo todo muy lindo (más allá de los viajes, como ya comenté por acá). Llegamos a Caracas, y al toque nos fuimos para Mérida, donde fuimos recibidos por Francisco Palm (organizador de la jornada allí, donde di "Python en el mundo real") quien nos alojó en su casa.

Francisco y yo

Estuvimos allí un par de días, y la verdad que la pasamos genial. La familia de Francisco nos hizo sentir muy bienvenidos, y la hijita menor (Abril, cuatro años) se llevó muy bien con Felipe así que nos divertimos bastante, y descansamos un montón. Aquí hay algunas fotos de esos días.

Luego volvimos a Caracas. El primer día de la conferencia decidí no asistir y con la familia hicimos un paseo muy interesante subiendo a un teleférico y visitando un pueblito de montaña. Al otro día sí fui a la conferencia a la mañana, donde di la charla de "Python más rápido que C". Por la tarde me volví a escapar, ya que acompañé a Moni y a Felu al aeropuerto, que ya se volvían para casa.

Esperando para subir al teleférico

El sábado fue el día más fuerte mío en la conferencia, ya que abrí y cerré el día. No era la idea, tampoco, pero faltó un disertante a la mañana, y ya había gente, así que aproveché y pre-estrené (juiiira de programa!) mi charla que ya tenía preparada para PyCon Argentina. El cierre fue con la clásica "Entendiendo Unicode", :)

La verdad es que la pasé muy bien en Venezuela, charlé con muchísima gente, y siempre me sentí muy bien. Gracias a Fermín, Francisco y al resto de los colaboradores por toda la buena onda. Acá están las fotos de la parte de Caracas.

Yo llegué a Argentina el lunes a la mañana, con la mala noticia de que me habían perdido la valija, :(. Me fue a buscar mi viejo, y me quedé en su casa todo el día. A la tarde vinieron Moni y Felu y cenamos en lo de mi mamá.  Del martes a viernes hice casi vida normal... trabajando, pero también haciendo doble tenis y doble natación (para recuperar la semana anterior), y tratando de cerrar otros temas varios (por ejemplo, recuperar mi valija: me la trajeron el martes a casa).

Y fue todo así como muy ocupado porque el sábado al mediodía ya me rajé de nuevo... esta vez sólo, y por laburo, ya que había reunión general de Onlines Services en Londres. La verdad es que entre el trabajo y algunas salidas a la noche, la semana se me pasó volando. Fui un par de veces a comprar ropa, un par a cenar con compañeros, y la salida formal de todo el equipo, que fue en Venturi's Table donde volvimos a cocinar entre todos (esta vez no pizza, sino platos elaborados!). Obviamente, siempre que paseábamos por ahí, no perdíamos oportunidad de tomarnos alguna cervecita en un pub londinense...

Pub

La salida más atípica fue claramente cuando fuimos una noche a un lugar donde cenamos completamente a oscuras! Esto fue en Dans Le Noir, un lugar totalmente dedicado a que te den de morfar sin que veas ni la punta de tu nariz. Fuimos varios, todos de confianza y hablando castellano, y nos reímos muchísimo, la pasamos muy bien. La experiencia de estar 100% a oscuras ya es interesante per se, pero si a eso le agregás tener que comer (¡y podés pedir platos sorpresa, así que no sabés qué te van a traer!) y beber, es recomendable.

Quizás la semana se hizo corta también porque el viernes a la tarde ya estaba emprendiendo el regreso. Fue todo muy apurado, pero salió bien: llegué a las diez y media de la mañana del sábado a aeroparque, y luego de hacer todos los trámites para salir del mismo (con valija y todo!) me tomé un taxi a casa. Medio acomodé todo, me pegué un baño, y luego de estar un ratito con la familia, agarré el auto y me fui para Quilmes.

El apuro era porque se estaba desarrollando la PyCon Argentina 2012, a la cual no pude asistir completamente por obvias razones, :(. Pero tenía que dar dos charlas, así que era ir o ir. Llegué, di mi charla estreno de "Bindings, mutable default arguments, y otros quilom... detalles", luego me metí en la charla de Brett Cannon sobre cómo funciona el import de Python, al toque di yo otra charla (nuevamente "Entendiendo Unicode"), y luego "Inferencias de tipos en Python", de Claudio Freire.

Import Python

La verdad, sólo estuve una tarde en la conferencia, pero la aproveché al máximo. Luego de un break vinieron las lightning talks, y finalmente la charla de cierre del evento, a cargo de Roberto Alsina: "Python 2 debe morir".  Luego fotos, sorteo, y huida al parque cervecero de Quilmes a cerrar el día haciendo sociales.

En fin... un noviembre a full, y eso que recién pasamos la mitad. Pero ahora viene todo un poco más tranquilo... por una semanita o así, que ya arrancan las jodas de despedida del año, tengo muchas clases de tenis atrasadas, y mil cosas que hacer en casa. Pero vieron como es el refrán, calavera con gusto no pica ;).

Read more
facundo

Omnívoro feroz


Es de esa manera que muchas veces describo a Felipe. Y es que una característica del mismo que nos ha sorprendido bastante a Moni y a mí, es que le entra a cualquier tipo de comidas.

Mientras muchos otros niños se niegan a comer cosas más o menos saludables, o se niegan a comer, directamente. Felu no le hace asco a nada. Sí, obviamente, no come de todo todo el tiempo, e incluso a veces no quiere almorzar o no quiere cenar, etc. Pero luego compensa, y la verdad es que no nos preocupa... sí, a veces come poco, pero a veces come más que Moni o yo mismo.

Y cuando come, come. Mientras otros chicos no comen verduras, Felu le entra a los rabanitos crudos como si fueran caramelos, ama el tomate, come pepino con locura, y hasta lechuga más o menos condimentada (que es complicada de comer, porque se te pega en el paladar).

Mientras otros niños o adultos no comen proteína animal, a Felu le encanta la carne. Y come hamburguesas caseras (que son "fáciles" de comer), o bondiola de chancho hecha la parrila, o "carnecita rica" como el otro día le decía a una entrañita que le había hecho en el hornito eléctrico. Y mientras algunos son "delicados" para comer, Felu te ataca un hueso de pollo como perro hambriento, o te come morcilla sin movérsele un pelo (mientras conozco a muchos adultos que les da asquito).

Me acordaba de todo esto sentado en el avión, en el vuelo de Rio de Janeiro a Caracas, mientras almorzaba la típica comida de avión que no es "pollo" ni "pasta": un estofado con arroz y alguna verdura. En ese caso no estaba nada mal, el estofado incluso tenía como una o dos rodajtas de champignon y todo. El punto es que la verdura era brócoli, que yo antes no comía.

En general, en mi vida, no recuerdo demasiadas cosas que no me meta en la boca (bromas sexuales aparte). No me gusta el coliflor, por ejemplo. La remolacha me parece algo sin sentido y tampoco la elijo nunca. El repollo me sabe a telgopor, pero si está en un puchero o en una ensalada le entro sin problema. Recuerdo que de chico no me gustaba la cebolla, pero eso era más la textura que el sabor: mi vieja hacía pizza de cebolla, yo le sacaba la cebolla de arriba, y comía la masa con el gustito bárbaro que le dejaba.

Y hasta hace un tiempo, no te comía brócoli. No me gustaba. O mejor dicho, de las veces que lo había probado, ni fú ni fá, más menos que más. Pero Lucio me hizo probar varia veces pastas con brócoli. Y Lucio sabe cocinar bien, pero además las pastas le salen particularmente bien, y me hizo que le agarre gustito al brócoli.

Y esa vez en el avión, le entraba al brócoli hervidito con un poco de sal y pimienta, y estaba buenísimo.

Read more