Bievenidos al tren

Hola!

Este blog está en pleno proceso de mudanza y metamorfosis. Antes estaba en http://nqnwebs.com/blog y utilizaba SPIP. Por diversas razones que explicaré más adelante, estoy migrandolo a Nikola utilizando Github como plataforma de versionado y hosting.

Espero que pronto esto esté más bonito y con contenido. También que la mudanza y el cambio de herramienta (y paradigma) me ayude a escribir más.

De mercurial a git, limpieza mediante

Cuando decidí dar el salto desde Subversion a un DVCS estuve leyendo muchos posts comparativos entre las dos opciones más relevantes, Git y Mercurial. Había que elegir entre Mc Gyver o James Bond decía uno, entre Denzel Washington y Wesley Snipes y la comparación jocosa entre estos dos grandes softwares se volvió una especie de meme tácito.

Sabía que, a fin de cuentas, tenía que probarlos y ver cual encajaba mejor para mis necesidades de "solo developer". En el medio leí Hg Init del gran divulgador Joel Spolsky y, víctima de semejante labia, me sumergí para ese lado.

Mi flujo de trabajo era bastante básico pero suficiente y superador de subvesion. Comparado con lo que había probado de Git era mucho menos verbósico (no podía entender la necesidad de Git hacer add cada vez que quería commitear un archivo modificado) y Bitbucket daba no sólo hospedaje gratuito para repositorios públicos sino también para potenciales desarrollos privados (cosa que GitHub, su equivalente — siendo benévolo con bitbucket — para Git, no daba).

Con el tiempo empecé a compatir algunos proyectitos con otros desarrolladores y mi inexperiencia en Mercurial me empezó a jugar en contra. Y justo cuando necesitaba ponerme a aprender más profundamente Hg, entre a laburar, muy a gusto, en Machinalis (qué vago, nunca conté nada por acá) donde usamos Git para el control de versiones de los proyectos, implementando esta política de ramificación y mezcla.

Resultó entonces que en poquito tiempo ya sabía mucho más de Git que de Mercurial (con la ventaja de tenerlo a Daniel Moisset cerca para apagar algunos incendios que encendí las primeras semanas).

Para más señales, Atlassian, la empresa detras de Bitbucket y principal referente de Mercurial (junto con Selenic, la creadora), comenzó a ofrecer Git (sin descartar mercurial) como sistema DVCS (comiéndose alguna que otra gastada porque alguna vez comunicó una noticia parecida como broma del dia de los inocentes).

Asi que llegó el dia que decidí mudar un proyecto en Mercurial a Git. Atenti: las razones no son técnicas. No tengo suficiente conocimiento de Mercurial (ni de Git) para decir que uno es mejor que el otro por tales razones. Sólo es *mi experiencia*, que vino un poco por obligación. Y sí, también, siguiendo un poco a la manada. Proyectos de la envergadura de Django han migrado a Git (y, particularmente, a GitHub)

La limpieza

Soy de esos que se mudan seguido. "¿Asi que si te renuevo contrato me aumentas 30 % el alquiler e igual te tengo que pagar comisión sin que hagas nada? ¡Andá a cagar!" puedo imaginarme dialogando con algun agente inmobiliario.

Esta no era la excepción y debía mudar un repositorio mercurial que a su vez había sido mudado (en realidad, exportado desde el último commit, y arrancando de 0) desde subversion.

El detalle es que el repositorio original, y por ende el nuevo en mercurial, tenia un montón de datos de documentación que era, basicamente, todos los fuentes y muchos de los archivos generados del reporte escrito de mi tesis.

El primer changeset en el flamante mercurial consistió en borrar todo esa información innecesaria, pero que seguía allí, en el historial (uno 110Mb de datos que no necesitaba).

Así que ya que ahora iba a mudarme de nuevo, queria tirar a la basura todas esas cajas de papeles que había metido en un caja y, si bien no la veía, me ocupaban el placard.

