Misioneros y caníbales, en Perl

Anoche leía una anotación de Eric S. Raymond sobre sus experiencias aprendiendo Haskell, y me recordó en primer lugar mis intentos con la tecnología secreta alienígena, y luego una anotación vieja mía donde se trataba el puzzle de los misioneros y los caníbales.

La asociación entre ambos temas es porque alguien propuso una solución en Haskell (completamente marciana, por supuesto), y he acabado ojeando mi implementación en Ruby.

La verdad es que está bastante limpio el código, pero me sigue pareciendo raro. No he llegado a ser un programador de Ruby, lo admito.

Me he preguntado cómo se vería en Perl, y como no me gusta hacer crucigramas, aquí está la solución.


La Copy & Paste Web

En primer lugar: estar agradecido, porque sin duda es publicidad para Nautilus Flickr Uploader, aunque no sea perfecta (la publicidad). Para mi no cambiará mucho las cosas, pero igual alguien se anima a mantener el paquete para Debian/Ubuntu/loquesea.

Lo curioso es que se ha nombrado mucho a la aplicación, pero vía copiar y pegar, que tiene la ventaja de que no necesitas tener ni remota idea de lo que estás diciendo, como se puede ojear por aquí.

Bueno, si alguien cayera por casualidad en esta anotación, espero que encuentren la URL del proyecto, que sepan que es Software Libre, que la última versión es la 0.05 (y no la empaquetada para Debian/Ubuntu), que está el código fuente disponible, y que también está empaquetado para Fedora.

Pero lo más importante es que sepan que es posible que la llamada a dpkg indicada no funcione, porque no instalará las dependencias :(.

La gente es más lista de lo que parece, y seguro que saben solucionar el problema. Igual hubiera sido mejor apuntar a la página del proyecto y que la gente piense por si misma.

Como bonus, me avisan que salimos en pantallazos inesperados. Que ya dicen eso de que lo importante es que hablen de ti, aunque sea para decir tonterías ;).

PD: ya habían unos 150 usuarios de la aplicación, siempre según Flickr. Por ahora no se ha notado el revuelo, pero nunca se sabe :P.


Nueva versión de Nautilus Flickr Uploader

No, no estoy desafiando a la ley Zawinski ;), simplemente había un error incómodo relacionado con el drag and drop que había que arreglar.

Cuando trabajo con Nautilus Flickr Uploader, mi rutina es la siguiente:

  • Monto la tarjeta SD con las fotos (no me gusta importar las fotos automáticamente, prefiero controlar el proceso).
  • Copio las fotos a un directorio, y las reviso con eog (rápido, ligero, sencillo: ¡perfecto!).
  • Borro los desastres fotográficos, y si alguna captura me gusta: botón derecho seguido de Abrir con > Subir imágenes a Flickr. Pero eso es solo la primera vez, para el resto hago click en la foto y la arrastro a la lista de previsualización del Nautilus Flickr Uploader.
  • Cuando tengo el lote a subir: pongo etiquetas, elijo tamaño (suelo subirlas a 2048px), y Aceptar.

El problema estaba en que lo que me llega vía drag and drop es una URI, y hay caracteres que vienen escapados (como los espacios) y que luego no encajan con las funciones de manejar ficheros de Perl.

Bueno, ha sido un commit KISS (Keep It Sexy, Stupid :P), y solucionado.

La verdad es que la aplicación es perfectamente estable y da poco margen de mejora sin caer en la ley Zawinski, y muestra de su funcionalidad son los 115 usuarios que ahora mismo la tienen autorizada en Flickr.

He publicado paquetes para Fedora 12 (sigo intentando que me acepten oficialmente el paquete, por cierto), e intentaré publicar los de Debian/Ubuntu cuanto antes (aunque agradecería que alguien con más experiencia y recursos se hiciera cargo, que solo tengo un netbook con Ubuntu :P).


'Heredoc' y la sustitución de variables en BASH

