sábado, 30 de junio de 2012

El diccionario de la RAE en tu consola

Aprovecho que he tenido que retocar un shell script que tenía cogiendo polvo en la carpeta $HOME/bin para compartirlo desde aquí. Se trata de la misma idea que puse en práctica con gtr, el traductor de consola que usa los servicios de Google Translate, pero esta vez usando el servicio web del diccionario de la RAE.

Tras ponerlo en la ruta de ejecución y darle los permisos adecuados podremos buscar palabras sin más que teclear rae palabro en la línea de comandos. Obtendremos un volcado en texto plano del documento web con los resultados de la consulta sin tener que irnos al navegador. Así de simple y de práctico. De nada.

martes, 26 de junio de 2012

Resolviendo CAPTCHAs: el factor humano

En mi último post contaba cómo había resuelto el tema de las descargas directas en un servidor Linux sin entorno gráfico, controlado remotamente mediante SSH. Una de las opciones más interesantes de plowshare está relacionada con el uso de CAPTCHAs, esas pruebas consistentes (la mayoría de las veces) en transcribir el texto de una imagen y que, si están bien diseñadas, permiten distinguir a un cibernauta humano de un programa de ordenador equivalente. Estas pruebas han proliferado desde hace años como mecanismo de detección (y disuasión) de spammers (los que envían correo basura) y de otros procesos automatizados (conocidos genéricamente como bots o "robots software") que abusen (o esquiven ciertas políticas) de servicios web. 

Para esquivar esas "barreras virtuales" dispuestas para evitar la interacción automatizada con la web, los bots se mejoraron convenientemente. Se trataba de añadirles código capaz de procesar esas imágenes proporcionadas a modo de reto por los CAPTCHAS y extraer e identificar el texto que encierran. Para ello se comenzaron a utilizar distintas técnicas de reconocimiento de patrones y de reconocimiento óptico de caracteres (OCR) que permitieron derrotar durante un tiempo a los CAPTCHAS, que progresivamente se hacían más enrevesados (p. ej. solapando los símbolos y/o distorsionándolos) y obligaban a su vez a perfeccionarlas. Pero llegó un momento en que la complejidad de tecnologías como reCAPTCHA, volvieron a hacer ese tipo de pruebas "aptas solo para humanos".

Un nuevo enfoque para saltar estas barreras, que descubrí al empezar a usar plowshare, consiste en reenviar este reto visual a un humano. Y no me refiero a la acción típica de JDownloader y otros programas similares que ante un CAPTCHA irresoluble lo muestran en pantalla para que lo resuelva el usuario si es que se encuentra mirando la pantalla en ese momento. A esa idea se le dio un nuevo giro de tuerca consistente en reenviar la imagen a otro humano que esté conectado en ese momento y la transcriba por ti. Ese es el servicio que proporciona, por ejemplo, captcha.trader, un sitio web donde se compran o se ganan (resolviendo CAPTCHAs para otros) créditos canjeables por la resolución de estos acertijos en el momento necesario. Es lo que vengo haciendo con éxito con plowshare: cuando estoy on-line resuelvo de vez en cuando algunos CAPTCHAs en la web de captcha.trader anotándolos a mi cuenta de usuario para luego "gastarlos" en las descargas no interactivas mediante plowshare (ejemplo de configuración aquí). Aunque me ha servido para conseguir mis propósitos (descargas directas no interactivas), asomarse a la puerta de este nuevo mercado tan propenso a la explotación del trabajo ajeno da que pensar sobre el futuro de Internet...

miércoles, 13 de junio de 2012

Plowshare: descargas directas desde la consola

Hace poco contaba como había llegado hasta la "versión daemon" de Transmission, lo que me permitió centralizar la descarga de archivos mediante el protocolo Bittorrent en un mini-servidor Linux casero, sin monitor (o como dicen los guiris, headless, "sin cabeza") y controlado remotamente por SSH. Como no me gusta depender de una única tecnología y además en la web hispana se siguen usando en abundancia las "descargas directas" facilitadas por proveedores alternativos a la cerrada Megaupload, me propuse encontrar un gestor de descargas que las manejara, al estilo de JDownloader, pero desde la consola.

En una primera sesión de búsqueda no encontré nada que me sirviera y estuve tentado de ponerme a programar algún shell script al estilo de los que hice en su momento para Rapidshare o Megaupload para automatizar las descargas desde alguno de los proveedores más usados actualmente. El problema era que estos servicios ponen cada vez más difícil la descarga de archivos sin navegar por su web (y ver su publicidad) mediante el uso de JavaScript y CAPTCHAs. Recordaba de indagaciones anteriores que algunos hackers (en el sentido de "programadores ingeniosos") se las habían arreglado para interpretar JavaScript con un motor no vinculado a un navegador (al estilo de SpiderMonkey) y para solucionar los dichosos CAPTCHAs mediante el uso de técnicas OCR (reconocimiento óptico de caracteres) mediante herramientas de consola del estilo de ImageMagick. Esto elevaba notablemente la dificultad del asunto, pero al menos quería intentarlo, así que me dispuse a investigar más a fondo dichas técnicas para usarlas en mi nuevo shell script.

Por suerte para mi pereza (y desgracia para mi aprendizaje como programador ;) la nueva sesión de búsqueda me llevó hasta un potente programa de consola que ya aplicaba estas complejas técnicas exitosamente. Se llama Plowshare y utiliza Bash junto a un variado arsenal de bibliotecas y utilidades típicas de sistemas tipo Unix para automatizar la descarga de archivos desde ese tipo de servicios de alojamiento, soportando, gracias a su diseño modular, un buen puñado de ellos. Además cuenta con un paquete para Debian (y distros derivadas) que me facilitó la instalación y me permitió ampliar las opciones de mi servidor de descargas. Lo ejecuto desde una shell remota (con SSH) pasándole como argumento un archivo de texto con los links de descarga. Tras las primeras pruebas me encontré con dos obstáculos finales que no tardé mucho en superar:
  1. Para poder cerrar la conexión remota al servidor una vez iniciadas las descargas sin que se interrumpa el programa, uso la vieja utilidad Screen (ejecutándola con screen -R antes de correr el programa plowdown y pulsando Ctrl+A+D para desvincular dicha ejecución de la shell y poder hacer un exit). 
  2. Cada vez más servidores usan CAPTCHAs irresolubles (por el momento), con lo que tienes dos opciones: o estás pendiente de las descargas para resolverlos tu mismo (con lo que de paso pierdes cualquier ventaja conseguida hasta ahora) o haces que un "humano anónimo" los resuelva por tí en el momento adecuado. Esta curiosa forma de abordar el problema de los CAPTCHAs la contaré en el próximo post...