viernes, 22 de junio de 2007

Recibir e-mail en el celular desde el PC vía bluetooth

Primero, el parche antes de la herida: No soy un experto en shell así que reconozco que mi solución no debe ser la más elegante. Pero bueno.

La necesidad era la siguiente: Quería recibir notificaciones de correo electrónico a mi teléfono móvil a través de bluetooth. Por ejemplo, normalmente dejo el PC de escritorio encendido las 24 horas del día y si en algún momento me encuentro alejado de mi escritorio y recibo un e-mail, me gustaría saber de antemano si vale la pena acercarme al escritorio para atenderlo o no. Busqué por internet y no encontré nada similar así que me puse a picar.

Materiales:

El primer paso es averiguar la dirección MAC de nuestro teléfono y el canal por el cuál podemos enviar las notificaciones. El paquete bluez-utils incluye una herramienta que nos puede ayudar. Conectamos nuestro adaptador bluetooth al computador, habilitamos la conexión bluetooth en el móvil y abrimos una consola de comandos y ponemos:
sdptool search OPUSH
Lo que nos devolverá algo como esto:
Inquiring ...
Searching for OPUSH on 00:02:EE:6D:ED:1A ...
Service Name: OBEX Object Push
Service RecHandle: 0x10016
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 9
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x454e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"OBEX Object Push" (0x1105)
Version: 0x0100

En negrita encontrarán la MAC y el canal respectivamente.
Luego, con el comando obex_test (que encontramos en el paquete openobex-apps) podemos hacer una prueba para enviar un archivo a nuestro celular, le damos como parámetros la MAC y el canal, de esta forma (en negrita aparece lo que el usuario ingresa):

obex_test -b 00:02:EE:6D:ED:1A 9
Using Bluetooth RFCOMM transport
OBEX Interactive test client/server.
> c
Connect OK!
Version: 0x10. Flags: 0x00
> p
PUT file (local, remote)> /pics/tux.jpg tux.jpg
name=/pics/tux.jpg, size=15811
Going to send 15811 bytes
Made some progress...
Made some progress...
Made some progress...
PUT successful!
> q

En este ejemplo, se ha enviado al teléfono la imagen tux.jpg que se encuentra en /pics/.
Hecho con éxito estos pasos, procedemos a descargarnos un script que nos permita hacer todo este trámite en una sola línea de comando. Este script se llama obexsend.sh y lo pueden descargar de aquí.
obexsend.sh espera como parámetros la dirección MAC, el canal y el archivo a enviar:

obexsend.sh 00:02:EE:6D:ED:1A 9 imagen.jpg

Ahora, creamos el siguiente script (reemplazando donde sea necesario) que yo llamé SendBluetoothAlert.sh:

#! /bin/sh
cd ~/inbox/
name=$(ls -tr |tail -1 |awk '{print $NF}')
from=$(grep -i -e from: $name)
subject=$(grep -i -e subject: $name)
rm /home/francisco/NewMail.txt
x1=$(echo "$from" | tee /home/francisco/NewMail.txt)
x2=$(echo "$subject" | tee -a /home/francisco/NewMail.txt)
/home/francisco/bin/obexsend.sh 00:02:EE:6D:ED:1A 9 /home/francisco/NewMail.txt

Ahora explicaré qué hace cada línea para que lo adapten a su medida.

Primero, nos posicionamos en el directorio donde Kmail almacena los mails:
cd /home/francisco/.kde/share/apps/kmail/mail/inbox/cur/

Almacenamos el nombre del archivo más reciente que existe en el directorio (el email nuevo):
name=$(ls -tr |tail -1 |awk '{print $NF}')

A partir de este archivo, creamos dos variables que almacenen el remitente y el asunto del e-mail:
from=$(grep -i -e from: $name)
subject=$(grep -i -e subject: $name)

Borramos nuestro archivo NewMail.txt que es el que enviaremos por bluetooth para "vaciarlo":
rm /home/francisco/NewMail.txt

