lunes, 1 de septiembre de 2014

Recarga automática de página HTML en Firefox

Dos métodos para que Firefox nos ayude en el desarrollo

Supongamos que necesitamos editar HTML o CSS de forma remota, o quizás de forma local pero sin utilizar ningún editor tipo Dreamweaver o similar.

Es decir, que queremos realizar la edición como se hacía tiempo atrás: a puro golpe de teclado.

Hoy en día, podríamos hacerlo de forma cómoda con la consola web del propio Firefox del código HTML, JavaScript y CSS, con lo que vemos el resultado de forma inmediata.

Otra forma es como se hacía hace años: crear el código, ir al navegador y solicitar la recarga de la página para ver los cambios.

Pero esta forma de trabajar consume tiempo: el que pasa desde que dejamos el editor y solicitamos al navegador que recargue la página. Pueden ser unas décimas de segundo mientras pulsamos la combinación de teclas de cambio de aplicación, pero al cabo del día, suman muchos segundos.

Lo ideal es que no tuviéramos que dejar el editor, y que el navegador hiciera la recarga por sí solo.

Aquí comentaré dos soluciones.

ReloadEvery

Este complemento agrega un menú secundario al ratón, con el que podemos mandar recargar la página cada cierto tiempo, de forma automática.


Y con es ya tenemos resuelto el problema: le ponemos un tiempo de refresco de 5 segundos o menos, y ya podemos trabajar con el código HTML/CSS. En cuanto grabemos el código, pasará un breve espacio de tiempo, y ya veremos los cambios en el navegador.

Esta solución es la más sencilla, pero tiene un problema: si ponemos un tiempo de refresco, digamos de 5 s, entonces tendremos que esperar un tiempo entre 1 s y 5 s para ver el resultado. Y al cabo de unos minutos de trabajo, nos cansará esa imprecisión.

Podríamos configurar el complemento para que haga un tiempo de refresco más corto, pero entonces veremos que el navegador no responderá bien, ya que las peticiones de recarga podrían solaparse, y hacer que la página no salga bien, o incluso que el navegador se quede bloqueado. Y naturalmente, la carga se traslada al resto del sistema (sistema operativo y CPU).

MozRepl

Este complemento incorpora la facilidad de dialogar con Firefox, desde dentro del propio Firefox.

Después de instalarlo, vamos al menú Herramientas, MozRepl, y lo iniciamos.

El complemento crea un servidor en el puerto 4242, y permanece a la escucha. Podemos enviarle comandos para controlar a Firefox.

A continuación preparamos el siguiente programa:

#!/bin/bash

while inotifywait -e modify /home/user/Documentos/Proyecto/
do
    sleep 1
    echo "BrowserReload();" | nc -w 3 localhost 4242  > /dev/null
done

Este guión hace uso de dos programas: inotifywait (incluido en la distribución inotify-tools) y de nc (netcat).

El primero esperará a que se produzca un evento de modificación en el directorio que indiquemos, que será en donde estamos trabajando con el código de la página.

Una vez que ocurra el evento, programamos una espera de 1 s. Esto es necesario por que los comandos que siguen pueden ejecutarse tan rápido que el navegador puede leer la versión anterior a la que acabamos de modificar (se puede hacer la prueba de comentar esa línea, y comprobar si la recarga se realiza con los últimos cambios o no).

Finalmente, enviamos el comando de recarga al navegador, usando netcat (nc), por el puerto 4242 de la máquina local. Programamos un tiempo de 3 s de timeout por si MozRepl no cierra correctamente la comunicación.

Arrancamos el programa en una terminal aparte, y ya podemos empezar a editar el código de la página HTML/CSS. En cuanto mandemos grabar los cambios, al segundo siguiente, el navegador los presentará.

Sacado y modificado desde aquí.

jueves, 29 de abril de 2010

Informar a los cpantesters desde una dirección privada

Test::Reporter permite enviar un mensaje al grupo de los cpantesters con el resultado de la instalación de un módulo de Perl, en el sistema. Lo normal es que ese mensaje vaya por medio del módulo Net::SMTP (opción por defecto).

