Novedades: actualmente estoy impulsando el proyecto Argentina en Python, desde aquí (ver mapa)

Actualizar a una versión nueva de Nikola

Nikola es un generador de sitios web estáticos que está buenísimo. Además, es el que uso para mantener este blog y el sitio web de Argentina en Python de una forma sencilla y sin mucho esfuerzo, que me permite focalizarme en el contenido sin molestarme en recursos de máquina, base de datos y otros dolores de cabeza. Además, como trabaja con reStructuredText me permite aprovechar todo su poder.

Como decía, es muy simple. Y así también lo es su actualización:

pip install -U nikola

Sin embargo, si tenés un custom theme y querés beneficiarte de los cambios en el tema del que heredás (yo me baso en bootstrap3) es necesario hacer un paso extra. Ese paso extra consiste en ver las diferencias de los templates que nosotros hemos modificado con respecto al tema heredado contra los originales y agregar los cambios que sean necesarios/compatibles. Para eso yo uso meld:

meld nikola-git-repo/nikola/data/themes/bootstrap3/templates themes/elblogdehumitos/templates

Y luego contra el theme del que hereda bootstrap3 que es base:

meld nikola-git-repo/nikola/data/themes/base/templates themes/elblogdehumitos/templates

De esa forma controlo las diferencias que haga falta y voy copiando hacia mis templates las que me benefician.

Por último, es posible que hayan agregado algunas características nuevas que requieran alguna configuración extra. Para saber cuáles son esas configuraciones podemos leer el CHANGES.txt para buscar algo puntal y agregar la que necesitemos, o bien podemos hacer un proyecto demo (con la última versión de Nikola instalada) y comparar su archivo conf.py:

nikola version
nikola init --demo -q /tmp/nikola-demo
meld /tmp/nikola-demo/conf.py conf.py

¡Ahora sí! Tenemos nuestro sitio Nikola actualizado a la última versión disponible.


Maneja los archivos requirements con pip-tools

El tema de los paquetes de Python, es un tema. Normalmente yo instalo los paquetes que necesto a mano con pip install, eso a su vez me instala un montón de dependencias. Luego, pinneo los paquetes que uso en el proyecto haciendo pip freeze para que luego esa instalación sea reproducible en otro equipo.

Sin embargo, con esto te perdés de un montón de cosas. Sobre todo, las actualizaciones de las dependencias de los paquetes que instalaste a mano. Vincent Driessen lo explica mucho mejor que yo en su blog post: Pin Your Packages.

Para facilitarnos esta tarea, este flaco Vincent creó la herramienta llamada pip-tools que soluciona este problema entre otros.

Básicamente consiste en dos herramientas: pip-compile y pip-sync.

Para poder mantener en orden nuestro entorno virtual y que todo vaya de forma correcta y actualizada, debemos crear un archivo requirements.in que será donde indicamos qué paquetes necesitamos. Por ejemplo en un proyecto que necesitemos Django y django-phonenumber-field:

# requirements.in
Django
django-phonenumber-field

y luego:

$ pip-compile
#
# This file is autogenerated by pip-compile
# Make changes in requirements.in, then run this to update:
#
#    pip-compile requirements.in
#

babel==2.2.0              # via django-phonenumber-field
django-phonenumber-field==1.0.0
Django==1.9.2
phonenumbers==7.2.4       # via django-phonenumber-field
pytz==2015.7              # via babel

Este comando nos va a generar nuestro archivo requirements.txt con todas las versiones de los paquetes necesarios, y sus dependecias, pinneados como corresponde. Pero además, cada una de esas dependencias tendrá un comentario que va a indicar porqué es necesaria o de dónde viene.

Finalmente, para poner a tiro nuestro entorno e instalar todas los requerimientos necesarios con esas versiones específicas, ejecutamos:

pip-sync

Pasan los días, las semanas y los meses. Salen nuevas versiones de los paquetes y no nos enteramos. Ahí volvemos a utilizar el comando pip-compile para que compruebe todos los paquetes necesarios y se fije si hay una nueva versión y demás. Crea nuevamente el requirements.txt y si vemos que queremos actualizar todos esos paquetes, hacemos un pip-sync.

¡De puta madre pip-tools!


Historial de seguidores en Twitter

Desde que empecé a usar Twitter de forma activa me llamó mucho la atención cómo funciona, pero no técnicamente, sino más bien en lo social. El alcance que tiene a poder ver el contenido de casi cualquier persona y hacer re-tuits de personas a las que no seguís. De hecho, gracias a ese feature hemos podido llegar a muchos más lugares con el proyecto.

Si bien no he podido dedicarme mucho tiempo a escribir algunos scripts que hagan este análisis por mí, comencé con algo simple: el historial de seguidores.

¿Cómo es eso? La idea es poder saber quienes te siguen, quién es un nuevo seguidor y quién te dejó de seguir. Claramente, los últimos son los más importantes para evaluar: ¿porqué perdí a este seguidor? es la pregunta del millón.

El problema se dividió -automáticamente, en dos partes. La primera: obtener todos los seguidores de la cuenta @argenpython de forma periódica. La segunda: hacer diff de esos seguidores de forma incremental. ¿Qué quiero decir con incremental? Que no necesito saber la diferencia entre el primer reporte y el último, porque si en los reportes del medio alguien me empezó a seguir y luego me dejó de seguir, también quiero saberlo.

Seguir leyendo…


Hotkeys for the win

¿Cuántas aplicaciones utilizás en el día a día? Digamos que nos limitamos a las más comúnes únicamente. En ese caso, mi respuesta sería: 6 (emacs, firefox, terminator, pidgin, thunar y thunderbird)

Esas aplicaciones las tengo abiertas casi todo el día. Además, a medida que voy trabajando comienzo a abrir otras: Google Chrome, LibreOffice, JOSM, gThumb, inkscape, Skype y algunas más. A mitad de la tarde, ¿cuántas aplicaciones tenés abiertas? Y lo más importante: ¿cuántas veces hiciste Alt + TAB? Aunque lo peor de todo es: ¿cuántas veces hiciste Alt + TAB y te pasaste por una ventana y diste toda la vuelta hasta la correcta o bien, te fracturaste un dedo haciendo Alt + Shift + TAB para volver una selección?

Bueno, hace varios años que yo me cansé de eso y decidí buscar una solución. La solución vino exactamente con la primera pregunta que te hice: ¿cuántas aplicaciones utilizás en el día a día?. Básicamente quería poder acceder a cualquiera de esas 6 aplicaciones sin que importara en qué orden las había abierto o había estando navegando por ellas. Digamos, que si fui a firefox, luego a pidgin y luego a thunderbird; quería poder saltar en un solo hotkey a terminator -que si usamos Alt + TAB tendríamos que presionarlo 3 veces consecutivas.

Primero me puse a investigar cómo se puede hacer para cambiar de ventanas utilizando la línea de comandos. Ahí llegué a wmctrl, que te permite listar las ventanas activas y también cambiar entre cada una de ellas mediante una interfaz de línea de comandos.

Seguir leyendo…