Agregamos los campos remitente y asunto a nuestro archivo NewMail.txt:
x1=$(echo "$from" | tee /home/francisco/NewMail.txt)
x2=$(echo "$subject" | tee -a /home/francisco/NewMail.txt)


Finalmente enviamos el archivo NewMail.txt a nuestro móvil utilizando obexsend.sh (esta es una sola línea):
/home/francisco/bin/obexsend.sh 00:02:EE:6D:ED:1A 9 /home/francisco/NewMail.txt

Otorgamos permisos de ejecución a nuestro script: chmod +x SendBluetoothAlert.sh y estamos casi listos. Ahora vamos a la sección de notificaciones de Kmail y elegimos que ejecute nuestro script cada vez que tengamos un nuevo e-mail.

Eso es todo. Esto lo hice en una tarde y no creo que vuelva a trabajar en este tema pero aún falta mucho por mejorar:
  • Si llega un mail y estamos fuera del alcance del móvil (normalmente 20 metros); perdimos. Hay que implementar un sistema de cola y/o de reintentos.
  • Si se descargan dos nuevos mails del servidor, probablemente se notifique sólo del más reciente (no he probado ese caso aún).

Referencia:
1. Obtener MAC y canal de transmisión de datos, Duane Odom.

miércoles, 6 de junio de 2007

Navegando en OpenSUSE


Utilizo FireFox (FF) hace bastante tiempo y los últimos 2 meses he estado probando Opera.
La verdad es que Opera es un browser espectacular y eso que debo estar utilizando la mitad de las funcionalidades. Las funciones de Opera que más me acomodan son:
  • Wand (para múltiples logins en un mismo sitio sobretodo)
  • Mouse gestures incorporados de fábrica.
  • Buscadores personalizados.
  • El nivel de personalización de barras y botones.
  • Agregar widgets y themes sin tener que reiniciar el navegador.
Es cierto que algunas funciones las encuentro en FF en forma de Complementos, pero la verdad es que el rendimiento de Opera en OpenSUSE es perceptiblemente superior a FF (tanto con la versión tar.gz de Mozilla, como con el RPM de OpenSUSE).

Cuando he extrañado algo de FF en Opera; googleando he encontrado la alternativa existente en Opera:
  • Buscaba una forma de realizar búsquedas dentro de las páginas (Control-F en FF): Encontré la barra de vistas de Opera que me agregaba el campo, pero que no funcionaba con Control-F, busqué un poco más y apareció el atajo de teclado ".". Perfecto.
  • Una alternativa al complemento NeedleSearch de FF: El buscador integrado puede personalizarse.
  • El botón "Ir" ("Go") de FF: Arrastrar el mismo botón desde el gestor de apariencia de Opera.
La parte fea:
  • El bajo soporte de los servicios Google (Calendar, Docs, etc.).
  • Sitios chilenos como BancoEstado, SantanderSantiago, SII a duras penas soportan FireFox, así que menos queda para Opera (incluso llegué a instalar IEs4Linux!).
  • Hay un bug que me ha molestado un par de veces cuando presiono Control-T para crear una pestaña y se crean montones de ellas, causando el bloqueo del navegador.
  • Me habría gustado que el traductor en el menú desplegable abriera en un nuevo tab sin tener que mantener Shift presionado.
  • El puntero de selección de enlaces debería estar disponible aún cuando la página no ha terminado de cargar (no sé si me explico en esto).
  • Ahora mismo estoy presionando el botón "Agregar Imagen" de Blogger y Opera no reacciona :(
  • Peor aún, estoy tratando de presionar el botón "Guardar Ahora" de Blogger para poder postear desde Firefox y Opera no quiere nada. Y eso que agregué el script java para dar soporte a los servicios Google!!!
  • Finalmente este post fue publicado usando FireFox :(
Real Time Web Analytics