dom feb 21 14:58:43 CET 2010

obexpushd

En mi trabajo, a veces, me veo obligado a hacer fotos, fotos que después debo mostrar a mis superiores (básicamente, incidencias de seguridad). Las fotos las hago con mi nokia 6210, pero a la hora de mostrarlas, me gusta usar una pantalla más grande.

Antes lo hacía con la n810, pasándolas directamente por bluetooth, pero resulta que el Ipod Touch sólo habla bluetooth entre los de su especie..., por lo que ahora me veo obligado a usar un proceso más largo, móvil a portátil a Ipod.

Cualquier distribución moderna viene con bluez instalado por defecto, y sólo tienes que emparejar los dispositivos. Sin embargo, la cosa sólo funciona si quieres enviar del portátil al móvil, porque al revés no hay manera.

La solución pasa por instalar obexpushd, un programa que recibe ficheros mediante bluetooth, IRDA y tcp.

La manera más sencilla de usarlo, es lanzarlo desde la carpeta donde queremos guardar los ficheros, con la opción -n:

foobar@nemesis:~/tmp$ obexpushd -n obexpushd 0.7 Copyright (C) 2006-2007 Hendrik Sattler This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Listening on bluetooth [00:00:00:00:00:00]:9 Connection from "bluetooth/[00:24:d4:EC:59:2e]:9" 0.1: Creating file "16022010_001.jpg" ^C

Posted by foobar | Permanent Link

sáb feb 13 00:13:05 CET 2010

La primera en... el firmware

Feliz me veía yo con mi flamante iPod Touch, y nada más encenderlo me llevo la sorpresa de que tengo que activarlo con iTunes.

¿Y cómo diablos lo hago en Linux? Pues de ninguna de las maneras. Es sí o sí. No me queda más remedio que pedirle prestado un portátil a mi mujer, crearme una cuenta e instalar el dichoso programita.

Ok, ya tengo el cacharrillo en marcha, y con las configuraciones básicas (wifi, correo, calendario y contactos) hechas. Un vistazo a la web, una ojeada al correo, una visita a la tienda de Apple y ya empiezo a sentir "el hormigueo".

Un prúrito que noto con cada nuevo gadget, la necesidad de meter vim, Python y ssh y poder cacharrear desde la línea de comando. Así que a la hora de tenerlo ya me he decidido a hacer el "jailbreak".

Vista la sencillez de uso, no me documento muy a fondo (léase: Bajo el blackra1n, lo ejecuto, instalo Cydia y empiezo con el openssh) y al primer reinicio, me sale lo que tomo por un error del "jailbreak". Por lo visto, con ciertos modelos modernos de iPod e iPhone, se hace algo llamado "tether jailbreak" que básicamente consiste en que hay que volver a lanzar el blackra1n con cada reinicio.

Listo de mí, conecto el cacharro al iTunes y le digo que me lo restaure al estado inicial. Y aquí cometo mi segundo y más grave error, pues el cabrito del programa me ofrece actualizar el firmware a la versión 3.1.3, y yo le digo que sí, que venga, con dos cojones...

Y ahora sí me documento, leo doscientas páginas web sobre el tema, visito 50 foros, veo un par de docenas de vídeos y todo para llegar a una sóla conclusión:

Efectivamente, no hay "jailbreak" para esta versión. De momento.


Posted by foobar | Permanent Link

lun feb 8 10:02:59 CET 2010

GTD

Aunque ya he hablado antes de la gestión de las cosas por hacer, desde que me hice con una n810, el proceso ha variado un tanto.

La idea principal es mantener una lista de tareas tanto en casa (con un portátil con ubuntu o alguna de sus variantes, ahora mismo crunchbang) como en la tableta.

Para ello, lo más inmediato era usar gpe-todo, ya que hay soporte GTK y Maemo.

gpe-todo guarda la lista de tareas en un fichero $HOME/.gpe/todo, que no es más que una base de datos sqlite 2.0. Y para sincronizar entre portátil y tableta, un clásico de toda la vida: unison.

