A Django site.
Diciembre 31, 2009
» Internet por el celular

Con Moni y Feli pasamos unos días en Cardales, entre Navidad y Año Nuevo, en la casa de unos amigos que se iban de vacaciones toda la semana. El lugar no tiene Internet, y aunque esto a mí no me jode porque tengo siempre laburo para hacer estando offline, se me ocurrió hacer una prueba... ¿cómo me conecto a Internet en la laptop, pero usando el transporte de datos de la red celular? Nunca lo había hecho, y encima tenía que comunicar la laptop con el teléfono a través de bluetooth, lo que siempre que probé resultó ser una tarea no trivial... pero nunca lo había probado con Ubuntu Karmic. Agarré el fonito entonces y le prendí bluetooth, y lo mismo hice con la laptop (los tenía apagados en ambos para que no consuman energía). En la laptop me apareció un iconito de bluetooth, al que le hice click y elegí la opción de Configurar dispositivo nuevo . Me apareció una pantalla que me contaba que me iba a guiar a través de la configuración, se puso a buscar dispositivos y me encontró el teléfono. Lo seleccioné y me apareció un número de unos pocos dígitos, indicando que pusiera lo mismo en celular. Voy a este y veo que ya estaba pidiéndome la clave. Ingresé el número y ya estaba listo: ambos dispositivos quedaron acoplados. La pantalla que me guiaba en la laptop avanzó sola al mensaje final, en el que me decía justamente que el dispositivo ya estaba configurado. Pero en este ventana también había un checkbox que decía "usar este dispositivo para conectarse a Internet". Hice click en el mismo, y automáticamente hizo que el teléfono se conectara, y que la máquina usara esa conexión: unos segundos después el Network Manager me indicaba que estaba conectado a la red usando el teléfono. ¡Y listo! Ya podía usar Internet. La verdad, todo el proceso me sorprendió mucho, ya que en cuatro clicks y sin tener que consultar ninguna documentación ni hacer cosas raras (ni siquiera cargar un driver del teléfono, o indicar qué modelo de teléfono tenía), pude conectar mi máquina a Internet de esta manera.

Febrero 17, 2009
» Bugfixes y paquetes


En el lugar en donde estoy actualmente trabajando (Senior Software Developer, en Canonical, programando Python), hacemos en general algún software que es propietario, y algún software que será liberado a la comunidad.

Este post es sin embargo acerca de otra faceta del laburo, faceta en la que incursioné durante estos días a raiz de un problema que tenía al hacer unos tests. Esta faceta es la de trabajar en un paquete que nosotros usamos pero que no es nuestro, e invertir tiempo del laburo (horas, días) en solucionar algo... en definitiva, devolver algo a la comunidad del software libre del que tanto uno toma.

Durante dichos tests, necesité levantar los attributos extras de un archivo. Como obviamente las pruebas las hago desde Python, lo primero que probé usar es la biblioteca xattr, pero me tiraba un error extraño y feo.

Al principio dudé de la biblioteca en sí, y me puse a excavar desde la misma, hasta las llamadas del sistema directamente, con lo cual aprendí bastante de estos atributos extendidos. Pero vi que estaba todo bien.

Luego empecé a subir desde la llamada del kernel a la biblioteca FUSE (que es la que te permite codear vos mismo un sistema de archivos y usarlo sin tener que integrarlo al kernel). Acá es donde encontré un problema. Entendí cómo debería funcionar, vi que estaba mal, busqué el código fuente del proyecto, y verifiqué que incluso en lo más actualizado de ese código (en trunk) también estaba mal.

Así que me traje el código, lo compilé y empecé a probar nuestro sistema con la versión que iba corrigiendo, hasta que solucioné el problema. Una vez que verifiqué todo, generé el parche correspondiente y lo subí a Launchpad, en un bug que abrí por este problema, para que sea considerado su inclusión en futuras versiones y que esto esté resuelto para todos.

Por otro lado, en el laburo, para algunas cosas en desarrollo armamos Paquetes Privados de software, de manera que los desarrolladores nos suscribimos a ello y si hay actualizaciones estas son ofrecidas a nosotros a través del mismísimo Administrador de Actualizaciones del Ubuntu (este es una funcionalidad pública del Launchpad llamada Personal Package Archives (PPA)).

Entonces, como nosotros para desarrollo necesitamos esto corregido, me puse a agregar a nuestro PPA una nueva versión de este paquete. Paso a comentarles cómo es este proceso.

Bajé las fuentes limpias del paquete (apt-get source python-fuse). Hice esto en un directorio vacío y ví que aparte del directorio con las fuentes, aparecieron unos archivos de control, los cuales borré prestamente porque no los iba a necesitar. Copié el parche que había creado al directorio correspondiente de las fuentes (debian/patches), agregando el nombre de ese parche en el archivo debian/patches/00list. Finalmente anoté una entrada en el changelog de las fuentes (esto se hace con un programita auxiliar, ya que deben tener un formato específico; en mi caso hice dch -D <distro> -v <version_del_paquete> "mensaje para el changelog").

Ya con las fuentes modificadas, armé los archivos de control y paquete como para subir, lo que se hace con la órden debuild --no-tgz-check -S. Para saber que está todo bien, y que todo lo que armé se va a instalar bien, fui al directorio superior (donde antes tenía las fuentes, y ahora dejados por la órden anterior, nuevos archvivos de control), y usamos un programita que arma un root falso e instala todo lo que tiene que instalar para ver que nuestro paquete se acopla bien al resto del sistema: sudo pbuilder --build *.dsc.

Finalmente, para subir el paquete al Launchpad: dput -f <host> *.changes

Luego, lo dejé reposar algunas horas a fuego lento, y al rato Ubuntu nos indica que hay una actualización disponible, y es efectivamente este paquete, :)