El problema ocurre cuando estamos en un ordenador particular, detrás de una línea ADSL privada o residencial. La mayor parte de las veces no podremos enviar el correo, porque el servidor de destino nos rechazará la conexión, precisamente porque el correo sale de una dirección IP reservada al entorno residencial.

La solución pasa por configurar y modificar CPANPLUS para que el correo se envíe por medio del servidor SMTP de nuestro proveedor de Internet.

Primero, hay que editar el fichero /root/.cpanplus/lib/CPANPLUS/Config/User.pm. Esto lo podemos hacer de forma cómoda desde el propio entorno de CPANPLUS, entrando en cpanp y ejecutando s edit user. Se arrancará el editor por defecto junto con una copia del fichero, donde podremos modificarlo.

Los valores que debemos poner son los siguientes:
  • cpantest => 1
  • cpantest_mx => 'correo.nuestroservidordecorreo.com'
  • email => 'nosotros@nuestrocorreo.com'
  • debug => 1 (si queremos ver los mensajes de actividad en la conexión)
Lo más seguro es que nuestro servidor de correo exija nuestra autenticación, por lo que deberíamos indicar por algún lado, nuestro nombre de usuario y contraseña... pero... no se encuentra ningún lugar dónde hacerlo. O no he sabido buscarlo.

La solución que he encontrado es editar CPANPLUS/Internals/Report.pm, en la función _send_report(), justo después de crearse el objeto my $reporter = Test::Reporter->new(), podemos agregar unas líneas como estas:

$reporter->transport(
'Net::SMTP::TLS',
User => 'usuario',
Password => 'contraseña'
);


De esa manera, el transporte del correo electrónico, desde nuestro ordenador hacia nuestro servidor de correo en Internet, usará el módulo Net::SMTP::TLS, que nos permitirá autenticarnos con un nombre de usuario y contraseña, que también indicamos.

Es posible que no sea necesaria tanta historia, pero al menos, esto funciona.

Actualización: indicado mejor el fichero a modificar.

Actualización: En la nueva versión de CPANPLUS v0.9004, Internals/Report.pm ya está modificado para que admita un nuevo atributo en el fichero de configuración:

cpantest_reporter_args => {
from => 'correo@electronico_del_que_envia.com',
transport => 'Net::SMTP::TLS',
transport_args => [ User => 'usuario', Password => 'contraseña'],
}

por lo que ya no es necesario hacer ninguna otra modificación para el envío de correos.

Actualización: desde el 1 de septiembre de 2010 ya no es necesaria esta operación, pues el proceso ha cambiado (de correo a HTTP) y se ha simplificado la instalación. Más detalles.

viernes, 19 de febrero de 2010

Nueva versión del medallero olímpico en Wikipedia

Pues debido al éxito de mi programa que actualizaba el medallero de los Juegos Olímpicos de Pekín 2008 en la Wikipedia española, algunos editores me han pedido que hiciera lo mismo para los juegos de Vancouver 2010. Y ya está funcionando desde hace unos días. Cada 5 minutos, coloca las nuevas medallas.

El programa está escrito para Perl v5.10. Y los módulos que he usado son:

domingo, 20 de septiembre de 2009

Problemas de espacio en el Asus Eee PC

Después de un tiempo de trabajar con el Asus Eee PC, quieres instalarle más y más programas o, sencillamente, instalarle las actualizaciones que el sistema te va pidiendo que vayas poniendo.

Antecedentes
Bueno, pues resulta que los de Asus, en el momento del diseño, decidieron que la forma de particionar este aparato debiera ser algo más particular que la del resto.

Por defecto, la disposición es algo así:
S.ficheros          Tamaño     Usado     Disp  Uso% Montado en
rootfs 695716 532132 128244 81% /
/dev/sda1 695716 532132 128244 81% /
none 695716 532132 128244 81% /
tmpfs 514084 20 514064 1% /dev/shm
tmpfs 131072 28 131044 1% /tmp
/dev/sdb1 15512328 335624 14388720 3% /home
/dev/sda1 3161695 2896624 265071 92% /ro

Se observa que la mayor parte del pastel se la lleva el usuario, en el directorio /home, lo cual es lógico porque se supone que va a necesitar la mayor cantidad posible de espacio para guardar sus documentos.

