viernes, diciembre 20, 2013

Adiós, Winamp

Desde la 0.92 a la 3 fuiste el mejor reproductor de música para la windola. Brindemos por las innumerables horas que pasé escuchándote :'-(
(y por los vuelos mentales con plugins de visualizaciones)

jueves, diciembre 19, 2013

Kernels nuevos en Debian Stable

Vengo siguiendo bastante de cerca la publicación de versiones estables del kernel de Linux. A fines de diagnóstico suelo compilar la última versión disponible e instalarla en varias de las máquinas sobre las que tengo acceso. Como quizás le sirva a más de uno, acá dejo disponible la última versión que compilé en casa.
Todas estas son directamente instalables sobre Debian GNU/Linux Wheezy 7.0 de 64 bits sin quilombo de dependencias. Cada directorio contiene los paquetes con la imagen del kernel, los encabezados, el firmware y la configuración utilizada en la compilación.
Si les interesa saber qué hay de nuevo, les dejo el clásico resumen hecho por la gente de KernelNewbies: Linux 4.0.

Actualización 2015: en función a la reciente publicación de la nueva versión estable Debian GNU/Linux 8.0 Jessie, y tras haber migrado los equipos que utilizo habitualmente, mantendré a los paquetes aquí publicados brevemente como históricos y luego -eventualmente- desaparecerán del repositorio. Para los que estén interesados en mantenerse al día con las últimas versiones, encontrarán nuevos paquetes del núcleo en el post dedicado a Kernels nuevos en Debian Jessie.

jueves, noviembre 14, 2013

gzip y poesía

Cómo gunzip decodificaría una versión comprimida de "El cuervo" de Poe. Cada secuencia de caracteres entre llaves es una referencia a una secuencia previa del texto. Créditos a Julia Evans!

lunes, noviembre 11, 2013

Lavando el teclado

La máquina de escritorio tiene un teclado que ya pasa los doce años. En el medio ya cambié de máquina tres veces, sin embargo el teclado se mantiene constante. Hay algunas razones:
  • la distribución de teclas en inglés me resulta cómoda para programar (vale decir, para escribir los símbolos más utilizados no necesito pulsar teclas modificadoras);
  • las teclas están bien espaciadas y el recorrido es cómodo al tacto;
  • el conector es PS2, con lo cual todavía puede usarse con algunos equipos; y desde ya,
  • todas las teclas funcionan como recién comprado, por lo cual no tiene sentido cambiarlo aún.
Indudablemente, pasados algunos años, todo teclado que se utiliza diaramente se torna un museo de suciedad, y esta no es  la excepción, así que cada tanto me tomo el tiempo de pegarle una enjuagada. Además, está el argumento de que un teclado sucio es más peligroso que un asiento de inodoro -lo que no me parece nada extraño- así que una limpieza no viene mal.
Si bien se puede limpiar por afuera, gran parte de la suciedad acumulada queda generalmente bajo las teclas, por lo que la mejor manera de dejarlo brillante es desmontándolo entero. Afortunadamente este modelo está armado mediante encastres, por lo que se pueden desmontar tanto las teclas como el cuerpo sin necesidad de sacar un sólo tornillo.
Así que, ya decidido no a limpiar el teclado sino a lavarlo completamente, el primer paso fue sacar algunas fotos antes del despiece para recordar dónde debo ubicar cada tecla al ensamblarlo nuevamente.


Como puede observarse, el estado ya era deplorable. Debería haberlo limpiado antes, pero sin un reemplazo como para usar en el equipo mientras se seca, no me quise arriesgar.
Las teclas en este modelo se sacan simplemente tirando hacia arriba con fuerza. Podría haber usado un destornillador para hacer palanca, pero no hizo falta. Ya sin las teclas, hay tres grampas plásticas que mantienen juntas las tapas del cuerpo y que también hay que quitar.


