sábado, 29 de diciembre de 2012

Resolviendo CAPTCHAs: el factor humano (y II)

Esta última semana he tenido algo de tiempo para buscar y probar algunas mejoras para mi mini-servidor de descargas basado en Debian y espero poder publicar algunos posts al respecto en los próximos días. Hoy me conformo con dejar constancia de algunos cambios que afectan a plowshare y la resolución de CAPTCHAs complejos mediante "el uso de humanos ociosos". Ante todo, comentar que este gestor de descargas en modo texto (programado con Bash) para servicios de alojamiento de archivos, sigue viento en popa. Ahora tienen una versión para Bash 3.x destinada a sistemas embebidos y máquinas menos potentes y/o más antiguas (es la que estoy usando) y otra versión para Bash 4.1.x para máquinas actuales y/o más potentes. Por supuesto, cada vez soportan más servidores gracias al carácter modular y abierto del programa, lo cual siempre es de agradecer... Pero aparte de estos cambios, me interesa el hecho de que ya hay un sustituto gratuito para captcha.trader,  el servicio de resolución e intercambio de CAPTCHAs que usaba anteriormente (hasta que dejó de funcionar) y que recomendé en su día en el primer post sobre estos temas. Se llama 9kw.eu y es muy similar a captcha.trader: uno se registra y de vez en cuando inicia sesión con su usuario y se dedica a resolver unos cuantos CAPTCHAs para otras personas, ganando ciertos puntos de crédito en el proceso. Esos puntos podremos gastarlos más adelante desde plowshare (que configuraremos para que use nuestra cuenta usando lo que llaman la API key) para hacer descargas desatendidas en las que otras personas resolverán los CAPTCHAs por nosotros. Tan sencillo y tan efectivo... Happy downloading in the new year!

viernes, 30 de noviembre de 2012

Revisión a fondo de Windows 8

Transcurrido apenas un mes desde el lanzamiento de la última encarnación de Windows (con la previsible denominación de Windows 8), y tratando de dejar a un lado los fanatismos en uno u otro sentido, enlazo a las distintas entregas de la reseña en profundidad que suele hacer de cada nuevo sistema operativo de Microsoft el respetado Paul Thurrott:
  1. El escritorio.
  2. Metiste tu Metro en mi Ventana.
  3. La nueva plataforma Metro.
  4. Aplicaciones para la productividad.
  5. Aplicaciones para el entretenimiento.
  6. Estabilidad, seguridad y conectividad.
  7. Funcionalidades para la empresa.
  8. El veredicto.
Dejando de lado su tibia acogida en el mundo corporativo (¿tiene sentido la migración desde un estable y usable Windows 7?) o incluso su necesidad en el contexto de la informática doméstica y de entretenimiento que no cuente con pantallas táctiles, lo que parece claro tras leer la reseña es que el nuevo sistema operativo salido de Redmond no es totalmente irrelevante. Solo el tiempo (que en escala informática podría ser el próximo año) perfilará hasta hacerla nítida la verdadera dimensión de su relevancia...

domingo, 30 de septiembre de 2012

Actualización del script eltiempo

Tras las vacaciones voy de cráneo con el trabajo y aunque tengo un par de posts a medio cocinar (ocultación de particiones y software para DJs en Linux) no encuentro el tiempo y la tranquilidad necesarios para hacerlo en condiciones, lo que se traduce en un cierto "abandono" del blog. Aprovecho para pedir a los cuatro lectores habituales un poco de paciencia, que las ideas no se agotan ni mucho menos; que se den un garbeo por aquí de vez en cuando...

Mientras espero resignado tiempos mejores he sacado un rato para actualizar uno de los shell scripts, que había dejado de funcionar recientemente: eltiempo. Su propósito es obtener en la consola el parte meteorológico del día (en formato textual, claro). Como es normal en este tipo de programas que "rascan" datos de una web, dependen demasiado del formato de publicación. En cuanto se hacen cambios en la estructura del documento HTML se jode el invento. Por suerte éstos no eran demasiado radicales y el arreglo fue bastante rápido. Espero que dure ;-)

Se me olvidaba el enlace de descarga. Hasta la próxima.

martes, 31 de julio de 2012

Un sintetizador software (decente) para Linux