A principios de esta semana estaba copiando del clipboard a vim, sobre una sesión remota de SSH, un trozo de código copiado de una web, y el editor insistía en aplicarme un sangrado absurdo que lo descomponía todo, así que en lugar de pelearme con la configuración (no acertaba con el set o unset adecuado, y no sé porqué la ayuda de vim no estaba instalada), se me ocurrió usar un here document para salir del paso (algo así como documentos empotrados; no me gusta la traducción literal de la Wikipedia).

Lo fácil que hubiera sido copiar el fichero a disco localmente y usar scp(1), ¿verdad? Pero gracias a esa forma, un tanto rara a veces, en la que funciona nuestro cerebro, aprendí una cosa nueva :).

Básicamente los here document (o heredoc), son una funcionalidad que da el shell (y que han heredado algunos lenguajes de programación de alto nivel) que nos permite incluir un documento dentro del propio programa. El operador del shell es <<tag:

#!/bin/sh

cat <<FINDOC
Esto es un heredoc (o documento empotrado) que
hemos incluido en este script.
FINDOC

En ese ejemplo cat(1) mostrará por pantalla todo lo que encuentre hasta llegar a la marca FINDOC.

Esto es muy útil cuando queremos generar contenido y resulta incómodo poner múltiples lineas con echo(1) o recurrir a un fichero externo.

En mi caso usé el própio intérprete interactivo para pegar el código, que era un script en shell precisamente. Usé algo así como:

$ cat >script.sh <<FIN
#!/bin/sh

ejemplo="hola mundo"
echo mensaje $ejemplo

FIN

¡Bien! Asunto resuelto y a otra cosa; salvo por el detalle de que el shell interpreta las variables, con lo que el fichero resultante no era el esperado :S.

Entonces el problema pasó a ser el propio heredoc (aquello de que si decides usar X para resolver un problema, tienes dos problemas :D). De hecho es curioso como te olvidas incluso que tu objetivo era realmente copiar un fichero de un sitio a otro ;).

Investigando un poco aprendí algo que no sabía: si ponemos el delimitador entre comillas, ¡no se interpretan las variables!

$ cat >script-2.sh <<"FIN"
#!/bin/sh

ejemplo="hola mundo"
echo mensaje $ejemplo

FIN

Podemos comprobarlo con nuestro ejemplo:

$ diff -u script.sh script-2.sh
--- script.sh	2010-02-28 19:20:07.755883961 +0000
+++ script-2.sh	2010-02-28 19:20:13.824883877 +0000
@@ -1,5 +1,5 @@
 #!/bin/sh
 
 ejemplo="hola mundo"
-echo mensaje 
+echo mensaje $ejemplo
 

La otra opción, que sí conocía, era la de escapar todas las variables y posibles patrones de sustitución ($ejemplo pasa a ser \$ejemplo), pero era poco práctico porque el script era bastante largo.

Así que nunca es tarde para aprender cosas nuevas, aunque sea debido a que no usamos la herramienta adecuada para resolver el problema ;).