Este es el lado interno de la tapa superior, van fotos de vuelta para recordar donde va cada tira y cada cuadradito de goma. Desconozco qué diferencia hay entre los verdes y los amarillos, para mí son lo mismo. De la tapa inferior saqué el circuito y el film que contiene las pistas de las teclas, que dejé enrollado y reservado para cuando todo esté seco nuevamente.



Enjuague y revisión de cada tecla y montante para remover restos que pudieran haber quedado. Algunas pasaron por el cepillo para quedar relucientes.


Para secarlas, la mejor opción es una centrifugadora de verdura, un secador de pelo de baja temperatura, o bien varias horas sobre papel tissue. Las tapas, dejándolas afurea a la sombra, quedan listas en unas horas.


Ya seco, está listo para ensamblar. Luego de poner cada tecla, sólo queda repasar el cable con un paño y desengrasante.


El producto terminado.


Antes y después. El amarillo en algunos lugares no es por suciedad sino por ciertos químicos que hacen que el plástico se torne así con el tiempo. El blanco original se puede recuperar con agua oxigenada y un poco más de trabajo, pero por ahora ya estoy hecho; eso quedará para otra vez.


martes, octubre 08, 2013

Nueva versión rc de tv_grab_ar.py

A comienzos de 2010 tiré las primeras lineas de código para un sencillo script que descarga la grilla de programación de un conocido proveedor de televisión por cable. Este script retorna la información en formato XMLTV lista para ser consumida por aplicaciones tales como TvTime y MythTV.

Hoy me toca publicar una versión extremadamente release candidate de este grabber tv_grab_ar.py, originada por una serie de cambios en el sitio web fuente de la información. La actualización ha implicado una reescritura de más de la mitad del código original, por lo cual lo considero una versión aún en pruebas.

Las novedades incluyen:
  • La reescritura completa por los cambios en el sitio web del proveedor.
  • Un nuevo método de descarga de grillas y fichas, algo mas eficiente que el anterior.
  • Arreglos para que el archivo de salida valide contra la definición xmltv.dtd.
  • Conversión del parsing de argumentos desde optparse a argparse.
  • Implementación de los argumentos days y offset.
Es REQUISITO volver a configurar el grabber ejecutando ./tv_grab_ar.py --configure

Esta versión no utiliza el almacenamiento temporal de las fichas de programas (fichas.db) y entre las cuestiones aún no resueltas está la definición de la localización y el tipo de señal de la que se dispone (analógica, digital o hd), que es sobre lo que necesito comentarios de ustedes.

Como siempre, please test & give feedback.

Link de descarga en el post original.

martes, agosto 27, 2013

Un vistazo a código de la demoscene '93

Desde mis primeros años cerca de las computadoras siempre me fascinaron las demos.

No, no me refiero a las versiones recortadas de programas o juegos que se dan con fines comerciales, nada de eso. En nuestro contexto también se denominan demos a ciertas presentaciones multimedia creadas por programadores y artistas como una forma de arte alternativo y como muestra de sus capacidades.

Cualquiera que vea una demo en funcionamiento podría confundirla simplemente con un videoclip medio bizarro que se reproduce en la PC. A simple vista parecería ser sólo eso. Sin embargo, el archivo que almacena ese “video”, por así decirlo, suele pesar apenas 64 kilobytes, o incluso menos, 4 kilobytes; y una de las características que más asombran es precisamente esa: ¿cómo logran “almacenar” este tipo de animaciones en un archivo tan pequeño? 

El truco, en realidad, radica en que el video en sí (y la música, normalmente) no está contenido en el archivo binario, sino que el binario es un archivo que al ejecutarse genera completamente la animación, como una especie de “mueble autoensamblable”.

Además de este detalle, los programadores de demos buscan aprovechar al máximo las características del hardware para el cual están trabajando, logrando animaciones que en muchos casos son impensables de ver en esos limitados equipos.