Este verano me dio un día por conectar un viejo teclado USB (controlador MIDI parecido a éste) que tengo cogiendo polvo desde hace años para marcarme unos acordes e intentar emular algunos ambientes épicos y/o melancólicos al estilo de Vangelis o Angelo Badalamenti

El auténtico reto fue decidir prescindir de Windows y centrarme en Linux, ya que desde hace un tiempo es mi sistema operativo predeterminado. Ya había tanteado el asunto un par de veces a lo largo de la última década y recordaba algunas de las frustraciones asociadas a la configuración del sonido, aunque por suerte también recordaba algunas de las soluciones y programas disponibles.

Lo primero era hacerme con un sintetizador software de cierta calidad, y tras una búsqueda del término "sintetizador" en Ubuntu Software Center (el Agregar y quitar programas del Ubuntu que uso) y un par de búsquedas en San Google para "desempatar" entre los paquetes disponibles, me decidí por Yoshimi, un derivado mejorado de ZynAddSubFX, programa open source que recordaba haber probado y apreciado hacía tiempo. En menos de un minuto lo tenía instalado, aunque no listo para usar :(

Uno de los mayores engorros técnicos relacionados con el audio en Linux es el uso de distintas capas / componentes software que tienen que estar debidamente instalados y configurados para que las aplicaciones (en este caso Yoshimi) funcionen correctamente. Desde los drivers (ALSA vs. OSS) que complementan al kernel a los llamados servidores de sonido como JACK o PulseAudio, que hacen de intermediarios entre los anteriores y las distintas aplicaciones de usuario.

Como reza la breve descripción en la web de Yoshimi, su uso está especialmente indicado para ALSA y JACK. Como el primero ya viene instalado por defecto en Ubuntu, me dispuse a instalar JACK, pero en lugar de hacerlo "a pelo", lo hice junto a un panel de control llamado QjackCtl que recordaba de otras batallas y que facilita mucho su uso. Tras ser instalado, el icono para lanzarlo (al igual que el de Yoshimi) podemos encontrarlo en la categoría Multimedia si usamos Ubuntu o alguna distro derivada.

Una vez ejecutado y funcionando se trata de ejecutar también Yoshimi, encender el teclado USB y usar QjackCtl (su ventana se titula JACK Audio Connection Kit) para interconectarlos. Aunque se pueden presentar diversos problemas que impidan su correcto funcionamiento recomiendo comprobar en la pantalla de configuración que la interfaz de audio es la correcta (podemos tener más de una tarjeta de sonido) desplegando la lista mediante el botón con la flecha y eligiendo la tarjeta principal usando su descripción, aunque el identificador de dispositivo se lea como hw:1 o algo similar. Si todo está en orden veremos que el estado es Iniciado y podemos proceder a conectarlo todo (dando por hecho que hemos iniciado después el "sinte" Yoshimi y el teclado) abriendo la ventana Conexiones y realizando las siguientes acciones:
  • En la pestaña Audio: se trata de conectar los dos puertos de salida de Yoshimi con los puertos de entrada del sistema (system). En mi caso, conecto el puerto izquierdo (left) de Yoshimi con el puerto playback_1 de system y el puerto derecho (right) de Yoshimi con playback_2. Así ya podremos escuchar cómo suena Yoshimi cargándole un instrumento (opción Instrument-Show instrument Bank) y usando el teclado virtual (opción Instrument-Virtual keyboard).
  • En la pestaña MIDI: se trata de conectar el puerto de salida de system correspondiente al teclado USB (en mi caso suele ser midi_capture_3) al puerto de entrada de Yoshimi (llamado midi_in). Así lo que hacemos es enviar los mensajes MIDI del teclado al programa Yoshimi para que reproduzca las notas pulsadas en aquél con el sonido del instrumento seleccionado en éste.
Ahora solo queda ir probando los distintos sonidos de Yoshimi clasificados en los distintos bancos (Organ, Pads, Strings, etc.) y aprender algunos acordes para sacarle más partido. En mi opinión suena (casi) todo bastante decente...


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...

jueves, 31 de mayo de 2012

Descarga de programas de TV

En el último post contaba mis experiencias a la hora de descargar programas de televisión de la web de TV3. Recientemente he descubierto un más que interesante programa hecho en Python llamado PyDownTV, cuyo cometido es facilitar la descarga de los contenidos de audio y vídeo que la cadenas de televisión y radio españolas proporcionan en sus sitios web. Actualmente soporta la inmensa mayoría de las televisiones públicas, privadas y autonómicas. 

Cualquiera que use Linux en su PC no tiene más que descargar el tarball correspondiente a la última versión del programa y seguir las instrucciones de instalación

Para los cautivos de Windows en particular y/o perezosos en general puede ser interesante la versión web del programa, que nos facilita los enlaces de descarga a partir del URL de la página web.

Yo lo he estrenado descargando este esclarecedor programa sobre el expolio perpetrado por políticos y banqueros en Hispanistán y para ponerme al día con algunos programas de Salvados que no he podido ver directamente en la tele (mejor hacer clic sobre la pestaña Programas Completos). En definitiva, una utilidad software muy recomendable para todo aficionado a la televisión digital "a la carta" ;-)