Actualización: como bonus, the geek joke of the week (my cat is escaped :'D).


Vamos arrancando en Exeter

Es la segunda vez que lo hago (esta vez con ayuda), lo de poner una casa en marcha desde cero. La parte de los muebles en realidad es lo de menos: son tantos otros detalles que en realidad es lo que menos preocupa, hasta que pasan un par de días y no tienes donde sentarte :D.

Hay muchas cosas que en UK están muy estudiadas y funcionan de una forma muy ordenada: contratar la luz, el gas, el agua y otros servicios como Internet (este último es casi igual que en España; a nivel de trámites, porque de precio no hay color: más económico y mucho más ancho de banda).

Catedral de Exeter
La Catedral de Exeter (Siglo IX)

Luego hay otras cosas extra, que tienen la complicación de estar aterrizando en un país extranjero, aunque muchas de ellas las hemos tenido bajo control gracias a que Alex ya jugaba con ventaja.

La verdad es que tengo información para escribir un buen HOW-TO, igual en plan wiki, para que aporten cosas todos aquellos que nos han ayudado con información útil (¡gracias Pau!).

Mañana vuelvo a trabajar, gracias a Virgin, por lo rápido que nos han dado de alta, y a pesar de ellos, porque para activar la conexión (si usas el self-installation kit al menos) necesitas un Internet Explorer o un Safari; todo para seguir cuatro pasos en una web que se traducen en cancelar un puñado de cosas inútiles y rellenar un formulario para que te den una cuenta de correo que no vas a utilizar. ¡Brillante!

No hemos tenido tiempo para otras cosas, como hacer un poco el turista. Por ahora sabemos dónde comprar qué cosas, y que cerca de casa tenemos Yummy House para emergencias (un take away de comida china buenísimo, y a precios populares). De hecho, la foto de esta anotación y las pocas que he subido son consecuencia de haberme acordado de llevar la cámara en uno de los viajes necesarios (¡y porque no llovía!).

A ver si poco a poco nos vamos situando en la rama STABLE y podemos hacernos un poco a la idea de dónde vivimos (¡en el centro de Exeter! yay!). Además quiero descongelar muchas cosas que tengo paradas desde que empecé la mudanza, lo que sería señal de que todo va viento en popa.


Una semana

Tengo la mudanza del piso de Valencia casi finalizada, me queda hacer un viaje para entregar las llaves y recoger cuatro trastos (que hay que ver cómo se acumulan cosas en 2 años).

El tema del piso en Exeter arrancó rápido, pero ahora ha tenido una pequeña pausa... y esperamos que los papeles queden cerrados ya esta semana, porque el día 15 vuelo para allá y espero poder recoger las llaves.

Esto va por todos los que me hacían ya desaparecido: que aún no. Esta semana tengo que arreglar algunas cosas por Elche (comprar una maleta, cosas de bancos, etc), antes de dar la mudanza a Exeter por finalizada.

Como los días son largos, aprovecharé para tomar algún café o alguna cerveza con amiguetes de la zona, que voy a estar una temporada fuera (en realidad vendré por aquí más o menos como cuando estaba en Valencia, pero igual es eso de que estaré más lejos :P).

Actualización: está todo listo, quedan unas horas para partir y estoy impaciente. Además quiero quitar la pausa cuanto antes, porque tengo casi todo parado y ya hecho de menos algunas cosas. Me esperan unos días de locura, contratando servicios y acomodando un poco la casa. ¡Miedo me da!


Los problemas de Flash en Linux y la publicidad

Flash no!

Sinceramente no recuerdo haber hecho click en algún enlace o banner de publicidad y que eso se haya traducido en algo útil, para mi o para el anunciante, pero sí me parece razonable "soportar" una cierta cantidad de publicidad no intrusiva a cambio de disfrutar de contenidos gratuitos.

Desde que pasamos a esa web 2.0, los sufribles pop-ups fueron desapareciendo. Se ha dado paso a la publicidad llamada contextual, que nos muestra anuncios en base al contenido de lo que estamos viendo.

No solo eso, sino que la publicidad es muchas veces en modo texto, que es poco intrusivo y fácilmente descartable sin mucho esfuerzo; así que inventos como Adblock Plus, que eliminan la publicidad de las páginas que visitamos, tampoco me parece necesario.

Además a mi personalmente me aporta poco, tras tantos años, mis ojos descartan la publicidad con tanta rapidez que para mi es efectivamente invisible.

Pues al final he tenido que cambiar de opinión, y la culpa la tiene el pésimo soporte de Adobe Flash en Linux.

Ya no es por las veces que se rompe el plugin (generando cores, que es divertido contar al final del día), sino porque estos contenidos (no sé si porque están mal desarrollados), muchas veces necesitan el 100% de nuestra CPU a cambio de nada (¡puede ser un anuncio en algún punto de la página que ni hemos visto!).

Estoy con la última versión publicada por Adobe (la 10.0.42.34-release), y ni con esas. Llegamos al extremo de que ver un vídeo con un reproductor Flash es algo justo con mi portátil de un solo núcleo a 1.7MHz, si además hay un par de anuncios en la página... ¡imposible!

Esto lo he venido notando de un tiempo a esta parte, no sé si es porque hay un cambio de tendencia en la publicidad y se abusa del Flash, o que el reproductor de Adobe a empeorado varios enteros, pero me he tenido que instalar el Adblock Plus para recuperar (en parte) mi portátil y poder navegar como lo venía haciendo hace unos meses.

A ver si HTML5 y su soporte de reproducción de vídeo sin añadidos nos da un poco de tregua. Es absurdo que una máquina capaz de reproducir vídeos con calidad de imagen y audio quede obsoleta cuando se reproduce un cutre-anuncio de unos segundos.


Cuenta atrás, privacidad y GPG

Faltan unas horas para que comience la segunda Barcamp Valencia, que se presenta interesante con 156 inscritos, y más gente que probablemente se acercará.

Si hacemos caso a los resultados de la anterior edición, mañana tendremos mucha gente ;).