Despues de darle vueltas, encontré una punta usando la extensión hg convert para obtener un subconjunto de repo original, por ejemplo, partiendo de un determinado cambio.

  1. Primero, activar la extensión editando ~/.hgrc:

    [extensions]
    convert =
  2. ¡Tirar las cajas del placard!

    $ hg convert --config convert.hg.startrev=1 repo_hg_orig/ repo_hg_liviano/

En mi caso yo queria todo desde la revision 1. Atenti: como explica, esto genera un repo totalmente nuevo, con ids distintos para los changesets, de modo que no se puede mantener "sincronizados" ambos con el mismo cambio (al menos no de manera directa).

La mudanza

Contra todo pronóstico fruto de mi prejuicio y desidia, migrar a git fue extremadamente fácil usando hg-fast-export.

  1. Obtener los scripts

    $ git clone git://repo.or.cz/fast-export.git
  2. Convertir!

    $ mkdir repo_git
    $ cd repo_git
    $ git init
    $ ~/fast-export/hg-fast-export.sh -r ~/repo_hg_liviano/ --force

¡Charánnnn...!

El flag --force era necesario en mi caso porque, como explica el readme.txt "hg-fast-export supports multiple branches but only named branches with exaclty one head each...".

El resultado fue un repo git que ocupa el 5% (5.6mb) que el mercurial original que sin perder la historia útil.

Parafraseando a Lito, si la historia la escriben los que ganan ... ¿ganamos ?

Cómo volver a compartir desde Google Reader

Desde hace muchísimo tengo en mi otro blog una sección que se llama "De por ahí, cosas que me parecieron interesantes". Es un feed de links a contenidos de toda índole (política, literatura, cine, fotografía, deportes, programación: intereses anchos) con un brevisimo extracto como descripción que fui alimentando de diversas formas a lo largo del tiempo: usé delicious, usé mi twitter incorporó la opción de "Compartir" se convirtió en la manera por defecto: si algo me gustaba, un click en compartir y listo. Eso permitia que otros usuarios de Reader que me "seguian" pudieran ver mis posts compartidos pero a la vez generaba un feed rss que alimentaba la sección de mi blog.

Con la aparición de Google+ aquella simple y muy usada funcionalidad se vió desplazada por el botón "+1" y por un "compartir" engañoso que sólo permite compartir en Google+

Para colmo, cuando uno hace "+1" en algun contenido (dentro de Google Reader o en cualquier lado donde esté el botón) se lista en una página publica pero que no tiene feed RSS! . Larry Page, (doblemente) te odio.

Frustración colectiva

La bronca por los cambios en Reader no es sólo mia, sino que generó una petición firmada por más de 13000 usuarios que manifiestan que "algunos ven estos cambios como un intento errado para forzarnos a usar Google Plus, pero nosotros amamos la utilidad, simplicidad y funcionalidades sociales limitadas que ofrece Google Reader".

Mientras tanto, muchos (1, 2, 3) intentan parchar el atropello.

Mi solución

"¿Así que no me dejás compartir donde yo quiera, el algoritmo de tu madre!?" vociferé, y no sin premeditación agarré Yahoo! Pipes (una genialidad, hay que decirlo) para scrappearlos a puro golpe de mouse y sin salir del navegador. El resultado fue este pipe del que se puede obtener, por ejemplo, un feed RSS 2.0 de mis +1s . Podés obtener el feed de otros usuarios así:

http://pipes.yahoo.com/pipes/pipe.run?_id=770fc166fd07a0f6e67fe63f513b05dc&_render=rss&google_plus_id=[GOOGLE_PLUS_ID] donde [GOOGLE_PLUS_ID] es el numero de identificación del usuario en cuestión.

http://nqnwebs.com/local/cache-vignettes/L510xH139/google-plus-user-profile-id-f8dfc.png

Lo que hace un geek cuando ama

Mi computadora de escritorio, la primera que compré trabajando como desarrollador de software, es del 2005. La "morocha", una AMD64 con placa madre Asus K8N que se la sigue bancando.

/images/1110133923_20ebd-30987.jpg