martes, 22 de mayo de 2012

Descarga (manual) de programas de TV3

Para descargar vídeos de YouTube y otros servicios de streaming de vídeo suelo utilizar un popular complemento para Firefox llamado Video DownloadHelper. Funciona correctamente con muchos de estos servicios, incluyendo los que proporcionan desde los portales web de las cadenas de televisión, como por ejemplo A la Carta de RTVE.

Sin embargo, este tipo de software no es infalible y puede fallarnos a la hora de extraer correctamente los enlaces de descarga de ciertos sitios web, bien porque la web no es muy conocida y aún no está soportada por el programa o bien porque ha sufrido (como es bastante habitual en la web) cambios que lo tienen despistado hasta la próxima actualización. 

Afortunadamente en algunos de estos sitios web que sirven contenidos de vídeo tenemos formas de averiguar a mano los links de descarga, a veces de forma más rebuscada (inspeccionando el código fuente de la página) y otras algo más fácil, aunque pocos son los sitios que facilitan la descarga y posterior visionado off-line ("tragad publicidad, estúpidos" parece ser la consigna). Recientemente vi recomendado en un foro un programa de la televisión catalana, Singulars, donde se llevan a cabo interesantes entrevistas, y en concreto se trataba de una reveladora entrevista a dos economistas independientes sobre la crisis y lo que se puede esperar de ella en los próximos meses. Traté de descargarlo con Video DownloadHelper pero no parecía detectarlo (luego miré en la lista de webs soportadas por esa versión y no aparecía TV3). Por suerte bajo el vídeo aparece el botón +opcions que, entre otras cosas, nos proporciona un enlace al podcast del programa: http://www.tv3.cat/3alacarta/podcast/xml/singulars.xml. Y ahí podemos encontrar los "enlaces estáticos" a los archivos .MP4 de los últimos programas; solo tenemos que fijarnos en el título del que nos interese y copiar su URL para descargarlo desde nuestro gestor de descargas favorito (o hacerlo directamente desde el navegador). Una vez en nuestro poder ya podremos verlo cómodamente en nuestro "combo tele-sofá" ;-)

martes, 15 de mayo de 2012

BitTorrent por control remoto

Me consta que tras los tropiezos legales que tuvo hace unos meses Megaupload y las posteriores restricciones (consecuencia del miedo) entre otros servicios de alojamiento de archivos similares, muchos internautas han vuelto a usar BitTorrent. Este protocolo para el intercambio de archivos es especialmente eficiente a la hora de transferir grandes archivos con el mínimo impacto sobre los hosts implicados, consiguiendo velocidades bastante altas incluso a través de las conexiones de "banda no tan ancha" tan habituales hasta hace poco en Hispanistán. Para descargar cualquier tipo de contenido usando este protocolo se suele recurrir a portales como EliteTorrent o isoHunt para buscar el archivo intermedio .torrent correspondiente, que contiene los datos necesarios para realizar la descarga de los archivos "de verdad". Esta descarga requiere del uso de una aplicación cliente que soporte el protocolo BitTorrent, como por ejemplo µTorrent para Windows o Deluge para Linux (quizá por la necesidad de instalar un programa específico en seguida perdió usuarios frente a las "descargas directas" [desde el navegador] al estilo de Megaupload y RapidShare).