Lo ideal sería poder lanzar la sincronización cada vez que la tableta conectara con mi red interna, pero udev en maemo tiene sus caprichos, y a pesar de la ayuda de los gurus de e.c.o.l.i, me he tenido que conformar con hacerlo a mano.

Hasta aquí todo correcto, pero a mi me picaba el hecho de no tener un recordatorio casi constante de lo que tengo pendiente. Y como no sé si existe alguna solución más sencilla, lo que se me ocurrió fue tirar de python y apache.

Casi todas mis tareas en el portátil giran alrededor del navegador, por lo que tener un recordatorio en el mismo parece ser lo más razonable. Cada vez que arranque el navegador, o cree una pestaña nueva, me aparecerá una página en la que se vea la lista de cosas pendientes, sencillo de configurar tanto en firefox como en chrome.

Buscando un poco en google, y haciendo unas cuantas pruebas con el idle de python, he conseguido extraer la lista de tareas del fichero $HOME/.gpe/todo, y con cuatro líneas más, crear un script que correrá como cgi en el apache:

Para que el lector se haga una idea, un pantallazo de mi escritorio.

Y sí, es cierto, este artículo lo tenía guardado desde hace un par de semanas, antes de que me sentara encima de la n810 y me regalaran el ipod touch. Ahora mismo estoy mirando opciones como google tasks o RTM.


Posted by foobar | Permanent Link

vie feb 5 16:11:20 CET 2010

ipod touch

Que debo ser un buen marido, porque mi mujer me ha regalado un ipod touch en sustitución de la n810 que pasó a mejor vida hace no mucho (consejo para futuras generaciones, no guardeis móviles, pdas y demás dispositivos más o menos delicados en el bolsillo de atrás del pantalón. Y si lo haceis, no os senteis).

En cuanto al bichillo, muy chulo, muy sencillo de usar, y muchas aplicaciones en la tienda Apple. Supongo que acabaré "jailbrokeándolo", pero de momento voy a ver hasta dónde llego con software gratis (que no libre, ojo, San Kanterobi nos proteja).


Posted by foobar | Permanent Link

mié feb 3 18:53:48 CET 2010

Nexus One, python, BS. Otra más

¿Y por qué limitarse a ser el primero en saberlo?

import sys
import urllib2
from BeautifulSoup import BeautifulSoup
import twitter

page = urllib2.urlopen("http://www.google.com/phone/")
soup = BeautifulSoup(page)

try:
no_nexus = soup.find(attrs={"class" : "callout-box"}).contents
except:
api = twitter.Api(username="yo_en_twitter", password="pass_de_twitter")
api.PostUpdate("Ya está disponible el Nexus One en aquí")

Sé el primero en contárselo a los demás.


Posted by foobar | Permanent Link

mar feb 2 17:02:34 CET 2010

Nexus One, Python, BS

Los que tengan la desgracia de compartir pais con el que esto suscribe sabrán que la página de google sobre el Nexus One nos obsequia con un "Sorry, the Nexus One phone is not available in your country."

Lo que me hace pensar que el día que por fin esté disponible, esa frase desaparecerá. Y eso me lleva a BeautifulSoup y a tres o cuatro líneas que harán que me entere rápidamente cuando esto ocurra:

import urllib2
from BeautifulSoup import BeautifulSoup
page = urllib2.urlopen("http://www.google.com/phone/")
soup = BeautifulSoup(page)
try:
no_nexus = soup.find(attrs={"class" : "callout-box"}).contents
except:
print "¡¡¡Ya está disponible!!!"

Con un par de pinceladas más, y un juicioso uso del cron, voy a ser el primero conocer el notición.


Posted by foobar | Permanent Link

lun feb 1 16:05:46 CET 2010

sshfs

Me deja un compañero del trabajo Band of Brothers.

En casa descubro que el a) el reproductor de DVD por fin se ha rendido a tanto Pocoyo, b) el lector de DVD de mi portátil ha decidido dejar de funcionar, y c) NFS es una mierda y no consigo exportar el lector de DVD del servidor.