Buena parte de estas demos son creadas por grupos multidisciplinarios denominados demogroups, cuyos miembros son muy buscados por los departamentos de recursos humanos de la industria de videojuegos, sea como programadores, artistas gráficos o músicos, e incluso figuran entre los participantes de la reconocida conferencia académica de gráficos por computadora SIGGRAPH.

El coder aancsiid resume en pocos párrafos “Qué es una demo”, y los artículos Demo (Computer_programming) y Demoscene en Wikipedia son buenos puntos de partida para acercarse a la historia y las particularidades de las demos, pero lo que no pueden dejar de conocer son los clásicos sitios Pouet.net y Scene.org, dedicados exclusivamente a las obras de esta subcultura.

De las que me han dejado con la mente en blanco recuerdo a heaven seven de exceed, fr-041:debris de farbrausch,  elevated de rgba&tbc, chaos theory de conspiracy/cns, y las mas nuevas como agenda de fairlight, spin de asd.

Para que se den una idea, el ejecutable de heaven seven pesa 64 kilobytes, y logra todo esto ...



con sólo 64 kilobytes !!!... debris pesa 177 kilobytes, y la demo elevated pesa 4 kilobytes... Piensen que al día de hoy el código HTML de una página web pesa en promedio unos 52 kb, y una fotografía digital pesa por lo menos 3.000 kb. Esta gente logra toda una experiencia multimedia en apenas una fracción de eso... Pero no se queden con lo que les digo: si tienen una máquina a mano, bájense los binarios y ejecútenlos, para ver la realidad.

Cyberhades tiene también una buena lista de posts dedicados al tema, y precisamente es por ellos que me entero de que el grupo Future Crew ha dejado disponible el código fuente de la demo “Second Reality”, con motivo del 20 aniversario de su creación.

Y aquí repito: el CÓDIGO FUENTE DE LA DEMO. Piensen que, dadas las exepcionales secuencias gráficas que los demogroups eran capaces de generar en aquella época, los hacks que éstos utilizaban para lograrlas eran secretos muy bien protegidos que muchas veces definían los primeros puestos en las competencias internacionales (demoparties). Por ello, poder acceder al código completo de una, ver su estructura interna y descifrar su funcionamiento es un regalo que hay que agradecer.



Además de felicitar a Future Crew por su amplia trayectoria, merece mis respetos Fabien Sanglard al acercarnos esta maravilla a los mortales mediante un ilustrado análisis de los fuentes de Second Reality que, por caso, contienen código en Assembler, C y Pascal. Recordemos que Sanglard nos viene deleitando ya con la aproximación al código fuente detrás de Prince of Persia, Doom y Quake.

Me encantaría seguir charlando de demos, pero mejor que eso es sentarse a ver algunas por demoscene.tv, capped.tv, o mejor, ejecutándolas en vivo en la PC.

sábado, julio 06, 2013

Instalación de ipfw/dummynet en Debian Wheezy

¿dummynet? ¿qué es dummynet?

Según su sitio web: “dummynet es una herramienta de simulación de redes en vivo diseñada originalmente para probar protocolos de red, y que desde entonces se utiliza para una variedad de aplicaciones entre las que se incluye el manejo de ancho de banda. Simula/impone limitaciones de encolado y ancho de banda, retrasos, pérdida de paquetes y otros efectos. Implementa también varios algoritmos de planificación. dummynet puede utilizarse en el mismo equipo donde se ejecuta la aplicación a probar o en cajas externas que actúan como enrutadores o puentes.
La selección de tráfico se realiza mediante el firewall ipfw, que es la interfaz de usuario principal para dummynet. ipfw permite seleccionar con precisión el tráfico y la dirección a trabajar, simplificando su configuración y uso.”
Para más información los dirijo al completo artículo Dummynet Revisited de los autores Marta Carbone y Luigi Rizzo.

Procedimiento