Cuando recientemente monté un mini-servidor casero con la intención de dedicarlo, entre otras cosas, a la descarga de archivos, tenía claro que debía tener en cuenta BitTorrent, pero tras investigar un poco el estado actual del protocolo y los clientes disponibles para Linux, se perfiló como el principal candidato por varios motivos. Mi idea era buscar una forma de usarlo en el servidor Debian sin necesidad de instalar para ello un entorno gráfico, ya que pensaba dejar el software base lo más ligero posible. Además tenía que tener en cuenta que el servidor no tiene monitor ni teclado y lo administro remotamente usando SSH. Me sonaba que alguno de los clientes de BitTorrent contemplaban la posibilidad de usar una interfaz de usuario web (con la opción de conectar remotamente) pero si la cosa se ponía fea me planteaba incluso recurrir a un cliente de línea de comandos y usar algún viejo truco de Unix al estilo nohup para ponerlo a funcionar en el servidor y cerrar la sesión sin interrumpirlo. Pero no hizo falta recurrir a ello porque encontré algo mejor: un cliente BitTorrent que contaba con un modo daemon, es decir, un modo de funcionamiento en segundo plano, no vinculado a una interfaz de usuario. En Debian y derivados se trata del paquete transmission-daemon. Por otro lado está el programa de control remoto, transmission-remote, con una interfaz de línea de comandos para hacer peticiones al "demonio", desde el mismo host o desde otro (mi caso). Éste va incluido en el paquete transmission-cli y es el que instalé en mi PC normal, que corre Ubuntu. Así puedo añadir, borrar, pausar, reanudar, listar, etc. las descargas que se están realizando de forma desatendida en el servidor donde corre el "demonio". Con ese servicio instalado y corriendo ya podía hablar de "servidor de descargas", aunque la idea de depender de un único protocolo no me acababa de convencer... Tras unos meses de prueba y algunos escollos en mi camino me decidiría a buscar algún refuerzo para el apartado de descargas del servidor... To be continued ;-)

domingo, 29 de abril de 2012

GRUBack y Ubuntu 12.04

Acabo de probar (en una máquina virtual sobre VirtualBox) la nueva versión de Ubuntu, con número 12.04 y nombre Precise Pangolin, a la que se puede echar un vistazo online aquí. Se trata de una versión LTS (con soporte a largo plazo) lo que la hace especialmente atractiva como sistema operativo principal tanto en portátiles como en PCs de sobremesa. Mi intención es instalarla "de verdad" en un par de semanas, aunque muy probablemente me decantaré por su variante Xubuntu, distribución derivada más ligera que usa el escritorio XFCE en lugar de GNOME 3 + Unity. Esta combinación está alejando la Ubuntu "normal" del ideal de cualquier usuario avanzado y acercándola peligrosamente a paradigmas más propios de esta era de tablets y usuarios consumidores de contenidos...

Independientemente de qué sabor elijamos de esta recomendable distribución Linux, la buena noticia para mí (y el motivo real de mi prueba virtual) ha sido confirmar que la versión (1.99-21) de GRUB que acompaña a la nueva Ubuntu sigue funcionando con la última versión de GRUBack (más bien al revés ;) por lo que seguirá siendo igual de fácil recuperar el menú de GRUB en caso de compartir disco duro con Windows y perderlo tras reinstalar el sistema operativo de Microsoft. Y todo sin que yo haya tenido que hacer nada (de momento ;)

jueves, 26 de abril de 2012

Monitorizando temperaturas del hardware en Linux

Hace poco presentaba mi proyecto casero de instalación y configuración de un servidor de descargas de bajo consumo basado en Linux. En los próximos días desvelaré los programas utilizados para llevar a cabo y/o controlar las descargas propiamente dichas, pero hoy quiero presentar otro software que he instalado recientemente y que puede ser de mucha utilidad para cualquier tipo de servidor basado en Linux.

La monitorización de las temperaturas del hardware de PC puede ser una necesidad para los aficionados al overclocking o simplemente para cualquiera que viva en regiones calurosas y tenga el equipo funcionando durante horas. En Windows podemos usar diversas utilidades software (como SpeedFan) para ver en tiempo real las temperaturas de aquellos componentes hardware que cuentan con sensores y que suelen ser los más sensibles a temperaturas elevadas (CPU, chipset, discos duros, etc.). También suelen informar de los voltajes y velocidades de giro de los ventiladores, depende de los chips y sensores instalados.