Aquel año me enamoré, no por primera vez, pero sí mucho. Aunque resultó una historia complicada, es lindo recordar cuanto uno es capaz de amar y ser amado. Y reirse, también, de cuán estúpido se puede ser en ese estado.

El tatuaje digital

Hay gestos de amor que no miden consecuencias y son dificiles de comprender. Yo, por ejemplo, decidí "hackear" la BIOS de mi maquina recién comprada y poner una foto de aquella mujer amada como pantalla de splash, esa que se muestra apenas se enciende la computadora, mucho antes de cargar cualquier sistema operativo.

Si bien por entonces ya usaba linux, para hacer esto usé una aplicación oficial de Asus que venía en el Windows instalado, que pronto, a falta de espacio en disco y necesidad, desapareció.

La historia siguió, por supuesto. Aquel amor terminó pero esa imagen quedó allí, tatuada. Mientras vivía solo mucho no me importaba, quizas porque reiniciaba muy poco la computadora, quizas porque uno naturaliza una cicatriz hasta volverse indiferente.

Cuando un amor nuevo llegó y más tarde la convivencia, encender la Morocha cada mañana empezó a hacerse un momento gracioso pero incómodo. Para colmo, aun estando dispuesto a reinstalar Windows con este único propósito, aquel programita de Asus se me hizo inconseguible .

Hasta que hoy, seis años despues, me animé a la cirugía.

Si no podés cambiar el tatuaje, cambiá de piel

Encontré un firmware actualizado para la BIOS. Aunque no hubiera problemas con la que tenía, actualizarlo traería el splash original de Asus.

El problema, felación habitual a Microsoft de las fabricantes de hardware, es que la utilidad para actualizar BIOS es para D.O.S.. WTF!

La solución es usar FreeDOS

# obtener una imagen booteable de freeDOS y montarla en un directorio
wget http://www.fdos.org/bootdisks/autogen/FDOEM.144.gz
gunzip FDOEM.144.gz
mkdir /tmp/floppy
mount -t vfat -o loop FDOEM.144 /tmp/floppy

# obtener la herramienta para actualizar el bios y la imagen, y moverlos
wget http://dlcdnet.asus.com/pub/ASUS/mb/flash/AFUDOS211.zip
unzip AFUDOS211.zip
mv AFUDOS.exe /tmp/floppy
wget http://dlcdnet.asus.com/pub/ASUS/mb/sock754/K8N/K8n1011.zip
unzip K8n1011.zip
mv 1011.rom /tmp/floppy

# desmontar
umount /tmp/floppy

# crear una ISO y grabar a un disco virgen
# (tambien se podría grabar a un pendrive)
mkisofs -o bootcd.iso -b FDOEM.144 FDOEM.144
cdrecord -v bootcd.iso

Reinciar, bootear el CD de FreeDOS y ejecutar:

afudos /i1011.rom

Cuevanalinks, ahora para seres humanos

Un colega al que no conozco personalmente, Martín Chikilian, se ofreció a desarrollar una interfaz gráfica para Cuevanalinks.

Luego de algunos dias y teniendo una paciencia descomunal para soportar siempre nuevos requerimientos de mi parte, obtuvo una versión de Cuevanalinks-GUI, basado en PyQt

http://nqnwebs.com/local/cache-vignettes/L510xH411/2011-08-03-115827_693x558_scrot-0e6d2.png

Todavía está en desarrollo (hay algunos bugcitos y decisiones de diseño que no resolvemos del todo) pero ya ofrece ciertas ventajas sobre la versión para línea de comandos:

  • Permite elegir qué se descarga cuando se hace una búsqueda de películas

  • Te deja armar una cola de descargas de muchas cosas distintas haciendo muchas busquedas

  • Y, lo más importante, lo puede instalar y usar un ser humano normal. :D

Para Windows, hay un instalador de la versión 0.5dev (el dev denota que está en desarrollo, se entiende) que se puede descargar desde acá:

Para los linuxeros, Martín puso algunas instrucciones para hacerlo andar desde los fuentes.