El año pasado me quedé con las ganas de organizar una signing party, aunque tampoco sé si hubiera tenido mucho éxito, porque creo que la privacidad y el cifrado es una idea difícil de vender estos días (igual me equivoco).

Un poco para quitarme la espinita, he preparado una charla introductoria a GPG, basada en parte en la clase que daba en la asignatura de libre configuración que impartía en la EPSE.

La presentación
Espero que la presentación guste

Me voy a centrar en los conceptos y la utilidad en el campo de la privacidad de las comunicaciones vía correo electrónico. Nada de consola, que creo que es algo de lo que se abusa cuando se explica GPG.

A ver si sale bien, mi charla y el evento en general. Ya contaré cómo queda todo ;).

Actualización: ya se ha terminado la segunda Barcamp Valencia, ¡y ha sido un éxito! Por ahora mi charla está en Slideshare: Privacidad y la red, introducción a PGP/GPG.


Otra cuestión a la hora de elegir hospedaje

Ya lo comentaba hace poco Jorge por aquí, que hay algunos servicios de alojamiento de proyectos que aplican restricciones a algunos países, y ahora se comenta en Barrapunto.

Concretamente son proveedores de servicio que se encuentran en EE.UU. y aplican las leyes (?) de embargo que ese país tiene contra Cuba, Irán, Siria, Corea del Norte y Sudán (no sé si alguno más).

Recordemos que una licencia es una norma particular, un contrato, que está sujeta a la regla de que no puede contradecir a una norma de rango superior (es como cuando se dice que una nueva ley puede ser anticonstitucional, porque contradice algún punto de la constitución... que es nuestra norma de más alto rango).

Si consultamos esta comparativa de servicios de alojamiento de software open source, veremos (en la columna de Countries blocked from *) que hay al menos dos proveedores que bloquean acceso por este motivo: Sourceforge y Google Code.

No voy a entrar en discusiones improductivas acerca de política ni embargos, pero en mi opinión, si decido que el Software Libre es la forma que quiero para distribuir mis programas, no voy a permitir restricciones artificiales a la parte en la que garantizo que puede ser usado por cualquiera para cualquier propósito.

Es evidente que se pueden buscar soluciones (se monta un espejo de un repositorio bien fácil), pero habiendo otros servicios sin estos problemas (que yo desconocía), creo que hay que tenerlo en cuenta a la hora de elegir dónde alojar nuestros proyectos.

Actualización: evidentemente hay más sitios. Por lo que parece Fedora Hosted también está bloqueando países.


La ley Zawinski

Según el jargon file sobre la ley Zawinski, se enuncia como (traducción libre):

Todo programa intenta expandirse hasta que es capaz de leer el correo. Los programas que no pueden expandirse tanto son reemplazados por aquellos que sí pueden.

Además va en contra de la idea detrás de UNIX, que se componía de pequeños programas que hacían una cosa y, además, la hacían bien.

Es cierto, el desarrollo de todo programa sufre presiones para hacer cosas que realmente no le corresponden.

Llevo tiempo dándole vueltas a qué le falta a Nautilus Flickr Uploader, y la verdad es que se me ocurre poca cosa sin caer en la ley Zawinski. Ajustar algunas partes para que vayan más suaves, y quizás (por petición popular) añadir la posibilidad de hacer throttling (para no quedarte sin conexión cuando se usa todo el ancho de banda para subir fotos).

Pero en realidad no tengo intención de que mi programa permita leer el correo, porque ya hace lo que quería que hiciera ;).

Seguro que más de uno conoce un caso claro que encaja con la idea de Jamie Zawinski.