En Linux, como no podía ser de otra forma, también hay programas para acceder a esta valiosa información, sólo tenemos que buscar en los repositorios de nuestra distribución favorita palabras como "sensors" (p. ej. en Ubuntu o Debian lo haríamos ejecutando apt-cache search sensors). En mi caso, investigue un poco los resultados obtenidos y llegué a la conclusión de que todo lo que necesitaba era instalar el paquete lm-sensors, que contiene las bibliotecas y utilidades que me permitirían configurar y leer los datos de los sensores desde la consola, requisito deseable en un servidor sin entorno gráfico.

Lo primero tras instalar el paquete (y aquellos de los que dependa) es ejecutar la utilidad de configuración sensors-detect para detectar los chips de monitorización de nuestra placa base y configurar los drivers necesarios para comunicarse con estos. Estos drivers son módulos del kernel que se añadirán a /etc/modules para cargarse durante el arranque del sistema. En mi caso eran dos, uno más genérico y otro centrado en obtener la temperatura del microprocesador (la que más me interesaba, ya que el mini-servidor no lleva disco duro).

Una vez cargados los drivers ya podemos ejecutar desde la línea de comandos el programa principal, llamado sensors, que nos volcará a pantalla las lecturas actuales de los distintos sensores. Lo bueno de tratarse de información textual es que podremos filtrarlo (usando grep, cut, etc.) para quedarnos con la parte que nos interese o incluso para comparar los datos numéricos con ciertos umbrales que decidamos para así automatizar la monitorización y notificación de posibles situaciones de sobrecalentamiento (podemos hacer que se nos envíe un mail como ilustraba en esta entrada anterior). En fin, que nunca viene mal controlar estas cosas en un ordenador que funciona desatendido, y más en los calurosos veranos de Hispanistán ;-)

miércoles, 18 de abril de 2012

El parte meteorológico en tu consola

Lo había estado usando durante meses en forma de one-liner; una tubería de comandos "a pelo" que conectaban a la web eltiempo24.es y me mostraban el parte meteorológico para mi provincia en la consola de comandos, pero hace unos días que lo he convertido en script de bash para poder compartirlo en condiciones...

La clave del asunto está en que la citada web es de las pocas que publican partes meteorológicos en formato textual y no como un conjunto de iconos o un panel de resumen multimedia (al estilo Flash). Esto permite automatizar la descarga y filtrado del documento web para su correcta visualización en consola prescindiendo de aditivos (menús, publicidad, etc.). Para ello he utilizado un navegador web que descargue e interprete el documento HTML convirtiéndolo en texto plano. En esta ocasión he utilizado w3m (en lugar de Lynx) porque suele estar preinstalado en la mayoría de distribuciones Linux y también permite hacer un volcado del texto obtenido a la salida estándar con un aspecto potable. Ese texto se filtra posteriormente con sed y head para quedarnos con las líneas que nos interesan y mostrarlas en pantalla. La parte más trabajosa (por mecánica) fue recoger en una sentencia CASE la equivalencia entre las distintas provincias y su correspondiente nombre de documento con el que montar el URL que se pasará al navegador. Así el script mostrará la predicción del tiempo para la provincia pasada como argumento. Por cierto, se llama eltiempo (original, eh?) y se puede descargar aquí. De nada.

NOTA: hay una actualización de Septiembre de 2012 disponible.

sábado, 31 de marzo de 2012

Servidor de bajo coste y bajo consumo

Hace un par de semanas que compré un PC multimedia de bajo coste (menos de 100€) al que le había echado el ojo: Zaapa Multimedia Center ZMC7. A pesar de su nombre mi intención no es usarlo para conectarlo al televisor, donde ya tengo algo parecido aunque más especializado en esas funciones (que cuenta además con el sintonizador TDT y el mando a distancia de los que el nuevo carece). También podría servir como nettop conectándole monitor, ratón y teclado, aunque en mi caso no lo necesito al disponer de otros ordenadores más adecuados para un uso "normal". Mis intenciones pasan por convertirlo en un servidor de bajo consumo (entre 8 y 15 W) conectado por cable al router ADSL y que se ocupe de las descargas de archivos liberando así al PC principal (con un consumo 10 veces mayor) de numerosas horas de uso desatendido a la semana.