Soluciones que se me ocurren: camelarme a uno de mis hijos y que me dejen sus portátiles (juas, un domingo, por la tarde, papá, ¿estás tonto?), o buscar alternativas a NFS en google. Y resulta que hay una maravilla llamada sshfs.

sshfs foobar@servidor.en.mi.red:/media/cdrom0 tmp/mnt/

Y a disfrutar de la serie.

Aunque antes voy a jugar un pquito con iptables y un par de IP's de esos enanos desagradecidos...


Posted by foobar | Permanent Link

dom ene 17 18:18:06 CET 2010

Probando nanoblogger con una plantilla

La idea es ver si esto funciona con un .txt

Y sí, la imagen no tiene nada que ver con el asunto, pero lo bueno de tener un blog en el que el lector no puede opinar es eso. Que pongo lo que me sale de los huevos.


Posted by foobar | Permanent Link

sáb ene 9 19:41:51 CET 2010

Tucan y BeautifulSoup

Supongo que todos conoceis sitios como RapidShare o Megaupload, y el procedimiento estándar para descargarte un fichero: captcha, enlace a la cuenta gratuita, espera de unos segundos, o minutos, y por fin el enlace deseado.

El problema viene cuando el fichero en cuestión está partido en una docena de trozos. Ninguno de esos sitios va a permitirte que, por tu cara bonita, hagas varias conexiones simultáneas. Y te obsequiará con tiempos de espera cada vez más largos en cada descarga.

Para esas situaciones he descubierto tucan, un gestor de descargas lbre, de código abierto, escrito en python y ampliable mediate plugins.

Básicamente, abres tucan, copias y pegas las direcciones de los ficheros a bajar, y te olvidas, tucan se encarga de ir conectando y bajando los ficheros.

El problema es que cuando son más de dos enlaces, a mí, personalmente, me parece un coñazo tener que colocar el cursor en el enlace, botón derecho, copia dirección, alt-tab, pegar, enter, alt-tab, repetir.

¿Y que hace un BOFH ?

Efectivamente, usa python. Y en este caso, BeautifulSoup.

Digamos que nos interesa la serie anime Helsing, y hemos encontrado una página en la que están los enlaces a todos los episodios en megaupload.

Descargamos la página con urllib2

page = urllib2.urlopen("http://www.mcanime.net/descarga_directa/anime/detalle/dd_hellsing_espanol_castellano_1313_mas_ova27s/596")

Creamos una lista de tags que apunten a megaupload

linkToSite = SoupStrainer('a', href=re.compile("megaupload.com/")
getTags = [tag for tag in BeautifulSoup(page, parseOnlyThese=linkToSite)]

Y finalmente, extraemos los enlaces

for link in getTags:
     print link.get('href')

Y ahora sí, copiamos el chorro de enlaces a tucan, que el se los irá bajando tranquilamente.

Esas 6 líneas de código, un poco más elaboradas en feedabird.py y el código en colorines (gracias a vim) aquí

Actualización

Resulta que sitios como taringa!, que suelen ser muy buena fuente de enlaces utilizan javascript, sobre todo para la publicidad, que a BS se le atraganta, por lo que hay que hacer una fea ñapa.

page = urllib2.urlopen(options.url).read()
page = re.sub('


Posted by foobar | Permanent Link

vie ene 1 22:51:57 CET 2010

Empezando el 2010

1 de enero, hoy no trabajo, y tengo unos minutos para pensar que quiero hacer este año.

Huir despendolado no es una opción, así que no me van a quedar más narices que enfrentarme a mis miedos y carencias.

Aprender de una vez a programar en python. Pero aprender de verdad, no sólo conseguir que el script funcione, sino que pueda publicar el código sin usar vergonzantes seudónimos.

Meterle mano a bola8, que esta primavera quiero llevarme a kania a un par de concentras, y así presumir de churri y de hierro.

Decidir si realmente quiero tener cuenta en facebook, myspace, tuenti, spotify, y demás sitios que las modas y la tontería del momento me han ido tentando. ¡Si hasta he picado con el google wave!

Actualizar el blog. En serio. Todas las semanas... Bueno, cada quince días.

Y tatuarme. Por supuesto.


Posted by foobar | Permanent Link