Febrero 27, 2005

Resumen fotográfico de la semana
A continuación un resumen visual de la ajetreada semana.


Jimmy y Julia se casaban el Sábado pasado. Entre los jóvenes les hicimos una pequeña celebración el Miércoles, regalitos y también algunos juegos. Probé hacer dos juegos de Whose Line is it Anyway: Let’s make a date y Party Quirks.
No salió tan mal.

El Jueves viajé a Lima para coordinar cosas de Peruserver y estuve allí hasta el Sábado por la mañana. Me quedé hasta la una de la mañana del Sábado viendo el DVD de Savre de The Schindler’s List en la PC de Kike.

El Sábado llegué como a las seis y media a mi casa, me bañé, me cambié y fui directo al matrimonio de Jimmy y Julia. Qué felices estaban! Que el Señor les bendiga mucho y no se peleen mucho. ;)



Nuevo diseño
Algo sencillo para esta ocasión. Oops, mi hermana quiere chequear su correo.

Febrero 23, 2005

Dual audio
Tengo activadas ciertas notificaciones auditivas en el Gaim. El problema es cuando alzo el volumen para escuchar una canción y la notificación del Gaim también suena altísima. Mi CD de Mike Oldfield por algún extraño motivo suena más bajo que lo normal y el sonido del Gaim suena por encima de ello lo cual es molestoso.

Como tengo una Soundblaster PCI y una tarjeta integrada compilé el soporte para ambas tarjetas en el kernel, Oliver me regaló un par de parlantes viejos y paf! notificaciones de Gaim en los parlantes viejos y placer musical via el Soundblaster (y un set de Cambridge Soundworks). Ahora subo el volumen todo lo que quiera a la música y el Gaim sigue sonando igual. Feature! Puedo callar las notificaciones del Gaim sin callar la música y trabajar ininterrumpidamente al ritmo de Dave Seaman.




Febrero 22, 2005

Experimentos sociales
Ya estoy de regreso de mi Campamento. Ha sido una semana genial, todo salió bien, gracias al Señor y nos hemos divertido un montón. Hasta hicimos un video con los chicos que falta pasar a la compu y editar.

Una de las cosas que quería hacer definitivamente este año era un juego social basado en Autopond, un juego para la Palm. La premisa es ésta: cada persona es dueña de cinco “tarjetas” y tiene que buscar otras cinco “tarjetas” que otras personas tienen.
El año pasado había escrito un script (en PHP, of course) que generaba las tarjetas en base a los acampantes inscritos, pero no pude hacerlo por falta de tiempo y porque aún el mismo día del campamento había gente inscribiéndose y necesitaba un número concreto para poder generar las tarjetas.

Este año hice otro script. El que había escrito estaba aparentemente incompleto o al menos ya no lo entiendo, heh. Me quedé hasta las cuatro de la mañana haciendo todo esto, pues es un problema complicado y cautivante a la vez. Hay que generar un número discreto de tarjetas para N personas viendo que:

a) No sea dueño de las tarjetas que la persona debe buscar
b) Las cinco personas que tengan sus tarjetas objetivo sean diferentes

Adicionalmente a esto quería agregarle:

c) Que sea un número balanceado de mujeres y varones
d) Que no estén en el mismo cuarto (en el campamento dormimos doce personas por cuarto (o “cabina”))
e) Que no le toque con sus amigos/collera/familiares con quienes más frecuenta

Estos últimos criterios eran ya demasiado complicados. Ya estaba obteniendo bucles infinitos, donde el programa se quedaba buscando una combinación de tarjetas y personas que no se satisfacía nunca. A las tres de la mañana era difícil pensar y estaba escribiendo hojas y hojas explicándome a mí mismo el algoritmo.
Lo siguiente fue hacer un programa con ImageMagick para generar los gráficos de las tarjetas.







Lo que más me preocupaba de todo esto era la incertidumbre de saber si los chicos irían o no a interesarse por el juego. Eran 89 jugadores que tendrían básicamente que preguntarse unos a otros si tenían tal o cual tarjeta. Todos tenían las mismas posibilidades de ganar, pero si alguien rompía o perdía su lista de tarjetas le arruinaría el juego a cinco personas. Lo jugarían? O no le prestarían interés?
Hubieron momentos en las altas horas de la madrugada que ya quería rendirme y dejarlo para el siguiente año, pero me dije “NO” — ya había empezado e iba a acabarlo. Funcione o no, lo iba a hacer.