Observemos que, además, el sistema está diseñado para protegerse de los usuarios manazas: hay una partición de solo lectura (la sda1), donde reside el sistema operativo y la configuración básica. Esto es necesario por si el usuario desea hacer una recuperación "desde fábrica" de su sistema.

El problema
Pero claro, a lo largo de la vida de un sistema, hay que hacerle modificaciones. Y no se pueden guardar en una partición de solo lectura. Por eso, el Linux monta la partición de solo lectura con el sistema aufs, que permite guardar los ficheros modificados en otra partición. De esta manera, tenemos un sistema utilizable y recuperable: la partición de solo lectura volverá a tomar las riendas del equipo cuando el usuario quiera recuperar la configuración de fábrica, mientras que también, en el trabajo diario, se puede ir añadiendo y actualizando el sistema.

Y aquí empiezan los problemas: la partición donde se guardan esas pequeñas variaciones de los ficheros de la partición de solo lectura, es muy pequeña (unos cientos de megabytes). La consecuencia es que hay un límite en el número de aplicaciones que podemos instalar; incluso de las propias actualizaciones del sistema.

La(s) solución(es)
  1. Instalar otro sistema operativo, como el EeeUbuntu, Xubuntu, Debian for EeePC o cualquiera de las distribuciones posibles para esta máquina,

  2. Entrar en la partición donde se guardan las particiones y borrar los ficheros que guardan las diferencias (algo peligroso, pero factible), como se comenta en este blog ruso,

  3. Modificar el sistema para la partición donde se guarden las modificaciones y diferencias, sea la del usuario (la grande).
Para esto último, basta con hacer lo siguiente (tomado de este foro): abrimos la terminal (Ctrl+Alt+t) y ejecutamos lo siguiente
sudo su -         # Nos hacemos superusuarios
mkdir /home/aufs # Creamos un directorio, en el home:
df -aH # Comprobamos el espacio libre que tenemos
# Ahora hacemos el montaje del nuevo espacio
mount -o remount,prepend:/home/aufs=rw,create=mfs /
df -aH # Volvemos a comprobar el espacio libre, para ver las diferencias

Si hemos notado el cambio (la partición raíz / toma el espacio prestado del /home) entonces es que todo ha ido bien.

Esto solo funcionará mientras tengamos la máquina encendida. Al volver a encenderla, solo tendremos que ejecutar el comando mount anterior.

Si queremos que esto se haga de forma automática, en el arranque, solo hay que editar el fichero /usr/sbin/services.sh e incorporar la línea del mount justo después de la primera línea del PATH=...

Ahora ya podemos agregar varias fuentes a apt e instalar el software que queramos.

De todas maneras, la opción de instalar un nuevo sistema, es mucho mejor.

viernes, 26 de junio de 2009

Darse de baja de Vodafone

Sí, amigo, debes admitirlo... todo tiene su fin... incluso hasta la relación de amor y odio con tu compañía telefónica.

Pero no es tan fácil como decir un "hasta luego". No, no, y no.

Ella se resistirá. Hará la posible, lo imposible, lo legal y... no hará lo ilegal porque no puede, pero sí hará lo más estúpido, kafkiano y burocrático posible, todo lo que esté en su mano, para impedir que te marches...

Y una vez que ya estés fuera, se vengará de ti. ¿Por qué? Pues porque eres un mierda, un sinvergüenza, un presunto delincuente, un hijo puta, un cabrón, por dejarla sola.

Así que no te extrañe que tenga un comportamiento muy diferente de cuando aquellos gloriosos días te llamaba, a ti, que, por ser su amante preferido, se acordaba, te añoraba, y te decía que tenía una sorpresa para ti... a veces 1000 mensajes cortos... otras veces, tarifas bajas... teléfonos baratos...

Nada... mentiras a medias... porque un día descubres el concepto "letra pequeña". Sí, ella me adora, pero... es solo por el sucio dinero de mi bolsillo.

Pues nada... se acabó.

Proceso: llamar a otra compañía y darle tus datos. Vodafone intentará darte una oferta, que naturalmente, rechazarás. Como verá que no puede hacer nada, empezarán las amenazas: "Tiene un teléfono con contrato de permanencia, y el plazo acaba en dos semanas. Si quiere liberarlo antes, tendrá que abonar 70€".