Sus características hardware (procesador C7-M de VIA compatible x86 a 1,6 GHz, 2 GB de RAM) pueden parecer demasiado modestas en comparación con cualquier ordenador actual de propósito general, pero son más que suficientes para "mover" el software necesario para realizar las tareas que pienso encomendarle. Es importante aclarar que el ordenador es tan barato porque viene sin disco duro, aunque dispone de una bahía interna para discos de 2'5 pulgadas. Teniendo en cuenta el precio actual de los discos duros y el ruido extra que suponen (las unidades SSD solucionan esto pero son todavía demasiado caras) opté por usar una económica tarjeta SDHC de Clase 10 (máxima velocidad de escritura) de 16 GB como dispositivo de almacenamiento principal. No parece mucho espacio, pero mi idea es ir copiando los archivos descargados a través de la red a otros equipos mejor dotados.

Como sistema operativo me he decantado por Debian, una de las distribuciones clásicas de GNU/Linux más sólidas y potentes. Lancé la instalación desde un pendrive eligiendo el software mínimo necesario (el sistema base + el servidor SSH que permitirá su uso y administración a distancia). Para las descargas de momento me he centrado en el protocolo BitTorrent (injusta y estúpidamente relegado a un segundo plano en los últimos años por culpa de Rapidshare, Megaupload y compañía) y en concreto en la versión daemon de Transmission, que puedo controlar remotamente desde los otros ordenadores de la red.

Por el momento la experiencia está siendo muy satisfactoria y ya se me ocurren nuevas funcionalidades que añadirle al servidor: más servicios que podría proporcionar en la red doméstica y diversas mejoras y automatizaciones a implementar en forma de scripts. Así de paso me servirá como banco de pruebas donde seguir aprendiendo mediante la resolución de problemas reales y cotidianos de esta era digital. Espero ir desgranando aquí los detalles más interesantes próximamente...

jueves, 22 de marzo de 2012

Disponibilidad de vídeos de YouTube (y II)

Acabo de actualizar el script en Python que hice hace un año para comprobar los vídeos de YouTube. Estaba unos meses sin usarlo al tener mi lista de Favoritos un poco abandonada y cuando hace poco lo ejecuté me encontré con que no funcionaba. Natural, pues habían cambiado el código de las páginas web del servicio de marras. Por suerte el código en Python es tan fácil de mantener como cuentan sus partidarios y en media hora lo tenía listo de nuevo para la acción, lo cual le vendrá bien a mi selección de vídeos, ya que la frecuencia con que YouTube los retira parece haberse incrementado ;-)

jueves, 8 de marzo de 2012

Traductor de consola

Hace poco publicaba un script bash que hace las veces de diccionario Inglés-Español, Español-Inglés en la terminal de comandos tomando prestados los servicios de Google Translate. En principio solo pensaba usarlo para buscar palabras sueltas cuya traducción desconozca, pero alguien me preguntó por la posibilidad de traducir expresiones o frases completas y tras pensarlo un poco me decidí a dejar abierta esa opción, aunque personalmente desconfíe de la calidad de las traducciones automatizadas (por mucho que hayan mejorado con los años). Al final se trataba de hacer un par de cambios menores, siendo el más importante la sustitución de los espacios en blanco entre las palabras por el típico %20 usado en el URL final que hace llegar la consulta al servidor web. Aunque no descarto alguna mejora (o remiendo ;) posterior, parece que funciona razonablemente bien y por eso lo cuelgo aquí para el que le interese. De nada.

miércoles, 29 de febrero de 2012

Caja de herramientas de Unix

Unix Toolbox es una magnífica colección de comandos y tareas típicas en entornos Unix/Linux que pueden ser de gran utilidad tanto a administradores como a usuarios avanzados de este tipo de sistemas.

Visualmente es un buen ejemplo de cómo usar los estándares de la WWW (XHTML, CSS, etc.) para producir documentos web de aspecto limpio, elegante y al mismo tiempo funcional (con el menú flotante de la derecha podemos saltar a las distintas categorías de comandos) sin sacrificar la legibilidad y el formato adecuado del contenido basado en texto. Además podemos elegir entre dos hojas de estilo, una con fondo claro y otra con fondo oscuro.

Como extra, se puede descargar el documento de referencia completo en formato PDF para su consulta offline o una variante optimizada para su impresión y encuadernado. Difícil de superar.

martes, 21 de febrero de 2012

La navaja de Occam

El pasado diciembre salió a la luz el último número de Occam's Razor, una revista de divulgación científico-técnica surgida en la Universidad de Vigo y publicada en formato electrónico cada 6-12 meses (lamentablemente ha bajado la frecuencia) con licencia Creative Commons.




