Prescindir de AvantGo – Plucker

  1. El camino tortuoso
  2. El camino liso

1) El camino tortuoso

AvantGo es una red de páginas Web especialmente diseñadas para la navegación off-line en una PDA. Al conectar la PDA con la base USB, el ordenador principal (equipado con Windows) busca en la red los canales que nosotros hayamos especificado y los descarga a la PDA. El formato AvantGo intenta ahorrar espacio en la preciosa memoria de la PocketPC, por lo que las fotos son menos y más pequeñas, el texto intenta ir al grano, etc..

Bien, AvantGo tiene una estética muy cuidada, pero detrás se esconden dos problemas: es poco flexible, porque depende de canales predefinidos por los webmasters, y no hay (que yo sepa) ningún programa capaz de sincronizar nuestro AvantGo desde una máquina Linux. Accesoriamente, resulta que AvantGo es un sistema propietario, no libre, pero aunque no nos guste, no considero que eso sea un defecto en sí mismo.

La solución es sustituirlo, claro. Y poner en su lugar un sistema más flexible, que podamos configurar a nuestro gusto, y que sí pueda sincronizarse de forma desatendida desde Linux. La primera posibilidad que se nos viene a todos a la cabeza es Plucker.

Lo primero que necesitamos es el cliente a instalar en nuestra PDA. Plucker fue pensado y diseñado para Palm, así que para PocketPC de momento solo tenemos un cliente en fase alfa, Vade-Mecum.

Lo segundo que necesitamos es el servidor, el propio motor plucker. Os aconsejo que le echeis un buen vistazo a la documentación, que podeis bajaros desde la página de downloads. En el caso de Gentoo, podemos instalarlo simplemente con un "emerge plucker".

Ahora podeis usar plucker-desktop para configurar y organizar vuestros propios canales, de tal forma que la página web que vosotros especifiqueis se baje y se convierta a un fichero PDB concreto en vuestro disco duro. Sin embargo, no os recomiendo plucker-desktop, porque para eso hay otro programa mejor, Sunrise. Pero sí os puede ser útil el demonio Spider.py que se puede encontrar en /usr/lib/python2.3/site-packages/PyPlucker, aunque os recomiendo que lo linkeis a un sitio más accesible, porque si no es un peñazo.

# ln -s /usr/lib/python2.3/site-packages/PyPlucker/Spider.py \
> /usr/local/bin/Spider.py

Os recomiendo un "Spider.py --help" para que veais todas las opciones disponibles. Spider, tiene una gran ventaja sobre plucker-desktop: es un programa de línea de comando y desatendido, con lo que puede meterse en el crontab y olvidarse de él. ¿Vais captando?. La gracia está en crear un script tal que así:

------------ Comienza script actualiza_plucker ----------------
#!/bin/bash
Spider.py --pluckerhome=/home/lacofi/.plucker \
--pluckerdir=/home/lacofi/.plucker \
--doc-file=LibertadDigital \
--bpp=8 --maxdepth=3 --stayondomain \
-H http://movil.libertaddigital.com/pda

Spider.py --pluckerhome=/home/lacofi/.plucker \
--pluckerdir=/home/lacofi/.plucker \
--doc-file=BBCMundo \
--bpp=8 --maxdepth=3 \
-H http://www.bbcmundo.com/movil
------------ Termina script actualiza_plucker -----------------

De tal forma que cada vez que ejecutemos "actualiza_plucker", el demonio Spider.py busque y transforme las direcciones Web especificadas con la opción "-H". creando un fichero LibertadDigital.pdb y BBCMundo.pdb en el directorio /home/lacofi/.plucker, según el ejemplo que he puesto. Somos libres de añadir las opciones que queramos y las páginas que queramos, por lo que os recomiendo de nuevo que os leais "Spider.py --help" y la documentación de plucker.

Una vez hecho esto, es muy fácil meter este comando en un crontab para que se ejecute todos los días a las cuatro de la mañana, por ejemplo. ¿Os acordais de que en el script "synce" de hotplug, yo había metido una línea extra que llamaba a un script externo (sudo -u lacofi /opt/programas-usuario/subelo)?. Pues ahora podemos aprovecharnos de ellos editando el script tal que así:

------------- Empieza script subelo ---------------------------
#!/bin/bash
LOG="/var/log/syncipaq.log"
FECHA=`date`
sleep 3

echo " " >> $LOG
echo "--- $FECHA ---" >> $LOG

pgrep -f "/usr/sbin/pppd call synce-device"
resultado=$?

if [ $resultado -eq 0 ]; then
  echo "La iPAQ esta conectada. Correcto." >> $LOG
  sleep 3
  for archivo in `find /home/lacofi/.plucker/*.pdb`
  do
    nombre=`basename $archivo`
    pcp $archivo ":/Tarjeta de almacenamiento/My Documents/$nombre.pdb"
    error=$?
    if [ $error -eq 0 ]; then
      echo "--> Transferido `basename $archivo.pdb` a la iPAQ" >> $LOG
    else
      echo "--> No pude subir `basename $archivo.pdb` a la iPAQ" >> $LOG
    fi
  done
else
  echo "No he detectado ninguna iPAQ!!" >> $LOG
fi
------------- Termina script subelo ---------------------------

De esta forma, el script (que se ejecutará cada vez que coloquemos la PDA en la base USB), se encargará de subir automáticamente todos nuestros ficheros Plucker a la PDA (concretamente a la tarjeta SD), para que los tengamos disponibles cuando nos la llevemos al trabajo o a otro sitio. Adicionalmente, también podemos meter un comando "subelo" en nuestro crontab, a las 6 de la mañana (después de que haya terminado el comando actualiza_plucker), para que incluso sin mover la PDA, también se actualicen los archivos.

Un par de precisiones. Observad que el script "subelo" deja un registro, un LOG de lo que va haciendo, y lo coloca en "/var/log/syncipaq.log". Sin embargo, este script se ejecuta siempre como "lacofi", no como "root", por lo que para evitar "accesos denegados", tendremos que hacer, como root:

[root@jeanette:~]# touch /var/log/syncipaq.log
[root@jeanette:~]# chown lacofi:users /var/log/syncipaq.log
[root@jeanette:~]# exit

En el caso de Gentoo es fácil que nos encontremos con un pequeño problema: las imágenes de 8 bits no se ven, solo las de 1 bit. Esto es porque hay un bug, que se arregla metiendo las siguientes lineas en el fichero "~/.pluckerrc" (lo siento, no he conseguido que funcionen las imagenes de 16 bits):

[POSIX]
close_on_exit=0
close_on_error=0
palm1bit_graymap_file=/opt/maps_palm/palmgray1.map
palm2bit_graymap_file=/opt/maps_palm/palmgray2.map
palm4bit_graymap_file=/opt/maps_palm/palmgray4.map
palm8bit_stdcolormap_file=/opt/maps_palm/palmcolor8.map

Y después:

[lacofi@jeanette:~]$ su
contraseña:
[root@jeanette:/home/lacofi]# cd /opt
[root@jeanette:/opt]# mkdir maps_palm
[root@jeanette:/opt]# chmod a+rx maps_palm
[root@jeanette:/opt]# cd maps_palm
[root@jeanette:/opt/maps-palm]# cp /usr/share/doc/netpbm-10.20/palm* .
[root@jeanette:/opt/maps-palm]# gunzip palmgray1.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmgray2.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmgray4.map.gz
[root@jeanette:/opt/maps-palm]# gunzip palmcolor8.map.gz

¿Mas cosas que se pueden hacer?. Bueno, Spider.py no soporta RSS. Para eso necesitamos un programa externo que nos convierta el código RSS a HTML, para que Spider.py pueda a su vez convertirlo a PDB. Ese programa podría ser el que yo uso, hyperfeeder. No existe en los repositorios Gentoo, así que tendrás que compilarlo tú mismo, pero no tiene ningún misterio. La configuración es muy fácil, solo se necesita un fichero "~/.hyperfeeder/config" que contiene algo así:

DocumentRoot=/home/lacofi/.plucker/rss/
DocumentName=rss.html
IgnoreTimes
init2=NoticiasRSS

Y un fichero "~/.hyperfeeder/list" que contiene una lista de sitios:

http://www.pjorge.com/rss
http://www.ciencia-ficcion.com/noticias_sdcfcom.rss