Bueno, pienso... puedo esperar esas dos semanas y llamar para desbloquear el teléfono más tarde, pero mientras tanto, sigo con el proceso de baja. Así me saldrá el proceso de liberación gratis.

Craso error...

Vodafone hará lo siguiente:
  1. Un día, sin previo aviso, hará el cambio de portabilidad de tu número, desconectando el servicio: te quedarás sin servicio telefónico. Afortunadamente, la nueva compañía te habrá enviado las nuevas tarjetas, así que sí que tienes servicio de telefonía... pero...

  2. no puedes usar tu teléfono porque no está liberado. Y el plazo acaba en unos días. Bueno... te buscas un teléfono viejo que sabes que esté libre y lo usas mientras dejas pasar los días. Otro error que has cometido...

  3. Vodafone, sin previo aviso (ni factura emitida), pasará un cargo por los servicios telefónicos consumidos hasta la fecha (lo cual es lógico), Y... un cargo de 100€ por liberación del móvil...
¡Qué divertido! Cobran por la liberación "porque la línea se ha dado de baja".

Menos mal que... les llamas y pides explicaciones, que, amablemente, te dan. Y también, muy amablemente, "se dan cuenta" de que no son 100€ si no los 70€ comentados unos días antes. Así que te devolverán la diferencia... dentro de 20 días... o así(*).

Vale, acepto que esta compañía empieza a hacer cosas absurdas y comienzo a entender que su política es de las de cobrar primero y preguntar después.

La lógica implica que, a pesar de que me quedan HORAS para terminar el plazo de liberación del móvil, ya puedo hacerlo porque a) Ya no estoy en la compañía y, b) He pagado la "mordida" de la penalización.

Pues no...

Los de Vodafone, una vez más... demuestran su incompetencia, su mala bilis, su mala gestión, su cabezonería, su mal estar, su ...

-- Oiga, mire, señorita... que he pagado un montón de pasta por el teléfono, que ha pasado el plazo... el IMEI del teléfono es este... que me tengo que ir de viaje en 5 días...

-- Pues no... lo siento caballero, pero ese teléfono, por haber sido comprado en una tienda, no tengo su IMEI, por lo que necesito que me envíe por FAX la factura de compra del teléfono. Envíelo al teléfono 607132423. Cuando lo tengamos, en unos díez días le responderemos. Adios y buenos días.

¡Oh, sí! Su venganza final... destrozarte tu primer viaje de vacaciones... destrozarte la estupenda visión que tenías de empresa en la que has estado DOCE AÑOS, y ni un problema... para acabar así, apaleado y rebuscando por cajas y archivos un papel con año y medio de existencia.

Señores de Vodafone: por la presente les comunico que me comprometo a lo siguiente:
  • Le enviaré el fax mañana mismo, con la factura correspondiente, si la encuentro,

  • El lunes a primera hora presentaré una denuncia en la oficina de información al consumidor, por secuestro y fraude (pensaba ponerlo por gilipollez e incompetencia pero mi abogado diría que no sería efectivo: seguirán siendo gilipollas e incompetentes),

  • Ni yo, ni mi familia, ni mis amigos, ni mis clientes, ni mis proveedores, ni la gente que me conoce o ha conocido personalmente, ni las miles de personas que me conocen por Internet, volveremos a ser clientes de Vodafone. Nunca más. Ya me encargaré de ello.
Qué forma más estúpida de perder clientes...

Y vosotros que estáis leyendo esto, ya sabéis lo que os espera, si sois "malos" con vuestra telefónica.

(*) Actualización: me acaban de llamar para confirmarme que la devolución tardará entre 10 y 15 días... Xtupendo. <ironic>Qué alegría me han dado</ironic>

Actualización: después de enviar el fax con la factura y esperar un par de días, he llamado para intentar, otra vez, liberar el móvil. Sorpresa... me dice la señorita que, debido a que la línea ya está portada a otra empresa, y ha pasado el plazo de liberación (?) del teléfono, ellos ya no pueden liberármelo (!!!!). Hago entonces la pregunta mágica: ¿Y quien puede? Después de veinte minutos (20) de estar llamando, por fin me hacen caso, y me dan el código de liberación. ¡Por fin! Ya vendrá después la factura con todo lo gastado en estas llamadas, ya.

