A Django site.
August 18, 2008

Oliver Etchebarne
drmad
Melancolía al despertar
» hack: telefono.py

Asistir al DPD08, y ver tantos Programadores Felices (tm) me ha animado :-) Por ello, he subido uno de los scripts que uso frecuentemente: telefono.py.

Lo había hecho originalmente en PHP, hasta que un buena noche, con mucho cansancio y sueño, confundí fsck con mkfs, y acabé destruyendo a Dorothy :-P Después lo reimplementé en Python, para estar "a la moda" :-)

Acabo de probarlo en Windows, y funciona bonito. Este script obtiene desde la web de las Páginas Blancas de Telefónica del Perú el nombre y dirección de un abonado. Con "Páginas Blancas", los celulares quedan descartados. Con "Telefónica" queda descartado abonados de otras compañias telefónicas. Con "del Perú", queda descartado el resto del universo conocido.

Como es de esperarse, si el diseño de la web de las Paginas Blancas cambia, este script explotará. No abuses del script. Este script no tiene ninguna relación con Telefónica del Perú, ni con las Páginas Blancas, es totalmente extra-oficial, y hasta probablemente ilegal. Asi que úsalo con discreción.

Sugerencias y/o comentarios serán bien recibidos.

http://hacks.drmad.org/telefono.py.

August 17, 2008

Diego Escalante
dieguito
hack my cow
» La lluvia y mi kernel roto

Rain in Birmingham
Rainy day in Birmingham


En Lima ha estado lloviendo bastante, y hace mucho frío, he estado ingeniándome maneras poco usuales de abrigarme, omitiré los detalles.

Estaba yo haciendo un downgrade forzado al kernel 2.6.24 pues suspender la laptop se rompió en 2.6.26 (y como siempre nadie hará caso al bug pues todos los hackers usan X60s que funcionan perfecto).
Entonces la situación es que tengo un módulo (r8180) que depende de su propia variante de ieee80211 (ieee80211-rtl), este módulo funciona perfecto con mi kernel 2.6.26 y funcionaba perfecto con el 2.6.24 antes de actualizar a 2.6.26. Ahora me decía que las versiones de los símbolos ieee80211_wake_queue y ieee80211_stop_queue no coincidian con las que [r8180] esperaba.

Oh misterio... lo primero, investigar con grep si es que en el código fuente de r8180 estaba alguna mención a una versión específica de ambos símbolos, el primer sospechoso fue un .h importado de ieee80211-rtl, pero no era eso...
Varios grep después me di cuenta de que quizá ieee80211-rtl podría ser el culpable, entonces salté a ese directorio a revisar si existía alguna mención a versiones y símbolos.
Ahí sí tuve suerte, el archivo Module.symvers generado al construir el módulo contenía una mención a los símbolos q buscaba:

0x7879cbbc ieee80211_stop_queue /home/diego/hack/rtl/eee/ieee80211/ieee80211-rtl EXPORT_SYMBOL
0x7eb7b0a4 ieee80211_wake_queue /home/diego/hack/rtl/eee/ieee80211/ieee80211-rtl EXPORT_SYMBOL


Entonces, la gran interrogante era de dónde es que r8180 estaba leyendo la versión del símbolo conflictivo... ajá, los kernel headers del sistema!.
Resulta que en /usr/src/linux se encuentra un Module.symvers con versiones para todos los símbolos de los módulos del kernel (igual al Module.symvers del código q yo estaba analizando), pues, como el kernel trae su propia versión de ambos símbolos, r8180 estaba leyendo desde ese archivo la versión del símbolo que necesitaba. Esto obvio estaba mal :). r8180 debía esperar la versión de esos dos símbolos que ieee80211-rtl iba a proporcionar.

Solución: editar /usr/src/linux/Module.symvers para que pongamos ahí la versión de los símbolos que ieee80211-rtl va a ofrecer al instalarse.

Nota obvia: hice la modificación porque sé que no voy a instalar nada más que use ieee80211 y porque sé lo que hago (o al menos creo saberlo). Esta no es una solución mágica para que tu módulo favorito vuelva a funcionar, es solo anécdota.