Con la colaboración de varios compañeros de trabajo surgió la siguiente receta para construirlo en Debian Wheezy (en este caso para amd64, pero es similar en i386). No es la única ni la mejor manera, pero es una que funciona. Si alguno encuentra una mejor, será bienvenida.
  1. Bajar la versión de ipfw compatible con kernels 3.x (20130607 o superior) y descomprimirla
    wget http://info.iet.unipi.it/~luigi/doc/20130607-ipfw3.tgz
    tar xvzf 20130607-ipfw3.tgz
  2. Instalar los paquetes necesarios para Debian
    apt-get install build-essential linux-headers-`uname -r` \ 
    linux-source-3.2
  3. Desempaquetar el código fuente completo del kernel linux. Esto requiere al menos 700 MB de espacio en disco libres, así que estén preparados.
    cd /usr/src
    tar xvjf linux-source-3.2.tar.bz2
  4. Copiar la configuración del kernel que se está ejecutando y las versiones de los módulos instalados
    cd /usr/src/linux-source-3.2
    cp -v /boot/config-`uname -r` .config
    cp -v /usr/src/linux-headers-`uname -r`/Module.symvers .
  5. Preparar el entorno de compilación del kernel
    cd /usr/src/linux-source-3.2
    make prepare
    make scripts
  6. Compilar ipfw indicando la ruta a los fuentes del kernel
    cd /ruta/a/ipfw3-2012
    make KSRC=/usr/src/linux-source-3.2
  7. Si no tiró errores, probar la carga y descarga del modulo ipfw_mod
    insmod kipfw-mod/ipfw_mod.ko
    dmesg
    rmmod ipfw_mod
  8. (Opcional) Instalar los binarios de ipfw y el modulo del kernel
    mkdir /lib/modules/`uname -r`/updates
    cp -v kipfw-mod/ipfw_mod.ko /lib/modules/`uname -r`/updates
    depmod
    cp -v ipfw/ipfw /usr/local/sbin
    chmod +x /usr/local/sbin/ipfw
  9. (Opcional) Verificar la instalación del modulo y agregarlo para cada inicio del equipo
    modprobe ipfw_mod
    dmesg
    echo ipfw_mod >> /etc/modules
  10. Listo!
Dejo un breve script para los haraganes que, como yo, prefieren ejecutar todo el procedimiento de un saque: build-ipfw.sh

Suerte y saludos!

jueves, julio 04, 2013

Renovando el escritorio

El tiempo ha pasado sigilosamente, las máquinas virtuales tardan cada vez más en procesar, las aplicaciones requieren de más memoria y almacenamiento... En síntesis, la obsolescencia se fue adueñando de la vieja Pentium D y de su propio usuario hasta que llega el momento de una renovación.

Así se ve el escritorio nuevo:


Software:
Debian GNU/Linux 7.1 (Wheezy, amd64)
Kernel 3.2.0-4-amd64 (3.2.46 en realidad)
Gnome 3.4.2 Classic (con iconos Gnome-Colors)

Hardware:
Intel Core i5-3470 @ 3.20 Ghz (quad)
Intel DZ68DB Motherboard
Intel Ivybridge Desktop HD2500 GPU
Memox 8 GB DDR3 RAM
Seagate Barracuda ST500DM002 (500 GB, 6Gb/s, 16Mb, 7200RPM)

viernes, marzo 15, 2013

SUBE no quiere Ubuntu(s)

No hace mucho comentaba en este mismo blog sobre mis dificultades para hallar el listado de viajes realizados en el sistema web de la tarjeta SUBE. Hoy volvemos a tocar este tema a partir de lo descubierto por un gran amigo.

Para (volverlos a) poner en contexto la tarjeta SUBE, o más bien el Sistema Único de Boleto Electrónico, es: "Un servicio para abonar con una sola tarjeta viajes en colectivos, subtes y trenes adheridos, en la Región Metropolitana de Buenos Aires."

