domingo, febrero 14, 2010

Cliff Click's Crash Course in Modern Hardware

Esta presentación de Cliff Click se me había pasado, pero como la publicaron de vuelta en Slashdot, no quiero dejarla pasar otra vez.

En el JVM Languages Summit 2009, Cliff cuenta en forma amena y tocando temas de procesadores multinúcleo, ILP, pipelining y cachés, por qué la arquitectura Von Neumann ha pasado a ser una sobre-simplificación de los procesadores actuales, y cuales son los puntos clave a tener en cuenta en lo que respecta al rendimiento del código que se ejecuta. SPOILER: ya no interesa contar los ciclos por instrucción, todo se reduce a caché misses.

Las slides en InfoQ van al compás del video, una buena idea.

miércoles, febrero 03, 2010

tvtime + xmltv + tv_grab_ar.py

En lo que ha sido del año pasado he dedicado poco tiempo a la TV, tras advertir como se viene abajo la calidad de la programación (o como cada vez uno se pone más exquisito), me da menos ímpetu. Veo la "caja boba" por la PC, como todo el que quiere ahorrar espacio, mediante una pequeña y económica placa sintonizadora (Encore ENLTV-FM) que funciona muy bien en Linux, incluso con control remoto.

Tratando de encontrar alguna emisión como la gente por el canal de cable, hace unos meses me dediqué a hacer funcionar la información en pantalla de tvtime. Básicamente, tvtime obtiene la información de programación a partir de un archivo con formato estándar XMLTV, por lo que del lado del software de visualización está todo hecho, lo que falta es conseguir una fuente desde la cual obtener la información y entregársela de la forma adecuada (es decir, generar el archivo XML).

De eso se encargan los scripts del paquete xmltv-util. En particular, el script tv_grab_ar toma la información de mi proveedor de cable en argentina, amasa los datos y escupe un xml que se puede pasar directo a tvtime. Lamentablemente no logré hacer funcionar la versión 1.6 de tv_grab_ar tal cual viene en el paquete, y tras varios minutos haciendo debugging sobre las líneas decidí dejar de descifrar perl y comenzar a escribir un nuevo script en python.

Las primeras versiones fueron bastante sencillas, la librería BeautifulSoup lxml (BeautifulSoup ya no funciona correctamente) facilita mucho nadar en el HTML del sitio web de MC. En versiones siguientes añadí la posibilidad de descargar la reseña de cada programa de TV, una funcionalidad que según creo no estaba en el paquete original.

Básicamente los pasos son: obtener la grilla de programación de la semana actual para cada canal, y luego para cada programa obtener el título, horario, descripción, género, etc. Como la descarga de descripciones es muy tediosa y lenta (es como mínimo una petición HTTP por programa) y como muchas veces los programas se repiten (en la misma semana o entre semanas) aproveché el módulo pickle para almacenar el diccionario de emisiones entre invocaciones al script, agilizando de esta manera la actualización de los datos.

Finalmente terminé con este script que dejo en el blog por si a alguien le sirve. Las capturas de pantalla son un indicio de como tvtime presenta la información. Como siempre, cualquier consulta, sugerencia, crítica o mejora es bienvenida.

Descarga: tv_grab_ar.py [ver. 2015.03.02-1]

Últimos cambios: Fix sutil por problemas en la codificación de los títulos. Reincorporación del caché y de la descarga de descripciones de los shows. Sean pacientes pues la descarga ahora demora bastante más tiempo que antes. Si quieren la programación rápidamente, aunque no tenga las descripciones, usen --skip-descriptions. Como no tengo forma de probarlo localmente, Please Test & Give Feedback!



Instalación:
  1. Descargar tv_grab_ar.py y mover el archivo al directorio de tvtime:
    mv tv_grab_ar.py ~/.tvtime/tv_grab_ar.py

  2. Instalar la librería beautifulsoup:
    apt-get install python-beautifulsoup

  3. Instalar la librería python lxml:
    apt-get install python-lxml

  4. Ejecutar:
    ./tv_grab_ar.py --configure
    e indicar la zona y los canales para los cuales se desea obtener la información. El valor de zona determina la grilla de canales según la localidad.

  5. Ejecutar:
    ./tv_grab_ar.py --verbose --output=programacion.xml
    para obtener la programación y las descripciones de los programas. Este proceso demora varios minutos, sean pacientes.

  6. Iniciar tvtime e indicar que obtenga la programación desde el archivo:
    tvtime --xmltv=programacion.xml
Para finalizar, lo ideal es colocar en el cron de usuario una entrada para ejecutar la actualización al menos una vez por semana.



usage: tv_grab_ar.py [-h] [--days N] [--offset N] [--skip-descriptions]
                     [--output FILE] [--configure] [--config-file FILE]
                     [--quiet] [--verbose] [--list-channels] [--zone N]
                     [--capabilities] [--describe] [--description]
                     [--cache FILE] [--version]

Get Argentinian television listings in XMLTV format

optional arguments:
  -h, --help           show this help message and exit
  --days N             Grab N days. The default is 3.
  --offset N           Start N days in the future. The default is to start
                       from today.
  --skip-descriptions  Do not download program descriptions.
  --output FILE        Write to FILE rather than standard output.
  --configure          Prompt for which channels and write the configuration
                       file.
  --config-file FILE   Set the name of the configuration file, the default is
                       </home/maurom/.xmltv/tv_grab_ar.conf>. This is the file
                       written by --configure and read when grabbing.
  --quiet              Suppress the progress messages normally written to
                       standard error. [not implemented]
  --verbose            Display additional information.
  --list-channels      Display only the channel listing.
  --zone N             Override user location for retrieval of channels.
  --capabilities       Show which capabilities the grabber supports. For more
                       information, see
                       <http://wiki.xmltv.org/index.php/XmltvCapabilities>
  --describe           Show a brief description of the grabber.
  --description        Show a brief description of the grabber.
  --cache FILE         Cache description data in FILE. The default is 
                       </home/maurom/.xmltv/tv_grab_ar.db>.
  --version            show program's version number and exit