miércoles, 15 de abril de 2009

Impedir que el Exim cambie la codificación del Asunto

Bueno, les cuento lo descubierto...

El proceso que ocurría era el siguiente:

* El emisor mandaba un mensaje de correo con el asunto puesto en codificación utf8

Por ejemplo: el emisor escribe esto:

Subject: Prueba de acentos: áéíóúñÑ

y su programa de correo lo transforma en:

Subject: Prueba de acentos: =?UTF-8?B?w6HDqcOtw7PDusOxw5E=?=

que es una forma de transmitir caracteres "extraños para los anglosajones". Fijaros que pone UTF-8 en medio, para indicar que lo que sigue es una codificación especial.

* Al llegar el correo a nuestro servidor de correo, nuestro programa gestor de correo QUITABA la codificación de los caracteres acentuados que había en el asunto, PORQUE está contemplado en el protocolo estándar de correo: en las cabeceras se permite poner los acentos de forma directa, sin codificación ninguna.

Por ello, nuestro programa de correo, al recibir:

Subject: Prueba de acentos: =?UTF-8?B?w6HDqcOtw7PDusOxw5E=?=

Lo dejaba así:

Subject: Prueba de acentos: áéíóúñÑ

y se esperaba que el programa de correo entendiese esos acentos, PORQUE en el resto del mensaje, sí que está indicada la codificación:

Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

y por esa razón se ve perfectamente en los programas de correo más modernos.

El problema está ahí: no todo el mundo usa un programa de correo moderno, como es el caso de los Microsoft Outlook. En esos programas, al encontrarse con el asunto

Subject: Prueba de acentos: áéíóúñÑ

lo saca tal cual en pantalla (lo cual es lógico), PERO resulta que el usuario, seguramente, NO ESTÁ TRABAJANDO con la misma codificación que los caracteres mostrados. La consecuencia es que el usuario ve

Subject: Prueba de acentos: áéíóúñÃ

Esos caracteres extraños, juntos, siguen siendo los mismos acentos de antes. Lo que varía es la forma en que el usuario los ve.


Este problema es derivado de que cada ordenador trabaja con una codificación distinta.

La tendencia tecnológica actual es usar SIEMPRE la codificación UTF-8, tanto a la hora de crear como de leer documentos/correos.

Pero, mientras tanto, los programas antiguos nos darán estos dolores de cabeza.

La solución fue editar exim4.conf y donde pone $h_subject, cambiarlo por $bh_subject, según lo indicado en http://www.exim.org/exim-html-current/doc/html/spec_html/ch11.html#SECTexpansionitems

Actualización: Por alguna extraña razón, algunos clientes emiten un retorno de carro y/o avance de línea después del Subject. Cambio la opción de $rh_subject a $bh_subject.

viernes, 13 de marzo de 2009

Sincronización de contactos y calendarios

El tema de la sincronización es tan compleja como lo de la torre de Babel...

Yo he tardado años en encontrar una solución... y no es segura que se mantenga en el futuro porque cada vez que cambias de ordenador, sistema operativo y/o teléfono, te la juegas y puede que quede algo sin sincronizar.

Bueno... te cuento mi situación y luego mi solución. No tiene porqué ser la mejor solución, pero...


Yo tengo 5 ordenadores que manejo al día (dos en dos oficinas distintas, y 3 ordenadores en casa) más un teléfono móvil.


Correo electrónico


No hay problema en leer y mandar el correo desde cualquiera de ellas, gracias al uso del protocolo IMAP. Pero sí lo hay en el tema de los contactos. Poseo 4 buzones de correo básicos (dos de dos empresas y otros dos personales). Uno de los buzones personales es de Gmail.

Bueno, la idea es cómo tener todos los contactos en todas las máquinas. Y que cuando agregues un contacto, puedas tener acceso a él.

Dejemos un momento aparte al teléfono móvil y a Gmail. El problema se reduce bastante: en todas las máquinas uso entonces Mozilla Thunderbird. A este programa se le puede añadir complementos. Uno de ellos es Addressbooks Synchronizer.