El juego fue un éxito.

Tenía planeado premiar a las cinco primeras personas que encuentren sus objetivos, o — en el caso que nadie le de suficiente atención al juego, a las que hayan encontrado a la mayor cantidad de objetivos. Personas de quienes no esperaba el mayor interés (por ser mayores y parte de la organización) preguntaban a los chicos por su lista de tarjetas. Los chicos iban de un lado a otro reuniéndose en círculo mirando sus tarjetas y anotando nombres. Un muchacho llamado Saúl encontró velozmente a tres personas en menos de dos horas.
“A ver si eres mi amigo,” le decía a quienes les preguntaba por su lista y me parecía gracioso.

Fue un fenómeno social interesante. Sinceramente tuve una actitud muy pesimista del asunto, pensé que no funcionaría, pero en menos de un día tuve a los cinco ganadores. La última ganadora se quejaba porque algunos chicos no llevaban consigo su lista y supe que un muchacho llegó a romper la suya.
“Y qué si uno de ellos tiene la que me falta? No vale” decía Solange.
En eso ví a la esposa del predicador, que también tenía su tarjeta.
“Silvia también juega,” le dije. “De repente ella tiene la que te falta.”
Solange regresó al toque, con una sonrisa.
“Si la tenía!” dijo entusiasmada.

Febrero 12, 2005

Tigger-ducking
Rubber Ducking es el procedimiento de poner un pato de hule encima de tu monitor y describirle tus problemas. El resultado frecuente es que, al tratar de describirle la situación, terminas encontrando una pista o la posible solución completa al problema.

En esta semana tuve la oportunidad de avanzar bastante un nuevo acercamiento a la forma como estoy desarrollando los proyectos, así que a falta de un pato de hule cogí un Tigger de peluche para hacer Rubber Ducking. Funciona, pero tengo que hacerlo con el hands-free puesto no vaya a ser que mi familia piense que finalmente me he vuelto loco.

Campamento Betel 2005
Esta semana que viene es el Campamento Betel 2005. Todos estos días he estado con los ajetreos de la organización y aún no se acaba. :) Ayer estuve con Deyvi, YY, Chicho y Fran haciendo los cuadernillos y matándonos de la risa haciendo un three-headed broadway stars pero de cinco en vez de tres. :)

Documentación de librerías
Tabo: Cuando vuelva del campamento voy a tratar de buscar algunos ejemplos posteables. Sucede que la práctica totalidad que tengo son de proyectos de Peruserver y, por tanto, impublicables.

Febrero 07, 2005

Mis Librerías en PHP
Acerca de mi post anterior sobre las librerías que estoy desarrollando, Tabo me pregunta en un comentario cuándo estarán disponibles, como todo buen amis Open Source.
Las respuestas clásicas a esta pregunta varían desde “Oh, déjame limpiar un poco el código y lo publico” a “No hay documentación, ahora que tengo tiempo escribo algo y lo pongo en línea” lo cual al final termina en nada, son excusas más falsas que <inserta tu chiste favorito aquí>.
De modo que no voy a ponerles excusa y media sobre cuándo va a estar disponible el código. Estoy subiendo un tarball y eso es todo. No limpieza de código, no documentación, ni nada de nada. Probablemente tenga tiempo para hacer una documentación, pero ya me conozco y no voy a luchar contra ello y no les prometo nada. Pueden hacerme preguntas, pero tengo cuchumil mails en cola — si no les molesta que tarde N siglos en contestar, escríbanme normalll.

Ah, lo he puesto en la sección de Hacks.

Convertir un PDF a texto o HTML
Adobe mismo ofrece un servicio para convertir un PDF a texto plano o HTML. Aún no lo he probado, pero sería interesante ver qué tal es la calidad de la conversión (léase: qué tan fiel es al documento original).
El mecanismo es interesante, se basa en enviar el PDF como un attachment a una de estas dos direcciones de correo: pdf2txt@adobe.com o pdf2html@adobe.com dependiendo de la conversión que deseemos realizar. También hay un formulario para convertir documentos PDF accesibles por la web.
Mucho ojo con esto: “By submitting content through these tools, you understand and agree that Adobe may occasionally access the content you submit for purposes of quality control and administration of the conversion service.”
Link