Queja anexa: ¿por qué no des-arreglan lo q sea que creyeron arreglar en 2.6.25+ y que rompió mi suspend/resume :(?.

August 13, 2008

Diego Escalante
dieguito
hack my cow
» Evolution plugins hacking

Hace como dos meses, Yannick[0] me contactó para preguntarme si podía implementar para él un plugin de Evolution. Concretamente quería el plugin que se pedía en este bug de eons de antiguedad. Por cierto Beeznest (la empresa de Yannick) tiene un post sobre el tema.

El reto entonces era implementar un plugin de Evolution que permitiese responder a los correos recibidos con respuestas prefabricadas, templates.
El plugin debía permitir reemplazar ciertos "tokens" por información del usuario, por ejemplo reemplazar "%from%" por el nombre del remitente a quien se le estaba respondiendo. Además, debía ser posible tener una carpeta de templates con infinitas subcarpetas.


Resultado final

Lo más simple, y por lo que hay q empezar, es habilitar nuestro plugin en la infraestructura de compilación, osea en los Makefiles. Esto es trivial y solo hay que decirle al configure.in que construya nuestro Makefile:
plugins/templates/Makefile

Luego, hay que crear la infra para el plugin mismo:

INCLUDES = \
-I$(top_srcdir) \
$(EVOLUTION_MAIL_CFLAGS)

@EVO_PLUGIN_RULE@

plugin_DATA = org-gnome-templates.eplug org-gnome-templates-ui.xml
plugin_LTLIBRARIES = liborg-gnome-templates.la

liborg_gnome_templates_la_SOURCES = templates.c
liborg_gnome_templates_la_LDFLAGS = -module -avoid-version

EXTRA_DIST = org-gnome-templates.eplug.xml org-gnome-templates-ui.xml

BUILT_SOURCES = org-gnome-templates.eplug
CLEANFILES = $(BUILT_SOURCES)


Este es el Makefile de mi versión original, la incluida en trunk de Evolution es distinta y tiene algunas cosas extra.

Basicamente hay que decirle a autofoo que queremos que nos construya un shared object que se llame liborg-gnome-templates, osea una librería que pueda cargarse en tiempo de ejecución (si mi mumbo jumbo técnico está mal, corríjanme).

Luego toca crear un archivo definiendo el UI de nuestro plugin, esto es parte del framework de evo, pero recuerda a como GTK+ hace las cosas:

<Root>
<commands>
<cmd name="FileSaveAsTemplate" _label="Save As _Template"/>
</commands>
<menu>
<submenu name="File">
<placeholder name="Print">
<menuitem name="FileSaveAsTemplate" verb="" />
</placeholder>
</submenu>
</menu>
</Root>


Luego toca crear un .eplug que defina nuestro plugin, lo importante es saber el nombre de los hooks que hay q usar y asignarles la propiedad factory que es como quién dice el callback, eso y otras cosas están en la muy incompleta y arcana documentación de los eplugins (cookie para quien los encuentre en el svn, no me acuerdo!).

Luego, solamente programas y lo mandas a la lista y algún buen dude como Bharath Acharya lo integra a Evolution trunk.

En cuanto al código, todo es magia negra de Evolution y C, pueden ver el original en launchpad o el parche final con los cambios de Bharath. Se reciben preguntas y pedidos de plugins, cotización previa :P.

Kudos a Yannick que vía Beeznest que financió el trabajo inicial.

April 6, 2008

Diego Escalante
dieguito
hack my cow
» Recordando hacks

En el 2004, entre locuras y aprendizaje, al querer tener un blog y no tener nada descente alrededor decidí escribir mi propio blog engine: mariáteguibe.
El nombre es trivial, no tiene mucho que ver con el broder de los 7 ensayos, es más bien un préstamo de su apellido para no liberarlo con un nombre monce como "blog engine" o alguna tontera así.

La verdad no es gran cosa pero servía. Incluso fue el engine del famoso Droper cuando hacía sus pininos en internet.

¡Qué nostalgia! ¡Y qué bien que hago backups! :)

Screenshot de ley:

(click para ampliar)