Los temas que tratan suelen ser bastante interesantes para cualquier aficionado a los ordenadores y las redes, y a pesar de la procedencia académica de la mayoría de los artículos estos se leen de forma amena. Tienen secciones dedicadas a la programación (para mi gusto demasiado centradas en C) y una trata específicamente el uso de diversas bibliotecas para ampliar los horizontes (quizá deberían probar un lenguaje multiusos moderno como Python ;) Otros contenidos habituales versan sobre redes, seguridad, criptografía, electrónica y/o hardware, nuevas tecnologías, etc. Una saga que me ha gustado especialmente es la introducción a malas bestias como netcat, SSH, nmap, vim, etc. Como guinda cuentan con una sección de trucos muy interesante y con cartas de los lectores donde se corrigen o amplían contenidos de los números anteriores.

Los 6 números disponibles hasta la fecha se pueden descargar en formato PDF junto al código fuente de los ejemplos y las fuentes LATEX de maquetación de la revista (cuyo proceso explican amablemente en su segundo número). Espero que sigan publicando, a ser posible con mayor frecuencia y ocupando ese raro lugar en medio del desolador panorama patrio...

martes, 31 de enero de 2012

Diccionario de Inglés en la consola de Linux

Mientras la situación económica y social se deteriora en este comienzo de año, he vuelto a retomar la programación de shell scripts. No es que me sienta alegre y despreocupado; soy plenamente consciente de la frivolidad que puede suponer casi cualquier forma de ocio hoy día, pero como los sudoku me aburren tengo que buscarme alternativas para mis ratos libres ante el PC con Linux. Además, ¿no dicen que los músicos del Titanic siguieron tocando como si nada?

La penúltima idea surgió hace unos días mientras usaba Google Translate. Me fijé en el URL del enlace titulado Turn off instant translation que aparece en la parte inferior izquierda de dicha web y se me encendió la bombilla: ¿por qué no usar un navegador en modo texto para llevar a la consola parte de la potencia de dicho servicio web? Después de trastear un rato con Lynx en modo "volcado a pantalla" (opción -dump) y unos cuantos filtros clásicos de Unix como grep, sed y cut la cosa tomó forma. Acabé añadiendo algunas comprobaciones y mensajes de ayuda/error para que sea utilizable por cualquiera y en poco tiempo tenía lista la primera versión de gtr, de momento limitada a traducir palabras del Inglés al Español y viceversa (usando la opción -r de "reverse") de forma rápida (gracias a la velocidad de los servidores del dios Google) y cómoda sin abandonar la línea de comandos.

Más abajo pego el código, que no habrá más que copiar y pegar a un editor de texto como gedit, guardar con el nombre "gtr" en un directorio de programas como /usr/local/bin y darle permisos de ejecución (también puedes descargar el script comprimido con gzip aquí). Listos para traducir "palabros raros" ;-)

#!/bin/bash

## gtr - Traduce palabras usando Google Translate
## v0.1 por Rodia (daltonico.net) 2012

gtserver="http://translate.google.com"

browser=$(which lynx)
if [ -z "$browser" ]; then
echo "$(basename $0): error: falta el navegador 'lynx'"
exit 1
fi

case $# in
1) query=$1;sl="en";tl="es";;
2) if [ "$1" == "-r" ]; then
sl="es"
tl="en"
query=$2
else
echo "Uso: $(basename $0) [-r] palabra"
exit 1
fi;;
*) echo "Uso: $(basename $0) [-r] palabra"
exit 1;;
esac

$browser -dump -nolist "$gtserver/?hl=en&eotf=0&sl=$sl&tl=$tl&q=$query"\
> /tmp/gtr.tmp 2> /dev/null

if [ "$?" -ne "0" ]; then
echo "$(basename $0): error: no se pudo conectar a $gtserver"
exit 1
fi

entrada_unica=$(grep -A1 'Alpha' /tmp/gtr.tmp | sed -n 2p | cut -b 4-)
mas_entradas=$(sed -n '/1\./,/^$/p' /tmp/gtr.tmp | cut -b 4-)

if [ -z "$mas_entradas" ]; then
if [ -z "$entrada_unica" ] || [ "$entrada_unica" == "$query" ]; then
exit 0
else
mas_entradas=" $entrada_unica"
fi
fi

echo -e "\n$mas_entradas\n"

exit 0