Pero te recomiendo que leas las instrucciones en la página Web de hyperfeeder.

Después basta con ejecutar hyperfeeder desde crontab, pongamos a las dos de la mañana. A esa hora se creará un fichero /home/lacofi/.plucker/rss/rss.html que Spider.py podría usar más tarde. Eso sí, los colores que ajusta hyperfeeder para el texto son horrorosos, y no se ven bien en Vade-Mecum, así que te recomiendo cambiar el código (eh!, esto es código abierto!). Para eso, edita el fichero /usr/src/hyperfeeder/src/config.cc y busca la cadena "body vlink=". ¿Ya?. Pues donde pone:

body vlink=\"#FFCBCB\" text=\"#FEFFBB\" bgcolor=\"#00025C\"

Debería poner:

body vlink=\"#FFCBCB\" text=\"#00025C\" bgcolor=\"#FEFFBB\"

(Observa que he intercambiado los valores de "text" y "bgcolor"). Ahora ya puedes compilar.

Como ves, lo hemos organizado todo para esto: A las 2 de la mañana, hyperfeeder recoge las semillas RSS y las transforma en un único fichero HTML. A las 4 de la mañana, el script actualiza_plucker recoge diversas fuentes HTML (en Internet o locales, eso no importa), y lo transforma todo a varios ficheros Plucker. Por último, a las 6 de la mañana, se pondrá en marcha el script "subelo", que enviará a la PDA todos los ficheros plucker. Este último script también se pondrá en marcha cada vez que enchufemos la PDA a la base USB. Todo ello de forma automática y desatendida. No está mal, ¿no?.

2) El camino liso

Está bien, pero es un poco complicado de configurar, ¿no?. Para los interesados en complicarse poco la vida, hay otra solución más sencilla y de más calidad: Se trata de Sunrise. Sunrise es un programa Java, así que tendrás que instalar alguna versión de Java en tu linux. En el caso de Gentoo basta con un "emerge blackdown-jre".

Sunrise viene comprimido en un tar.gz que hay que descomprimir, por ejemplo en "/opt", con lo que quedará todo en un directorio "/opt/sunrise-0.42c" dependiendo de la versión. Pero Sunrise no funcionará sin más, por lo menos en Gentoo. Habrá que cambiar el propietario del directorio "/opt/sunrise-x.xxx" y de su contenido para que nos permita la lectura y escritura como usuarios normales. Además, deberíamos crear un script "/usr/local/bin/sunrise" que llame al programa de forma adecuada:

#!/bin/sh
cd /opt/sunrise-0.42c
./run.sh
cd -

Una vez ejecutado Sunrise tiene muchas ventajas sobre plucker-desktop. Funciona gráficamente, se configura con mucha facilidad y lee correctamente código Web, HTML local, así como RSS sin necesidad de hacer nada especial. Cuando se pulsa en cerrar queda en realidad en el System Tray tanto de KDE como de Gnome, funcionando en background. Y el aspecto final de los ficheros plucker que se crean es simplemente perfecto, incluidas las imágenes de 16 bits.

Su único inconveniente es que solo funcionará en un interfaz gráfico, no en línea de comandos, por lo que tienes que estar logado para que cumpla su función. Si tu máquina la usan dos personas (como es mi caso), y no siempre estás logado, entonces Sunrise solo proporcionará la actualización de la última vez que te deslogaste. No puedes ejecutarlo a altas horas de la madrugada en el crontab pero supongo que para la gran mayoría de la gente eso no es un inconveniente serio, así que a disfrutarlo se ha dicho.

Naturalmente, sigue siendo necesario un script subelo que se encargue de pasar los ficheros plucker creados a la PDA. Pero eso ya lo hemos visto y es muy fácil. :-)

El único problema que nos queda ahora es el cliente de la PDA, Vade-Medum. Es un cliente en fase alfa, y eso ya nos indica que es muy inestable y se cuelga a menudo. De hecho, esto es lo que ha terminado por decidirme a adoptar otra solución más fiable, hasta que ese tema haya quedado solucionado. Esa solución alternativa no es otra que iSilo.

Be Sociable, Share!

Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.

Deja un comentario

Disculpa, debes iniciar sesión para escribir un comentario.