Un excelente profesional, con el que tengo el gusto de compartir el trabajo diario, me remitió el siguiente correo:
Una curiosidad. Estando en casa, quise entrar en la página de la tarjeta SUBE para ver los viajes realizados (https://gestiones.sube.gob.ar/bienvenida.aspx), y me encontré con este mensaje de error:
No le presté demasiada atención en ese momento (será problema del sitio, me dije a mí mismo). Al día siguiente intenté nuevamente, con idéntico resultado. Pero oh sorpresa, con otro navegador (Chromium en vez de Firefox) sí pude ingresar.

Probé cambiarle el useragent al Firefox ¡y también pude ingresar! Y luego de un rato llegué a la conclusión de que lo que no le gusta al sitio es la palabra Ubuntu en el useragent del Firefox: quitándola, o reemplazándola por cualquier cosa como Windows, Suse, Debian o incluso la palabra 'basura', entra sin dramas.

Y corroboré ese hallazgo cambiando el useragent de chromium, agregándole la palabra Ubuntu. Ejecutando desde la línea de comandos $ chrome --user-agent="Mozilla/5.0 (X11; Ubuntu; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.619.0 Safari/534.16" tampoco me dejó ingresar.
No contento con lo encontrado, se tomó unos minutos para seguir investigando:
Descubrí algo más. No es la palabra Ubuntu de por sí la que dispara el filtro, ya que lanzando el navegador con --user-agent="Ubuntu" también deja ingresar a la página para realizar gestiones.

La cuestión parece ser "X11; Ubuntu"

Si uno suprime el X11, o si los cambia de lugar (por ej. "Ubuntu; X11"), también entra.
Ahora bien, ¿me puede explicar alguien qué tiene de malo Ubuntu como para que restrinjan ese sistema operativo en la plataforma del sistema SUBE? Como hemos visto, el error sólo ocurre con Ubuntu, con Debian funciona correctamente.

miércoles, marzo 06, 2013

Identificar sockets en uso en 3.. 2.. 1..

Normalmente uso
# netstat -tnap
pero debo decir que
# lsof -i -P +c 0 +M
resulta sumamente útil también.
Visto en alias.sh

martes, marzo 05, 2013

Drop Table Captcha

Justo a mí me viene a tocar...

Como mínimo, espero hayan implementado correctamente la validación de entradas.

miércoles, febrero 27, 2013

Gruhak Covers The Greatest Classic Rock Songs

Hace ya bastante tiempo, no recuerdo cuando ni qué estaba buscando, creo que era alguna versión de The Seeker de los Who en vivo, por la máquina de Youtube caigo en la playlist de una bandita croata que para juntar un poco de fama se largó con unos covers de temas clásicos de rock. Hasta ahí es la historia clásica, en Youtube hay cientos de miles de covers.

El tema es que a mi juicio suenan bien, demasiado bien. Y como cuando alguna banda suena bien hay que compartirla, les dejo aquí algunos de los covers interesantes:

Gruhak Covers The Greatest Classic Rock Songs (Playlist)

Gruhak - Comfortably Numb (Pink Floyd)



Gruhak - Rock and Roll (Led Zeppelin)



Gruhak - The Seeker (The Who)


Gruhak - Bullfrog blues (Rory Gallagher)



Gruhak - Rock and Roll damnation (AC/DC)


Gruhak - Love me two times (The Doors)


Pero de toda la lista, la versión que hacen de No Quarter es a mi criterio una joya oculta. Lamentablemente los muchachos de Google primero le silenciaron el audio y luego bajaron el tema entero (justo a ese!), pero tuve el tino de bajarme el tema de Youtube antes de que lo limpiaran, así que se los dejo en línea para que lo disfruten.

Gruhak - No Quarter (Led Zeppelin)


Los muchachos de Gruhak (así se llama la banda) también tienen, por supuesto, temas propios que largaron en el primer album el año pasado, así que si tienen tiempo dénse una vuelta por su web para escucharlos.