Este complemento permite poner la libreta de direcciones en una carpeta IMAP, en el servidor, así que de esa manera, y de un plumazo, tengo resuelto el tema de sincronizar contactos entre todos los ordenadores. Y como a Thunderbird le puedes decir que agregue de forma automática los nuevos destinatarios en la libreta, toda la sincronización es invisible.

El problema que queda aparte es Gmail y el teléfono.

Entre los dos, había resuelto el problema de esta manera: Google tiene un servicio que se llama Google Sync, así que me lo bajé al móvil, y perfecto: los contactos entre los dos se sincronizaron y ya está. Bueno, algunos contactos aparecieron duplicados porque los nombres de los contactos diferían un poco.

Y ahora queda lo más difícil... cómo sincronizar entre Gmail (alias, teléfono), y entre la libreta de direcciones IMAP de Thunderbird.

La solución la encontré esta mañana, en la web de Zindus.com. Allí te puedes bajar un complemento para Thunderbird, que permite sincronizar los contactos entre los dos.

Y ahora viene lo malo... de repente me he encontrado con más de 500 contactos, 300 de ellos duplicados debido a que, es claro: la información que tenía de un contacto en Gmail no coincidía con el que tenía en Thunderbird. Así que ahora, con un poco de calma, hacer limpieza.

Aún queda por hacer unas cuantas pruebas más... para ver qué tal queda.

Eso sí, hay un detalle que no está bien: en Thunderbird, cada contacto tiene un montón de campos, pero Google no: los mete todos en un solo campo.


Calendarios


Yo uso tres tipos de calendarios:
  • El del teléfono, y del que todavía no he encontrado forma de sincronizar, pero hay herramientas
  • Los muy personales (el propio de cada ordenador -uno por máquina-, los cumpleaños y el personal -estos dos, compartidos-)
  • Los menos personales y los públicos, que los tengo en Google Calendar.

La herramienta que uso para ver los calendarios en los ordenadores es, dentro de Thunderbird, con el complemento Lightning.

Este complemento permite tener el servicio de calendario y tareas. Si no lo queremos usar dentro de Thunderbird, Mozilla te lo ofrece como programa separado, que se llama SeaMonkey.

Además de crear calendarios locales, este complemento permite ver los calendarios que tengamos en Google Calendar (¡ojo!, he dicho ver, solo ver). Más complicación es para los calendarios que queramos compartir entre las máquinas.

Para esto, he hecho lo siguiente: en el servidor de Internet he creado un directorio protegido con contraseña y he configurado el acceso web para que se utilice el protocolo WebDAV -necesario para poder bajar y subir ficheros en nuestro directorio personal en el servidor-.

En el trabajo diario, como tengo siempre abierto el Firefox y el Thunderbird, digamos que tengo entonces todos los calendarios disponibles. Y en todas las máquinas (excepto el teléfono) tengo los mismos calendarios.

Bueno, esto es un resumen. Me he comido, por ejemplo, cómo configurar los calendarios remotos, pero no quería hacerlo muy largo :)


Problemas de usar Google Calendar:
  • Es necesario que cada participante tenga un correo de Gmail (me parece que esto último ya no es necesario)
  • Google "leerá" vuestro calendario para sacar estadísticas, lo cual no es de gusto de todos.


Ventajas de usar Thunderbird+Lightning o SeaMonkey con un servicio WebDAV:
  • El formato del calendario es estándar (ICS) con lo que llevarlo al teléfono móvil no debería ser problemático (por ejemplo, iPhone)
  • Nadie verá vuestro calendario, a diferencia del de Google Calendar
  • Como añadido, nos da la visión de Tareas, cosa que no tiene Google Calendar.

Problemas:
  • El número de personas a actualizar y meter nuevos eventos debe ser reducido (no he probado a ver qué pasa si hay muchas personas actualizando datos a la vez). Para un uso normal, no hay problemas, pero no tengo una cifra exacta. Digamos que para una empresa de tipo medio no habría problemas
  • El tiempo de refresco del calendario no es tan instantáneo como el Google Calendar. De hecho, pueden pasar minutos hasta que aparezcan cambios (o hasta que solicitemos un refresco manual).