Febrero 03, 2005

Wiki de GTD
Acabo de toparme con un Wiki de Gettings Thing Done. Si estás metido en el asunto, anótalo en tus bookmarks o tu del.icio.us o tu servilleta. Espero que pronto pongan más contenido.

Gota a gota, los módulos se anotan
Estoy robando varias ideas de Drupal para mis próximos desarrollos. Estoy haciendo un sistema basado en los hooks y módulos de Drupal para hacer verdadera reusabilidad. Hace tiempo tenía deseos de hacer algo así porque pierdo mucho tiempo, y Drupal me ha prendido el foco — es una excelente implementación.

Paralelamente a esto aproveché que el jefe me dió carte blanche y tiempo para hacer un script que genere formularios en base a un fichero de definición (que no es más que un script PHP). Me genera un HTML con todos los elementos del formulario y un array de definiciones para validar el formulario.
La librería de formularios está basada en unas ideas de Antonio y otras ideas de Oliver. Básicamente le pasas un array con las “propiedades” de cada elemento (si debe validarse o no, si puede estar vacío o no, valores por defecto, qué función va a validar el asunto, filtros, etc) y luego llamas a forms_is_valid() y eso es todo.
Es un verdadero salvavidas. No puedo atarme los zapatos sin eso. Cuando se lo expliqué a Oliver y empezó a implementar uno con objetos (el mío es procedural) me dijo algo así como que hacerlo de la forma antigua le parecía ahora una completa pérdida de tiempo, y de veras lo es. El sólo pensar en validar un formulario a mano, elemento por elemento me parece frustrante. Y así es como lo hacen en Drupal, encima dibujando cada widget con código PHP, waaagh.

Tengo también tooltips y definiciones a un sistema de expansiones en NEdit (que son como macros, escribo “vd” y con un keystroke lo expando a “var_dump()”). Todas estas cosas en su conjunto las llamo “Acquarella,” que es una colección de librerías y hacks: Mathilde (lo de los módulos que estoy haciendo ahora), Fionna (validación de formularios), class.template.php que es una clase de templates medio desconocida, le he hecho un par de hacks y SIRVE (tiene bloques que funcionan, a diferencia de los de FastTemplate) y N scripts chiquitos que formatean código, expanden macros, etc.
Acquarella es un Unix, una colección de varias cositas. Me faltan todavía otras utilidades para lo que es SQL y tengo otras ideas en el tintero.

He visto varios frameworks pero siempre les encuentro algo que no me gusta. Tengo este problema de querer hacerlo todo a mi manera (problema que también se presenta en otras áreas de mi vida) así que por eso termino descartando cosas como el BIF, Smarty, PHPForms, etc, etc, etc.

Y todo para no tener que hacer esos aburridos formularios! ESR tenía razón:

“Hackers (and creative people in general) should never be bored or have to drudge at stupid repetitive work, because when this happens it means they aren’t doing what only they can do — solve new problems. This wastefulness hurts everybody. Therefore boredom and drudgery are not just unpleasant but actually evil.

To behave like a hacker, you have to believe this enough to want to automate away the boring bits as much as possible, not just for yourself but for everybody else (especially other hackers).”

Febrero 01, 2005

Bug extraño en ImageMagick
Hice un script usando la librería de Perl de ImageMagick (PerlMagick) para generar unas tarjetas. Las tarjetas se generaban perfectamente en mi PC, pero en el servidor de producción las tildes y eñes salían como cuadrados.
No conozco mucho de i18n, es un tema que siempre he evitado lo más posible. Los chicos en #linuxperu me dieron una mano viendo el tema de los locales y el encoding, pero nada, el script seguía sin funcionar. Los locales de mi PC y del servidor coincidían pero el error persistía.

Descarté entonces que el problema fuese el locale y decidí echarle la culpa a ImageMagick. Estaba instalado de RPMs así que le pedí a Savre que lo compilase desde fuentes. Se demoró un montón y se me pasaron ciertos detalles de Freetype para hacer funcionar las fuentes. Mucho, mucho tiempo después finalmente compilé bien el ImageMagick. Eso solucionó el problema, ahora funciona de maravillas, pero es muy extraño.