El disco zombie

Total que actualicé atom, la maquinita (con un procesador Atom, sorprendentemente) que siempre está prendida en mi casa. Si cuento al PS3 como computadora, en mi departamento tengo siete computadoras, cinco de las cuales uso casi todos los días; las otras dos son laptops viejitas.

Atom es la única que está prendida todo el tiempo (excepto cuando se va la luz, que gracias a los externos inútiles que ha contratado la CFE en toda la zona centro del país, cada vez es más común), y por lo tanto no la actualizo muy seguido. Además, siendo el Atom un procesador no terriblemente poderoso, prefiero no tenerlo compilando muy seguido.

El viernes dejé atom actualizándose, y cuando regresé a mi casa el domingo descubrí que se había ido la luz (los idiotas de la CFE de nuevo). Por lo tanto la máquina había muerto a la mitad de estar compilando el sistema, lo cual nunca es algo bueno. Cuando la prendí, la chingadera se negó a levantar el sistema.

Fui por un cable VGA y conecté la computadorcita a mi televisionsota, y vi que Linux daba un mensaje de error al inicializar de que el disco duro no estaba. Temí lo peor, que una descarga eléctrica hubiera quemado el disco duro, así que desarmé la maquinita y puse el disco duro en mi maquinota. El disco estaba bien.

Necesitaba levantar la máquina para poder analizar bien la situación, así que me lancé a la tarea de hacer un USB booteable (atom no tiene unidad de CD). Por supuesto, no lo conseguí; lo había hecho hace unos años, pero sí es ligeramente engorroso, y me harté y desarmé la maquinota para sacarle el CD y ponerlo en la maquinita. Y de ahí el relajo fue conseguir quemar un LiveCD de Gentoo en un CD-RW.

Cuando por fin tuve el LiveCD corriendo, lo primero que pensé fue que se podía haber jodido el MBR con grub, así que reinstalé grub. No funcionó. Luego pensé que tal vez una nueva versión de udev había quedado mal, así que reinstalé udev. No funcionó. Luego pensé que tal vez sería el kernel, así que actualicé y compilé el nuevo kernel. No funcionó.

Después de haber perdido unas cinco horas así, por fin me metí a la red y encontré este bug de Gentoo justamente, y con eso pude solucionar el problema.

De hecho mi intuición estaba bien; había una combinación de broncas entre grub, udev y el kernel, pero estaba muy cabrón que me diera cuenta por mí mismo (había que cambiar una opción de compatibilidad del kernel). Que yo configuro y compilo mis kernels no ayudó.

En Unix “todo es un archivo”. Lo pongo entre comillas, porque eso no es cierto; casi todo es casi un archivo. Esto lleva a tener un directorio /dev donde hay archivos que representan hardware; tarjetas de video, de sonido, discos duros, etc. La idea de que “todo” fuera un archivo surgió en los 70s, en parte para aprovechar la poderosa línea de comandos que Unix siempre ha tenido.

El problema era que en los 70s, el hardware de una máquina básicamente estaba grabado en piedra; hoy en día podemos conectar y desconectar decenas de dispositivos de nuestro sistema (y de hecho algunos lo hacemos… casi diario). Si el directorio /dev fuera estático, tendría que tener especificados los archivos para casi todo el posible hardware en existencia; algo completamente imposible.

Lo que hicieron en Linux fue entonces crear udev (después de intentos fallidos como devfs). La idea es que cada vez que el sistema operativo detecta cierto hardware, entonces crea el archivo correspondiente dentro de /dev. Lo cual en general funciona de pelos, pero gracias a un error básicamente fortuito, no lo estaba haciendo en mi máquinita, y únicamente para los discos duros. Lo cual es todavía peor: si no creara ningún archivo en /dev, entonces hubiera sido obvio que algo pasaba con udev; pero como sí creaba todos excepto los de los discos duros, yo no tenía ni puta idea de qué pasaba.

Como udev no creaba los archivos de los discos duros, el siguiente diálogo entre mí y mi computadora ocurría:

Atom: Estoy booteando…
Yo: OK.
Atom: Estoy inciando Linux desde tu disco duro…
Yo: Bueno.
Atom: No puedo seguir iniciando, no hay disco duro.
Yo: ¿Qué?
Atom: No hay disco duro.
Yo: ¡Pero si estás inicializando del disco duro!
Atom: No hay disco duro.
Yo: ¡Ahí está el disco duro, puedo hacer ls y todo!
Atom: No hay disco duro.
Yo: ¡¿Cómo vas a correr el sitema operativo que me dice que no hay disco duro si no hay disco duro?!
Atom: No hay disco duro.

Dios, las máquinas son idiotas. Quitando la configuración del kernel (CONFIG_SYSFS_DEPRECATED_V2, que, por cierto, no tiene nada que ver con discos duros ni con udev) todo se resolvió, y atom está ya corriendo actualizada y todo.

Pero qué buena broma estar perdiendo medio día tratando de revivirla.

Captcha!

Desde hace más de cuatro año (de los cinco y pico que tiene este blog), utilizo Captcha! para detectar SPAM. Captcha!, en teoría, impide que un bot en la red pueda dejar comentarios (generalmente SPAM), y permite que sólo pasen los comentarios que aprueban la pregunta de Captcha!

Eso no tiene nada que ver con la moderación que hago de mis comentarios; ningún comentario en mi blog pasa sin que antes yo lo lea. Esto no es por el SPAM; es por la bola de idiotas que al parecer soy propenso a atraer a que comenten en lo que llanamente es mi espacio para decir lo que pienso.

Internet Commenter

Debería ser obvio que no pienso así de la mayor parte de mis lectores; todo lo contrario. A pesar de que mi blog existe para mí, por mí, y que además me vale madre quien pueda o no leerlo, la verdad es que de lo más divertido que ha resultado de tener una presencia virtual es leer los comentarios que todo tipo de lectores me han dejado, e incluso a veces entablar discusiones inteligentes y entretenidas con ellos.

Son la bola de animales que creen que el discutir conmigo me es tan fascinante como sin duda lo es para ellos los que tienden a desesperarme. En particular los que, como en la tira de arriba, juran y perjuran no volver, y a los pocos días me encuentro un comentario nuevo de ellos. Muchas veces todavía más idiota o patético que el anterior.

A los más recalcitrantes ya tiene rato que sencillamente borro sus comentarios, sin ni siquiera leer el contenido del mismo; me basta ver el autor. Por suerte, los puedo contar con los dedos de una mano.

En fin. Como sea, el motivo de esta entrada era comentar que al parecer mi sitio cayó en la mira de los que saben como quebrar Captcha!; el número de comentarios SPAM subió dos o tres órdenes de magnitud, y estar moderando SPAM es de verdad de lo menos gratificante que existe.

Así que después de resistirme durante años, por fin activé Akismet, y que se hagan bolas las máquinas para decidir qué es o qué no es SPAM.

Al parecer funciona muy bien, pero siempre existe el riesgo de que haya falsos positivos. Si un comentario suyo no aparece en el blog, por favor mándenme un correo para que lo rescate.

Ahora necesito un SVG de mi huella dactilar

Ahora que estoy en Europa, nunca falta que tengo que enviar un documento firmado a México. Dada que esta es la época de la información, se permite que se envíe dicho documento escaneado y por correo electrónico.

Como funciona generalmente es que uno escribe/recibe por correo electrónico lo que hay que firmar, lo imprime, lo firma, lo escanea, y lo envía de nuevo por correo electrónico. Lo cual, por supuesto, además de que está de hueva, mata algunos arbolitos.

Así que ahora que me estoy volviendo fan incondicional de Inkscape, descubrí que PDF y SVG son primos hermanos; la diferencia fundamental que tienen es que uno puede abrir un documento SVG en un editor de texto y modificarlo sin saber mucho del formato, y con PDF es más fácil interpretar las entrañas de una cabra. Viva.

Por lo tanto, es trivial convertir un SVG a PDF y de regreso, entonces lo que ahora hago es lo siguiente: recibo el documento, lo convierto a PDF (si es que no está en ese formato), eso lo convierto a SVG, y lo abro en Inkscape. Ahí le pego mi firma (que la tengo en SVG desde hace un montón), exporto el documento a PDF, y ya estuvo. Envío el documento con mi firma hechiza.

Claro que me ayuda el que mi firma sea relativamente fácil de dibujar con Inkscape; sin embargo, creo que cualquier firma podría convertirse a SVG sin muchísimos problemas. El programa incluso viene con un plugin que convierte un bitmap en su representación vectorial.

Le da todo un nuevo significado al concepto de “huella digital”.

GNOME

Un lector me preguntó que por qué no uso KDE o Qt. Iba a contestarle en un comentario, pero mejor lo digo aquí.

Los motivos son varios y en general completamente subjetivos.

Cuando GNOME inició, allá por 1998 ó 1999, fue encabezado por Miguel de Icaza, en ese entonces el tal vez mejor hacker en Linux que había producido México. KDE no terminaba de gustarme (seguí usando la línea de comandos para casi todo), y sentí que debía apoyar un proyecto iniciado por un mexicano.

GNOME tampoco me acababa de gustar (también seguía usando la línea de comandos para casi todo), pero al menos sentía que estaba del lado “correcto” no sólo por el hecho de que Miguel encabezaba el proyecto, sino también porque KDE usaba Qt, que en ese entonces no sólo no era Open Source, era de hecho propietario.

Para 2002 ó 2003 yo había pasado por un montón de cosas que habían hecho que me desatendiera de lo relacionado con GNOME, KDE, similares y conexos. Para cuando comencé a trabajar en una compañía donde me pusieron a instalarle Linux a varias máquinas, GNOME 2.0 había hecho su aparición.

A partir de ese momento GNOME de verdad comenzó a gustarme mucho más que KDE. KDE (que para entonces ya había solucionado, o estaba a punto de solucionar, los problemas de licencias con Qt) siempre me pareció una (mala) copia de Windows, y jamás me gustó que sus ventanas de configuración tuvieran opciones hasta para qué color debían tener las ventanas invisibles.

Las soluciones que GNOME ha utilizado históricamente han sido las que al final y acabo terminan en Free Desktop, y eventualmente en KDE por más que pataleen. Por ejemplo, cuando mezclador de sonidos aRts por fin admitieron que era basura, en lugar de pasarse a GStreamer (que me parece es por mucho la solución técnicamente correcta y más probada), decidieron ir con todavía otro proyecto que ellos iniciaron. Van a acabar de cualquier forma usando GStreamer, pero mientras continúan yéndose por su lado sin tratar de colaborar con soluciones que beneficien a todos los usuarios de escritorios libres. Como esa hay muchas otras.

Luego está la biblioteca para interfaces grácias; GTK+ tendrá todos los problemas que quieran, pero Qt está desarrollado por una empresa, y básicamente hacen lo que se les pega la gana (por más que hayan cambiado la licencia a GPL). GTK+ es desarrollado de forma abierta, y me sigue gustando mucho más que Qt. Además de que GTK+ está escrita en C, mientras Qt está escrita en C++… o algo que se le parece (Qt necesita un preprocesador llamado moc).

Por último, y tal vez la única razón práctica para de plano evitar KDE y Qt como la peste, es que yo utilizo Gentoo, y eso implica que compilo todos los programas que utilizo. En particular compilar KDE, Qt o casi cualquiera de sus dependencias es un infierno, porque al estar escritas en C++ (con un preprocesador espurio además) tardan los siglos de los siglos.

(En espíritu de ser derecho, debo aclarar que Inkscape está escrito en C++ con gtkmm, los bindings de C++ para GTK+… y a pesar de ser un programa razonablemente complejo, compila muchísimo más rápido que casi cualquier cosa escrita con Qt o para KDE).

En resumen: en general no uso KDE o Qt por razones puramente subjetivas, y algunas incluso ideológicas. Pero también vengo usando Linux hace casi quince años, y algo sé de computación; y me parece que la solución que ofrece GNOME es superior desde un punto de vista técnico, y social en el sentido de la comunidad que formamos los que usamos Linux/Open Source.

Pero si alguien quiere usar KDE, pues allá ellos. Yo me quedo con lo que considero mejor.

Textext

Desde hace años uso PStricks para dibujar figuras en documentos \LaTeX, por una muy simple razón: no importa qué tan bonitas haga las figuras casi cualquier programa, las etiquetas no utilizan el sistema de tipos de \LaTeX, y por lo tanto se ven horribles.

(La única excepción de la que tenía noticia, Ipe, es capaz de agregar etiquetas usando \LaTeX, pero tiene una desventaja para mí aún mayor: está escrito con Qt… casi por principio no tengo Qt ni KDE ni ninguna de sus bibliotecas instaladas en mis máquinas.)

Sin embargo el usar PStricks a mano, aunque muy varonil, es increíblemente tardado. No digo que no sea capaz de hacerlo; es sólo que cada vez tengo menos tiempo de estar viendo cómo hacerle para conectar, a mano, dos puntos con una curva.

Y es así como hizo su entrada en mi vida Inkscape. De hecho ya lo conocía, y lo he usado bastante; fue sólo que rápidamente me di cuenta de cómo podía utilizarse para hacer figuras (especialmente geométricas) muy padres. Por supuesto, siendo Inkscape un programa desapegado a \LaTeX, sufría de las mismas limitaciones que todos los demás programas de este estilo; no podía agregar etiquetas con \LaTeX. Pero Inkscape exporta a PStricks, así que era sólo cuestión de hacer eso, y agregar las etiquetas a pie. ¿Engorroso? Algo, pero mucho mejor que escribir código PStricks a pie.

Además Inkscape tiene la increíble ventaja de utilizar SVG como su formato nativo, y SVG es la neta del planeta en bicibleta; todos mis programas de cositos geométricos puedo hacer que fácilmente guarden las imágenes en SVG, exportarlo a PStricks con Inkscape, y agregarles etiquetas a mano…

Sólo que eso sigue siendo bastante engorroso. Así que fue con alegría que descubrí Textext; es una extensión de Inkscape que permite agregar lo que sea que \LaTeX pueda generar como un objeto vectorial en Inkscape, y (nada despreciable) permite reeditar el código \LaTeX después.

Inkscape con Textext

Inkscape con Textext

Con esto ahora sí creo que por fin dejaré PStricks, para pasarme completamente a SVG. Por fin las interfaces gráficas alcanzaron a PostScript, unos veinte años después.

Geekeando

El sábado mi novia me pidió una tele para que la llevara a su departamento y pudiéramos ver una película (ella no tiene tele). La petición era básicamente una broma (de hecho me pidió mi tele de 46″), pero yo como sea llevé mi monitor LCD de 22″, mi laptop y mi control remoto Streamzap, y siempre sí vimos una película.

La verdad no fue tan fácil; a pesar de que probé en mi casa que pudiera sacar el video de mi laptop a través de la salida para monitores CRT, las Leyes de Murphy entraron en acción y en casa de mi novia fue un desmadre hacer que funcionara. Al final lo conseguimos, pero sí fue después de varios intentos con sus correspondientes errores.

Lo que más me sacó de onda es que mi laptop ya no tiene archivo de configuración /etc/X11/xorg.conf; en teoría todo funciona automágicamente. Y de hecho en mi casa todo funcionó automágicamente, lo cual hizo todavía más bizarro que en casa de mi chava tuviera que estarle meneando al programa de configuración del display en GNOME.

Como sea, hoy estuve trabajando en mi casa, y como estoy actualizando mi maquinón Core 2 Quad, decidí conectar un ratón y teclado USB a mi laptop, y volverle a conectar mi monitor LCD de 22″, para no tener que chambear en la pantallita de la portátil. Por supuesto, como debía de ser, ahora de nuevo todo funcionó automágicamente, y no tuve ninguna de las broncas que tuve en casa de mi novia.

Mi punto con todo esto es que yo nunca había hecho algo así; conectar un teclado, ratón y monitor a mi laptop y usarla como de escritorio. Y no lo había hecho porque justamente en Linux era un desmadre el tratar de hacer algo así, y uno tenía que estarle meneando al xorg.conf para que las cosas funcionaran… si acaso llegaban a funcionar.

Ahora sencillamente funciona, sin que yo deba hacer nada. O al menos en mi depa.

Realmente Linux ha avanzado mucho desde hace 13 años que comencé a usarlo.

Windows 7

¿Recuerdan lo orgulloso que estaba de mi gabinete de madera que yo solito por mí mismo hice?

Bueno; resulta que, como no soy ingeniero (y, además, al parecer soy muy idiota), no tomé en cuenta un pequeño detalle que resulta de poner una computadora (además, una relativamente poderosa) en un gabinete de madera: la madera es un pésimo conductor de calor.

Mi media center resultó ser muy inestable, y en gran medida lo atribuyo al gabinete de madera; al momento en que le quité la cubierta superior, se volvió mucho más estable. Después de ponderar el asunto un rato, decidí que convenía conseguir un gabinete nuevo. Siguen sin gustarme mucho los gabinetes que hay disponibles para un potencial media center, pero al fin encontré uno que, con unas cuantas modificaciones, podría servirme. La única bronca es que necesitaba una nueva placa madre, porque el gabinete es mini-ITX (no micro-ATX, como el que mi media center tenía).

Esta entrada no es del media center, por cierto; eso será después, aunque ya quedó y permitánme decirles que está poca madre.

Como necesitaba una nueva placa madre, decidí mover la placa madre del media center a mi PC de escritorio, y actualizar de mi amado AMD 64 X2 a un Core 2 Quad; mi AMD 64 X2 me sirvió casi cinco años, pero ya está mostrando la edad, y decidí que dado que iba a comprar placa madre nueva, pues entonces de paso actualizaba mi máquina de escritorio.

Eso hice, sin muchos problemas; mi Windows XP sólo lo utilizo para jugar de vez en cuando, pero lo mantengo actualizado, y cambiarle la placa madre sólo implicó que encontró un montón de hardware nuevo y que tuve que activarlo de nuevo. Sin embargo al parecer la estadía prolongada en un gabinete de madera algo le hizo a la placa madre, porque me daba fallos cuando traté de recompilar todo mi sistema Gentoo (necesario, porque estaba compilado con optimizaciones para AMD y el nuevo procesador es Intel); así que conseguí una placa madre prestada y eso resolvió los problemas.

Esta entrada tampoco es acerca de cómo quedó mi nueva PC, aunque también ya quedó y déjenme decirles que también quedó poca madre.

Está entrada es acerca de que al parecer Windows XP soporta un cambio radical de hardware, pero no dos. Al menos no en la misma semana: mi Windows XP primero arrancó sin broncas, luego se me apagó, después reinició en modo a prueba de fallos y (oh, la ironía del caso) procedió a fallar miserablemente. Ya nunca más arrancó.

En general hubiera levantado los hombros y continuado con mi vida; de verdad mi uso de Windows es casi inexistente en últimos tiempos. Pero son vacaciones, y además yo creí haber muerto de fiebre en los médanos de Singapur: al menos esperaba idiotizarme jugando algunos de los juegos (ya viejos) que tengo para Windows.

Así que, aprovechando que los estudiantes de la UNAM tenemos acceso gratuito a montones de software de Microsoft, incluyendo Windows 7, decidí ver cómo estaba el nuevo sistema operativo de Redmond. Yo me salté completamente la debacle que resultó ser Windows Vista, y XP me funcionaba razonablemente bien, así que antes no lo había considerado; pero dado que tenía que reinstalar Windows si quería jugar, y que la perspectiva de instalar los Service Pack 1, 2 y 3 de XP me daba mucha hueva (mi CD de Windows XP es el original, así que tengo que actualizar todo), me aventé el volado.

De eso es esta entrada: de Windows 7.

Bajé la versión en inglés (creo que aún no está en español) y de 64 bits, porque es lo que todo mundo usará en un futuro no muy lejano. Mi madre estrenó máquina hace unos meses, y vino con Vista incluido, así que creo que puedo hacer algunas comparaciones más o menos sensatas.

Windows 7 no me pone de mal humor; Vista sí lo hace. Básicamente ese es mi juicio acerca del sistema operativo.

La nueva versión de Windows detectó todo mi hardware moderno; en el limbo quedaron mi SoundBlaster Live! 5.1, que tengo desde hace casi una década (si no es que más), mi webcam Creative NX, y mi control remoto Streamzap. De la SoundBlaster encontré un controlador en la red, y aunque sí se instaló y detecta mi tarjeta, nigún sonido sale de ella. Me resigné a usar la tarjeta de sonido integrada de la placa madre; pero es una muestra más del tipo de ventajas que da el usar Linux: ahí mi tarjeta de sonido funcionará hasta que el infierno se congele, supongo. El Streamzap la página del fabricante dice que controladores para 64 bits estarán disponibles “real soon”, así que hay esperanza. La camarita USB yo creo que esa sí ya valió popote, porque es bastante chafa y dudo que a nadie le importe demasiado como para ponerse a escribir el soporte para 64 bits en Windows. De nuevo, en Linux jala sin ningún problema. En 64 bits, si era necesario que lo especificara.

Windows 7 me recuerda un poco a KDE; y como KDE puedo usarlo si no hay de otra, pero definitivamente no es mi primera opción. El explorador de archivos parece algo más idiota que el de XP (y es particularmente desesperante que cuando uno expande el árbol de directorios, el mismo salta de forma inexplicable), pero funciona. No sé realmente qué más pueda decir; Windows me resultá bastante inútil “out-of-the-box”. Tengo que instalar un montón de madres para que pueda ser medianamente utilizable.

Como sea, de lo poco que pude usar XP en este procesador, y ahora Windows 7, creo que sí hay una diferencia de velocidad, y en general lo atribuyo a que Windows 7 está a 64 bits. El “eye candy” del sistema está simpático, pero de verdad ahora siento que Windows está jugando a alcanzar a Mac OS X y a los escritorios con manejadores compuestos de Linux.

Pero lo más importante es que no me pone de mal humor, como de verdad lo hace Vista las pocas veces que he tenido que lidiar con él para configurarle algo a mi madre. En ese sentido es un avance.

Como sea, no tomen muy en cuenta mi opinión; uso Windows para poder jugar juegos (y a veces ni eso; Warcraft III corre poca madre en Wine). Pero creo que sí es mejor que Windows Vista. Y, hey, me salió gratis por estudiar en la UNAM.

Dadas hasta las puñaladas.

Twitter

Como varios de mis lectores habituales sin duda sabrán, yo no estoy suscrito a Facebook, MySpace, Hi5, Orkut, ni ninguna otra de esas pendejadas. Ya a estas alturas del partido ni siquiera me llegan las invitaciones; mis filtros de SPAM ya están entrenados para clasificar dichas invitaciones como basura.

Las razones por las que me niego a entrar a este tipo de sitios son básicamente cuestiones de principios, y que la idea en general me da mucha hueva. Y está el tal vez no muy importante, pero para mí significativo, hecho de que no me gusta tener cosas mías (mis escritos, mis fotos) en un servidor donde no soy root. El correo electrónico es una excepción; aunque ciertamente no porque yo así lo haya decidido.

Mis fotos las tengo en línea para que la gente cercana a mí pueda verlas fácilmente; pero la misma funcionalidad podría tener si usara Flickr o cualquiera de los otros servicios de hospedaje de imágenes que hay en la red. Mi vida social no la quiero en línea; puedo comentar en mi blog de vez en cuando qué hice, pero ciertamente no quiero poner qué voy a hacer, y mucho menos qué estoy haciendo… y todavía menos espero que mis amigos o conocidos tengan que conectarse a la red para enterarse.

(Hablo, obviamente, del aspecto social del asunto; sí comento en mi blog que estoy haciendo mis exámenes generales del doctorado, pero espero que quede claro que no expero –ni quiero– que nadie me venga a hacer compañía mientras los hago).

Como sea, el propósito que tiene mi blog es para que yo arroje aquí las cosas que escribo. Tengo mis razones para no tenerlo en WordPress.com o en Blogger, pero la verdad es que son razones (desde el punto de vista práctico) bastante débiles; el propósito de mi blog se cumpliría exactamente igual si lo tuviera en esos sitios.

Las razones que tengo en contra de Twitter (y por lo que escribo esta entrada), son todavía más personales y (me parece) sólidas. Twitter tiene todo el aspecto “social” en Internet que me da una hueva enorme (como Facebook o MySpace), el hecho de que la información que uno envía ahí termina siendo básicamente propiedad de los dueños de Twitter, y las características que por principio me hacen despreciar sitios de ese estilo.

Pero la verdadera razón por la que no he tenido nada que ver con Twitter (ni ninguno de los sitios que le son similares), es el hecho de que, como escritor, la idea detrás del sitio me parece casi insultante.

Yo escribo en mi blog por el placer de escribir; siendo completamente honesto ni siquiera me importa (ni me ha importado, ni creo que me llegue nunca a importar) si alguien me lee o no, o si les gusta o no lo que escribo. Escribo por mí, y en gran medida para mí únicamente. La idea de verme restringido a 140 caracteres por entrada no sólo me parece castrante; creo que es el tipo de cosas que fomenta que muchos chavos de ahora escriban cosas como “kiero ir ai a ver ke pasa pq no se ke p2”.

Lo cual incluso se traduce a mis mensajes SMS; creo que soy el único güey que cuando escribe un mensaje de texto por el celular pone acentos, símbolos de interrogación y admiración iniciales, y puntos seguidos y comas.

Twitter no sólo tiene las mismas características que desprecio y me dan hueva de los “sitios sociales” como Hi5 o Facebook; encima de ello es verdaderamente lamentable el tipo de engendros que muchos de sus usuarios producen. Incluso con mi limitado conocimiento de la lengua inglesa me es fácil descubrir los garrafales errores que cometen en el limitado espacio que son 140 caracteres.

Y, para acabarla de chingar, los cometen cada quince minutos.

GNOME Shell

Con la última actualización a GNOME 2.26 (que sí, ya sé que voy retrasado 6 meses porque ya salió GNOME 2.28, pero he decidido quedarme en Gentoo estable), mi laptop alcanzó un estado de casi perfección que me es difícil describir cabalmente. Absolutamente todo funciona como debe de ser, incluyendo pendejaditas que por alguna razón nunca lo habían hecho, como poder subir o bajar el brillo del monitor con el teclado.

Tengo exactamente dos problemas, que como son cosas que casi nunca uso ni siquiera sé si se ganen el calificativo de “problemas” realmente. Uno es que el lector de huellas digitales no funciona, y no se ve para pronto que lo vaya a hacer porque las Vaio utilizan un controlador propietario del cual casi nadie tiene información. El otro es que el micrófono integrado dentro de la laptop no funciona; si conecto un micrófono externo no hay problema, pero el integrado no quiere jalar. Probablemente tenga que ver conque HDA Audio es ahorita un ligero desmadre en Linux, y aunado con el cambio a PulseAudio las cosas se complican aún más.

Pero quitando eso estoy asombrado de la asombrosa asombrosidad de mi laptop en este momento. Mi desktop también quedó muy bien con la actualización; pero dado que mis desktop nunca me había dado problemas (por eso armo mis máquinas yo), y además ya va a cumplir cuatro años y sencillamente ya no tiene la galleta que yo requiero (lo cual me fuerza a ir pensando en actualizarla dentro de poco), pues es más bien irrelevante.

Buscando entonces cosas que no jalen a la perfección para poder estar jugando con ellas, y así evadir la responsabilidad de mi tercer examen general del doctorado, me puse a compila e instalar GNOME Shell.

Si todo sale como debe salir (que, dada la Ley de Murphy, probablemente no ocurra), GNOME 3.0 saldrá en alrededor de 6 meses, en lugar de GNOME 2.30, y GNOME Shell reemplazará a panel y al manejador de ventanas de GNOME (Metacity), que ciertamente ya muestran gacho la edad. GNOME Shell es un cambio radical en la idea de manejar las ventanas y los escritorios virtuales, tratando de hacer todo más dinámico y orientando todo a cosas que el usuario quiera hacer y dónde tiene sus documentos.

GNOME Shell

GNOME Shell

Lo he estado usando un par de días ya, y trataré de seguir usándolo. GNOME Shell reemplaza (y de hecho, medio mata) a Compiz, el manejador de ventanas con efectos 3D que vengo usando casi desde que salió hace 3 años. En general está bien, porque GNOME Shell tiene efectos 3D también, aunque mucho más sobrios. Pero además, con la idea de escritorios virtuales dinámicos el tener varias ventanas en un solo escritorio se convierte en una pendejada; GNOME Shell permite (y estaría incluso dispuesto a afirmar que promueve) el uso de aplicaciones maximizadas todo el tiempo. Ahora tengo una ventana por escritorio virtual, todas ellas maximizadas, lo cual hace que se utilice de forma mucho más inteligente la pantalla relativamente pequeña que tiene mi latop.

Si necesito usar el escritorio, en lugar de minimizar ahora sencillamente creo otro escritorio virtual, hago lo que tengo que hacer, y después lo destruyo. Las aplicaciones es sencillísimo moverlas entre escritorios, y en general casi puedo estar sin utilizar la terminal, que sigue siendo un objetivo mío desde hace años.

No sé cómo vayan a reaccionar los usuarios de GNOME ante un cambio tan radical como el que propone GNOME Shell. A mí me está gustando, pero suelo ser muy paciente con el desarrollo de GNOME. Independientemente de si les gusta o no el cambio que propone, todos los que lleguen a utilizar GNOME Shell deben reconocer que está realmente innovando a la hora de proponer cómo manejar el escritorio. Podemos meternos (y seguro nos meteremos) en discusiones larguísimas acerca si es o no una innovación inteligente; pero de que es original y novedosa eso no tiene la menor duda.

PulseAudio

Hace ya cerca de dos años que vengo leyendo las múltiples mentadas de madre que recibe Lennart Poettering por el chiste de que se le ocurrió inventar PulseAudio (antes Polypaudio). Las opiniones parecen estar divididas en dos campos diametralmente opuestos: las distribuciones y gente con conocimientos técnicos suficientes que parecen tener un claro consenso de que PulseAudio es el camino que hay que seguir, especialmente si se desea que Linux tenga un sistema de audio moderno, profesional y fácil de usar; y los (al parecer) innumerables usuarios que le mientan la madre porque sus sistemas dejan de funcionar cuando antes lo hacían perfectamente.

La dicotomía al parecer radica en que PulseAudio es un rediseño radical de cómo se venía manejando el sonido en Linux, y además utiliza características de ALSA (el controlador de sonido de bajo nivel en Linux) que nadie había utilizado antes, lo que ha causado que encuentren bugs ahí que hasta ahora habían pasado desapercibidos. Lo que he leído acerca de PulseAudio suena maravilloso en papel; combinar dos tarjetas de sonido estéreo para simular sorround, direccionar el audio a cualquier otra computadora en la red, controlar el volumen de distintas aplicaciones individualmente, mover una aplicación de un dispositivo de audio a otro en vivo, sin que la aplicación ni siquiera lo note, etc., etc., etc. Pero también he leído los múltiples e indignados reclamos de aquellos usuarios que actualizaron sus máquinas sólo para descubrir que sus aplicaciones de audio que antes funcionaban ahora no lo hacen.

Gentoo tenía a PulseAudio en inestable desde hace años, y yo (por una vez en mi vida) decidí no tocarlo ni con un palo de tres metros; mis aplicaciones de sonido funcionaban, así que no quise meterme en broncas. Y aunque sentía empatía por los usuarios que han venido sufriendo durante todo este proceso de transición a PulseAudio, la verdad es que ya he estado ahí, y en general las molestias que puede causar la introducción de un nuevo componente en Linux suelen verse compensadas cuando dicho componente ha llegado a un nivel suficiente de madurez. Pasamos por eso con ALSA, de hecho, cuando abandonamos OSS, y con la transición de XFree86 a X.Org, y con el salto de GNOME 1 a GNOME 2, y con el cambio de Nautilus a modo espacial, etc., etc., etc.

Así que, como sabía que a la larga iba a ser benéfico, y además a mí no me afectaba (porque no traté de usar las versiones de prueba de PulseAudio en Gentoo), ignoré todo el maracatraca al respecto.

Hasta que en mi última actualización, que por fin se hizo GNOME 2.26 estable en Gentoo, PulseAudio vino incluido.

Para empezar, no tuve ningún problema. De hecho un montón de broncas se me compusieron; en mi laptop por fin recuperé los beeps, que no sé cómo había perdido (y además ahora están bien coquetos), y los sonidos de GNOME (los ruiditos que hace al abrir menúes y cerrar ventanas) por fin funcionan y (ventaja nada despreciable) no son insoportables.

Pero además, como me interesaba eso del sonido a través de la red, decidí ver si podía echarlo a andar rápidamente. No sólo pude echarlo a andar rápidamente; está poca madre. Mi Media Center tiene un sistema de sonido 5.1, y aunque Moovida (el software que utiliza el Media Center, antes llamado Elisa) está muy chido para ver videos, la verdad es que todavía apesta para oír música. Para oír música uso Rhythmbox hace años, y me gusta bastante; pero es inútil sin teclado y ratón (que mi Media Center, obviamente, no tiene).

Así que sencillamente le dije a mi máquina de escritorio que utilizara el demonio de PulseAudio de mi Media Center para mandar ahí el sonido, y ahora escucho mi música en el sistema 5.1 de mi Media Center en la sala, pero controlando todo con Rhythmbox desde mi estudio. Y todo con básicamente un click:

Sonido remoto

Sonido remoto

(Eso no es completamente cierto; tuve que editar un archivo de configuración de PulseAudio en mi Media Center, y copiar un archivito de ahí a mi escritorio; pero eso fue todo).

No dudo que el periodo de transición haya sido doloroso; y lo lamento por los usuarios que hayan pasado por problemas. Pero eso fue culpa de las distribuciones que pusieron PulseAudio para todo mundo cuando no estaba listo; Gentoo por una vez en la vida se la jugó a lo seguro, y creo que valió la pena. Estoy bastante impresionado de lo bien que funciona PulseAudio, y toda la filosofía que trae detrás.

En este momento, todas las cosas importantes multimedia en Linux soportan PulseAudio; MPlayer, VLC, GStreamer, etc. Es ciertamente el futuro; todas las distribuciones lo están usando, y la verdad creo que vale la pena. Ni siquiera sé si MacOS X o Windows puedan hacer algunas de las cosas que PulseAudio puede.

Ahora, si sólo dejara de perder tiempo con mi computadora y terminara mi segundo examen general del doctorado…

Mira mamá, sin el teclado

Supongo que las cosas han evolucionado mucho en Linux/GNOME.

Una semana peleándome con iwconfig, ndiswrapper, el kernel, los scripts de inicialización de la red, y cuanta madre se me ocurrió para hacer que jalara (después de que inexplicablemente dejara de funcionar) la tarjeta de red inalámbrica de mi máquina de escritorio, y cuando a los seis días me di por vencido y en un arranque de locura instalé NetworkManager (para ver si los logs que arroja me daban una idea de qué ocurría), resultó que nada más corrí el pequeño programita de GNOME, y todo funcionó automágicamente.

Pain-Free Networking indeed.

Además, si fuera algo que en general no sé hacer (como configurar una impresora; ¿quién anda matando arbolitos estos días?) tal vez lo entendería; pero vengo configurando las redes de mis computadoras a mano desde hace años. Y es la primera vez en este tipo de cosas que un programita que utiliza el teclado y el ratón pudieron hacer algo que yo no pude modificando archivos de configuración.

Si siguen así las cosas, uno de estos días dejaré de compilar mi propio kernel.

Selectric 251

Acabo de ver el inicio de la segunda temporada de Fringe. Por cierto, esta entrada no es acerca de Fringe. En el episodio (que empieza muy chido, dicho sea de paso), uno de los malos se mete a una tienda de máquinas de escribir, y pide una Selectric 251. Eso me recordó las máquinas de escribir que hubo en mi casa durante mi niñez, y que precedieron a las computadoras que después tomarían para siempre su lugar.

Mis padres básicamente se dedican a escribir. Mi mamá da clases y conferencias, y mi padre va a pláticas y presenta libros; pero en esencia la parte gruesa de su producción intelectual se traduce en miles y miles de cuartillas que han generado y que siguen generando día a día.

Esto significó que en nuestra casa siempre hubo máquinas de escribir, hasta justo antes de que llegaran las computadoras a nuestras vidas.

Tuvimos varias máquinas de escribir mecánicas; desde esas antediluvianas que cuando uno escribía en ellas sonaba como si alguien estuviera disparando una ametralladora, hasta la última que si no me equivoco debe estar arrumbada en algún rincón de la casa de mi mamá.

Para mi hermano y para mí, niños como éramos entonces, las máquinas de escribir no daban mucha diversión que digamos; lo más divertido era apretar todas las teclas y ver como las barras se atrabantaban en el centro de la máquina. También era muy divertido desenrollar la cinta y manchar las camisas blancas de nuestros uniformes escolares con ella. Estoy seguro de que a mi madre le parecía genial eso.

Para su tesis de maestría, mi madre por fin se hartó de las máquinas de escribir mecánicas que mi padre al parecer adoraba, y se compró una máquina de escribir eléctrica. Esto debió ser alrededor de 1990, probablemente un poco antes; ya había computadoras, pero sin duda mi madre no podía costearse una, y ni siquiera se pudo comprar una máquina de escribir eléctrica decente.

Mientras que las máquinas de escribir eléctricas chidas de esa época podían justificar párrafos, hacer pies de página, y no sé qué tantas cosas más, la pobre máquina de mi jefa sólo hacía el salto de carro automáticamente. Esa era la única gracia que yo recuerdo que tuviera… ah, y que podía uno borrar automáticamente, con la cinta borradora (la máquina guardaba un determinado número de caracteres para saber cuál tenía que presionar sobre la cinta borradora).

Esa máquina eléctrica a mí me parecía un juguete mucho más divertido que las mecánicas, pero le perdí el gusto rápidamente. Era de margarita, eso sí recuerdo; no vería una máquina de escribir eléctrica de esfera hasta que llegara a la UNAM. Yo creo que mi madre también le perdió el gusto, especialmente porque su tesis de maestría tenía como siete citas en pies de página por página, y para hacerlos básicamente utilizó la técnica de cortar y pegar. Old school. Como en usando tijeras y pritt.

La computadora relegó a cachivaches a las máquinas de escribir en mi casa para siempre, excepto cuando alguien tenía que llenar una forma impresa, que cada vez era más raro.

El programa para escribir documentos (que era la razón para tener una computadora en primer lugar) que usamos primero fue WordPerfect. Primero la versión 4.2, y luego la versión 5.1. Y de hecho durante muchos años mis padres usaron sus computadoras como máquinas de escribir glorificadas. Y dado que suelen poner hartos pies de página, ciertamente les hizo la vida mucho más sencilla.

Yo no; usar procesadores de palabras nunca fue lo mío. WordPerfect me daba más bien hueva, y cuando por fin mis padres se pasaron a Word tampoco me impresionó mucho. Yo comencé a programar, y entonces el utilizar un procesador de texto no era algo que se me diera mucho. Aunque escribí una serie de cuentos en el CCH; particularmente malos, por cierto.

Cuando entré a la Facultad y descubrí TeX, eso sí me apantalló. Y más me apantalló el descubrir que durante muchos años la gente escribía tesis y artículos matemáticos utilizando máquinas de escribir eléctricas de margarita o de esfera, y que para escribir los símbolos matemáticos y griegos sencillamente cambiaban dicha margarita o esfera. Por no decir de la paciencia necesaria para hacerlo.

Me pregunto cómo hubiera sido si hubiera tenido padres que se dedicaran a las ciencias duras y entonces que yo hubiera sabido eso desde niño. A lo mejor hubiera visto a las máquinas de escribir eléctricas como algo más que juguetes.

Claro que, dado como soy, probablemente entonces me hubiera dedicado a la historia o a la filosofía. Y entonces lo que me hubiera fascinado serían las máquinas de escribir mecánicas.

Nokia N900

Después de (literalmente) años de especulación, Nokia anunció hace un par de días su nueva generación de “internet tablets”: el Nokia N900.

Nokia N900

Nokia N900

Además de tener un procesador mucho más poderoso que el del N800 (que yo me compré hace un par de años y medio), AGPS, un dispositivo de video con soporte para OpenGL, cámara de 5 megapixeles con flash, teclado integrado y un montón de cosas más, la chingadera es teléfono.

Y corre Linux.

Cuando vi el iPhone sí se me antojó comprarlo, pero además de que el precio de verdad me parecía excesivo, estaba la cosa de que hay que comprarlo con plan o desbloquearlo, de que es Apple (compañía de la cuál jamás he sido fan), y de que parece ser extremadamente complicado el tratar de desarrollar aplicaciones para él.

El N900 resuelve un montón de esos problemas; además es más pequeño que el N800 (lo que para un teléfono se agradece bastante), y no sólo corre Linux, sino que corre Maemo, construido sobre Gtk+ y GNOME. Por supuesto, su precio va a ser ridículo (al parecer estará en alrededor de 700 dlls), pero es parecido al del iPhone, y la verdad no me parece mala compra.

Yo creo que éste será mi próximo teléfono.

En línea

Cuando regresé de Europa, me encontré conque no tenía teléfono ni Internet, y varias cuentas amontonadas que tuve que ir a pagar de inmediato para no quedarme también sin luz, agua, gas y demás.

En parte por eso, y porque ya me estaba hartando ir al banco, decidí arreglar de una vez por todas mis broncas con Banamex para que pudiera hacer uso de BancaNet. Eso fue un desmadre que me llevó semanas arreglar, hasta cierto punto porque soy terrible con cualquier tipo de trámite, pero en gran medida porque en Banamex son muy idiotas y nadie sabe nada de casi absolutamente nada, y cuando creen que saben algo generalmente se equivocan.

Como sea, eventualmente se resolvió y ahora estoy pagando casi todas mis cuentas en línea, lo cual es por supuesto mucho más cómodo que ir al banco. Pero, cuando me llegó mi último recibo de Telmex hace casi un mes, no había resulto mi bronca con Banamex, y decidí pagar el recibo usando mi tarjeta de Bancomer.

El trámite fue sospechosamente sencillo, y seguí adelante con mi vida. Hasta hace unas semanas, que decidí dar de alta el servicio en línea MiTelmex de (oh, sorpresa) Telmex, y vi que mi recibo en línea seguía diciendo que pagara antes del 19 de junio. Supuse que Telmex estaría jineteando mi dinero hasta la fecha de corte, y seguí con mi vida. Por los trámites para ir a California no volví a revisar MiTelmex hasta este fin de semana, cuando vi con sorpresa que seguía diciendo que por favor pagara antes del 19 de junio. No ofrecía ninguna sugerencia de dónde conseguir una máquina del tiempo.

Así que llamé a Telmex para preguntar qué ocurría. La simpática muchachita que me atendió me tuvo en espera cerca de veinte minutos, para regresar toda apurada a la línea a decirme que después de consultar el sistema, a su jefe, y a su gerente, podía confirmarme que sí, que no había hecho mi pago. Que era justo por lo que llamaba, pero bueno; le dije que tenía el comprobante del pago, y ella me pidió la fecha del mismo. Cuando le dije que era del 4 de junio, me dijo que el último pago registrado que ella veía era de abril.

Ahí debí darme cuenta de que algo andaba raro, porque seguro pagué un recibo en mayo. Como sea, dado que había agotado sus poderes, la niña me mandó a facturación, donde otra simpática niña tardó como quince segundos en decirme que ahí ya estaba registrado mi pago. Desde el 4 de junio.

Estúpidamente le pregunté que por qué MiTelmex decía que no había pagado, y ella dulcemente me dijo que no tenía ni puta idea. Bueno, me dijo que no sabía, pero por el tono estoy seguro que decía que no tenía ni puta idea.

Lo cual me hizo darme cuenta de que en Telmex son muy idiotas y nadie sabe nada de casi absolutamente nada, y cuando creen que saben algo generalmente se equivocan.

Retro

Dado que no voy a tener vacaciones (por estar en California trabajando con Bernardo y Silvia), decidí tomarme esta semana de ídem. Siendo como soy, eso involucró ir al cine, leer un par de novelas, y concentrarme en un proyecto de cómputo que no tuviera nada que ver con mi doctorado.

El proyecto sonaba sencillo; hacer que mi Media Center (que es una computadora razonablemente poderosa) sirviera también para jugar juegos de Nintendo, Super Nintendo y Sega Genesis. En principio es trivial; los emuladores para esos sistemas existen desde hace años y permiten jugar casi todos los juegos que se hayan escrito para esas consolas… e incluso varios que de hecho no se escribieron para esas consolas.

Super Mario Bros.

En la práctica no fue tan simple. Tenía varios requerimientos en mente, pero el más importante de ellos era sin duda que pudiera controlar el correr los emuladores y el salir de ellos utilizando únicamente mi gamepad USB que compré como por cien pesos hace años y que la verdad casi nunca uso (aunque parece que funciona en mi PlayStation 3). Mi Media Center está en la sala de mi casa, y lo controlo únicamente con un control remoto; no quería tener que usar un teclado para nada. Eso implicaba varios problemas; primero, dado que el programa que emula a cada consola es distinto, significaba que tendría que escribir un programa que lanzara a cada emulador dependiendo del juego que quisiera jugar. Segundo, dicho programa tendría que ser controlable a través del gamepad.

Ghosts'n Goblins

Y de hecho ahí cometí una estupidez monumental; mi primera versión la escribí con soporte para control remoto, no para gamepad. Y de hecho funcionaba bastante bien; sólo que sí es estupidísimo que, si voy a tener que usar el gamepad para jugar los juegos, que tenga que utilizar el control remoto para inciarlos. Por suerte mi diseño estaba bastante bien, si se me permite decirlo, y fue sólo cambiar la lógica del control remoto por la del gamepad. Y aprender a usar una pequeña biblioteca para manejar joysticks en general; resulta que nunca había hecho eso en mi vida. Lo cual es raro; siempre he tenido ganas de programar algún tipo de juego, pero nunca lo he hecho.

Contra

Como sea; el lanzador de juegos quedó relativamente rápido. Está escrito en Python y utiliza PyGame, que por debajo (en Linux) utiliza SDL. SDL tiene años; yo recuerdo básicamente cuando comenzó. A finales de los noventas e inicios de este siglo, una compañía llamada Loki Software se le ocurrió la genial idea de escribir y/o portar juegos de Windows a Linux. Su programador principal, un chavo con experiencia trabajando con juegos en distintos sistemas operativos, se le ocurrió hacer una biblioteca pequeña que encapsulara las operaciones más utilizadas en juegos de computadoras, y que (siempre que fuera posible) sólo llamara a la biblioteca nativa en el sistema operativo donde estuviera corriendo el programa; en Windows eso significaba DirectX. En Linux creo que de hecho sí terminaron escribiendo un montón de código.

Lemmings

Loki terminó tronando como ejote, por supuesto; pero SDL (siendo Open Source) no sólo sobrevivió a ello, sino que se convirtió en el estándar de facto en Linux (y Unix en general) para escribir juegos. SDL funciona con “módulos”, que en terminología moderna llamaríamos más bien “plugins”; tiene un módulo para sonido, otro para video, otro para joysticks (gamepads incluidos), y encima de todo tiene uno para OpenGL. Entonces en general en Linux uno tiene en SDL una biblioteca con todo lo necesario para escribir un juego, ya sea en 2D o 3D. PyGame se cuelga de SDL, y tengo entendido que varias otras bibliotecas también; además de que SDL tiene bindings en varios lenguajes (está escrito en C). Son pocos los juegos en Linux que no utilizan SDL, directa o indirectamente; y de hecho ahorita no se me viene ninguno a la cabeza.

Super Mario All-Stars

Y de hecho los tres emuladores que utilizo corren sobre SDL; FCEUX, Zsnes y Gens. Que esa fue la otra bronca que tuve; hacer que los pinches emuladores compilaran y corrieran en mi Media Center, y que además pudiera salirme de ellos utilizando el gamepad. La bronca comienza por el hecho de que estos emuladores en general comenzaron a escribirse a finales de los noventas; aunque las computadoras en ese entonces tenían ya la capacidad de emular el hardware de las consolas de 8 y 16 bits, la verdad es que la tenían por un pelo de rana calva.

Super Street Fighter II: The New Challengers

Como el hardware a duras penas podía con la emulación, los programadores de entonces llegaron a la conclusión de que tenían que hacer el código lo más rápido posible, y hace diez años eso básicamente se traducía a “vamos a escribirlo en ensamblador”. Entonces un montón de código en los emuladores se escribió en ensamblador; y como (en ese entonces) código en ensamblador cuidadosamente escrito le ganaba pero por mucho al código de máquina generado por un compilador (especialmente GCC), dicho código en ensamblador se fue preservando en distintos proyectos y nuevas generaciones de los emuladores. No me queda claro que la rapidez que ofrece justifique el increíble dolor de cabeza que implica estar lidiando con ensamblador; pero además dudo que dicho código le gane por mucho al código máquina generado por GCC (ha avanzado mucho el compilador en estos diez años), y encima creo que las máquinas modernas son lo suficientemente poderosas como para poder descartar la necesidad de utilizar ensamblador escrito a mano.

Flashback

Como sea, los tres emuladores que uso siguen teniendo generosas porciones escritas en ensamblador, lo cual no sería ningún problema si a) mi Media Center no fuera x86-64, y b) si no necesitara compilar los emuladores desde código fuente. Como utilizo x86-64, los emuladores no son trivialmente compilables; de hecho todo lo contrario, es un desmadre compilarlos en x86-64. Se puede, pero da dolores de cabeza. Y x86-64 puede ejecutar código de x86-32 sin ningún problema (por eso es que es difícil compilarlos; porque hay que hacer crosscompiling: compilar en x86-64 a código nativo de x86-32… por suerte Gentoo ayuda con eso), pero yo necesitaba el poder compilarlos porque además de todo, excepto por Zsnes, ningún maldito emulador era completamente controlable desde el gamepad.

Golden Axe

Entonces me tuve que meter al código de Gens y de FCEUX (después de romperme la cabeza viendo cómo hacer el crosscompiling), y modificar los programas para que me permitieran salirme del emulador utilizando un botón del gamepad. Ya entrados en negocios, y como mi gamepad tiene doce botones (seis más que el de SNES o el del Genesis), también asigné un botón para guardar el estado de la consola, y otro para cargar dicho estado. En otras palabras, para poder hacer trampa salvando justo antes de alguna parte difícil del juego, y cargándola de nuevo si me matan. Que es lo común, por cierto.

No por presumir, pero quedó poca madre. Cuando cierro el programa de mi Media Center (con un botón del control remoto), el script que lo ejecuta determina si está o no conectado mi gamepad. Si no está conectado la máquina se apaga; si sí está conectado, ejecuta mi programa para elegir algún juego. El programa es bien sencillo; presenta en pantalla una imagen (la carátula original del juego), y con el gamepad puedo ir navegando las carátulas hasta que llegue al juego que quiero jugar.

Al presionar un botón, el programa escupe a la salida estándar el nombre del ROM, y el script que lo lanzó ve qué tipo de ROM es; dependiendo del tipo lanza el emulador correspondiente, y entonces ya puedo jugar (y hacer trampa guardando y cargando estados de memoria del emulador), y cuando me aburro presiono otro botón y el emulador acaba. El script recupera el control, y vuelve a ejecutar el programa que elige juegos.

El programita detecta un botón en especial, que si lo presiono quiere decir que ya no quiero seguir jugando, y entonces termina sin escupir nada a la salida estándar. El script detecta que el programa no escupió nada, y entonces termina el ciclo y la máquina se apaga.

Lo maravilloso del asunto es que es trivial agregar juegos (sólo es aventar el ROM y la imagen de la carátula a dos directorios especiales), y casi igual de trivial agregar emuladores (sólo tengo que asegurarme de que pueda modificarlos para que sean completamente controlables a través del gamepad).

Sé que es medio ridículo que, teniendo un PlayStation 3 (probablemente la consola más poderosa que jamás haya existido), me ponga a jugar Super Mario Bros., un juego que cumplirá 25 años el año que viene. Pero ese juego, al igual que Contra que mi hermano y yo jugamos hasta la ignominia; Golden Axe que sólo pude jugar en maquinitas (no recuerdo a nadie que tuviera un Sega Genesis aquí en México), o Flashback que de hecho jugué en la computadora, están irremediablemente ligados a mi niñez. No es sólo ser “retro”; de verdad hay una conexión emocional con esos juegos.

(Además de que, para ser sincero, a veces me siguen pareciendo más divertidos que los juegos modernos).

Fue un proyecto divertido, y la verdad quedó bastante bien. Y, sorprendentemente, se ven muy bien estos seniles juegos en mi televisión de 46″.

Como debía de ser

Yo fui el primer alumno de mi generación en la carrera (si no me equivoco) que instaló exitosamente Linux en su casa. A partir de entonces he instalado Linux en más máquinas de las que me gustaría admitir, y en varias de esas máquinas lo instalé más de una vez. El avance que han tenido los instaladores de Linux ha sido enorme; en general ahora sólo hay que contestar un par de preguntas y uno se olvida de todo lo demás… si no son dementes como yo y se evitan la molestia de instalar Gentoo.

Después de instalar estaba el ligeramente engorroso proceso de configurar la máquina. En general eso era sencillo; las broncas principales eran el sonido y el video. El sonido durante mucho tiempo fue un desmadre, hasta que ISA tuvo a bien hacernos el favor de desaparecer y todas las tarjetas de sonido pasaron a ser PCI. A partir de entonces configurar el sonido se volvió trivial; el paso a tarjetas integradas y a ALSA facilitó todavía más el proceso.

El video en cambio fue otra bestia, y el problema en particular radicaba en que XFree86 (que era la implementación de X11 que Linux usaba) era un programa monolítico, enorme, y con graves problemas en sus políticas de desarrollo. Por no decir que el código tenía (cuando yo empecé a usarlo) cerca de quince años de edad.

Configurar X entonces era una tarea realmente engorrosa. A mí no me pasó directamente, pero sí oí de gente que quemó uno o dos monitores tratando de configurar esa bestia. Incluso con los (entonces) revolucionariamente modernos controladores binarios de NVidia la tarea era bastante engorrosa.

Y entonces ocurrió que dejé de instalar Linux y (por ende) de configurarlo. Eso fue en primer lugar porque instalar y configurar Linux se hizo suficientemente sencillo como para que los demás me dejaran de pedir ayuda, y en segundo lugar porque comencé a usar Gentoo casi exclusivamente, y entonces uno nada más instala y configura una vez, y se olvida del asunto.

Pero hace unas semanas estrené laptop, y por supuesto le puse Gentoo. Cuando llegó el momento de configurar X, hice lo más sencillo que podía hacer y copié mi viejo /etc/X11/xorg.conf de mi antigua laptop y lo puse en la nueva; las dos usan tarjeta de video Intel, y entonces no me quise complicar la existencia.

El problema fue que Compiz sencillamente era inusable. Me tocó cambiar de laptop justo en un momento de transición en X.org (el proyecto que reemplazó a Xfree86 y que es muchísimo más dinámico, modular y chido) en el que la combinación de servidor X, controladores de Intel y mesa hacían que no se pudiera usar Compiz. Investigando descubrí que tenía que utilizar versiones más modernas (que la verdad no quería; sigo usando Gentoo, pero he decidido quedarme en la versión estable del sistema, porque no tengo tanto tiempo como antes para andar perdiendo viendo cómo hacer que mi tarjeta inalámbrica funcione), y lo hice. Funciona de maravilla; creo que Compiz corre mejor en mi laptop con una tarjeta de video Intel que en mi máquina de escritorio con una NVidia GeForce 8800 GT.

Pero lo más interesante fue ver que mucha gente mencionaba la falta de /etc/X11/xorg.conf, y les respondían que sí, que ahora X no necesita archivo de configuración. Sin poder creerlo realmente decidí intentarlo, y borré (mejor dicho, moví) mi archivo de configuración de X, y para mi absoluta sorpresa descubrí que todo funcionaba de maravilla.

La verdad ni podía creerlo; mi xorg.conf estaba cuidadosamente diseñado, usando años de experiencia configurando máquinas, y ahora resulta que no es necesario.

En el Instituto de Matemáticas Jorge me pidió que instalara Linux a dos computadoras del laboratorio, y nada más para comprobar si sí era verdad el asunto, decidí dejarles casi vacío el xorg.conf (ahorita explico por qué no lo quité completamente). De nuevo para mi absoluta sorpresa vi que también funcionaba. El xorg.conf de esas máquinas quedó así:

Section "Device"
	Identifier		"nVidia Corporation Quadro FX 560"
	Driver			"nvidia"
EndSection

Así es también (con un identificador distinto) la configuración en mi casa. No quité el archivo de configuración porque las máquinas tienen tarjetas de video NVidia, y quería usar los controladores binarios. Si no especifico que quiero usar ese controlador, X.org automáticamente le asigna el controlador open source nv, que no tiene nada de malo, excepto que no cuenta con aceleración 3D. Pero la asombrosa asombrosidad del asunto no se disminuye en nada; ahora en el peor de los casos necesito cuatro líneas (y realmente útiles son sólo dos) para configurar X. Todo lo demás lo hace el programa solito.

Que, por supuesto, es como debía de ser.

Amorcito corazón…

Cuando mi coche se descompone, lo llevo con el mecánico. Cuando las tuberías de mi departamento fallan, llamo a un fontanero. Si algo le pasa a mi estufa o calentador de agua, llamo a un plomero.

Hago esto no porque considere que tales tareas sean indignas de que me ensucie las manos, ni (mucho menos) porque tenga dinero para tirar a puños al cielo. Lo hago porque me queda clarísimo lo estúpido que soy en este tipo de cosas, y que si intento hacerlas yo lo más probable es que a) pierda mi tiempo y mi esfuerzo, y b) que de cualquier forma tenga que llamar al especialista eventualmente. Por no decir que, dada mi torpeza, es muy probable que termine lastimándome en el proceso.

(Por supuesto soy capaz de cambiar un foco o un fusible, y de destapar el retrete; pero considero esos ejemplos tan triviales que no merecen ni siquiera tomarse en cuenta).

El problema, por supuesto, viene cuando no hay tal especialista o no es sencillo que haga exactamente lo que necesito.

Llevo trabajando esporádicamente en mi Media Center desde hace casi un año; platiqué sobre el software que corre en él hace unos meses. El Media Center está, para motivos prácticos, terminado; lo utilizo día a día para ver videos que bajo de la red (DVDs y Blu-rays los veo en mi PlayStation 3), y para oír mi música. También lo estoy utilizando para poder ver en mi impresionante televisión las fotos que tengo; para ello escribí un plugin de F-Spot para Elisa.

(Faltan un par de cosas para que el software del Media Center sea perfecto; pero realmente son detalles menores.)

La pieza faltante era el gabinete del Media Center; la computadora que corre el software estaba destripada sobre la sala de mi casa. Ningún gabinete me gustaba, principalmente porque estaban horribles; esta es una computadora que va a estar permanentemente en la sala de mi casa, así que más vale que se vea al menos algo decente.

Cuando por fin comencé a encontrar gabinetes que más o menos me gustaban, descubrí con horror que (en todos los casos) no tenían suficiente poder para mi Core 2 Quad y demás componentes de hardware. El problema principal es que los gabinetes “bonitos” para Media Center suelen tener una fuente de poder de juguete, porque en general son gabinetes pequeños y las fuentes de poder no pueden ser ni muy grandes ni (por lo tanto) muy poderosas.

Así que después de estarme rascando la cabeza, llegué a la conclusión de que tendría que construir el gabinete yo, o mandarlo a construir. Si lo mandaba a construir podía ir con un carpintero o un herrero (o alguien que trabajara metales); si lo hacía yo por fuerza tendría que hacerlo de madera. Digo, un taladro puedo usarlo y en el peor de los casos me perforo el pie; con un soldador estoy seguro de que podría hacer volar mi departamento y probablemente todo el edificio donde vivo.

Total que decidí tomar el toro por los cuernos y hacer mi gabinete yo; tenía requerimientos muy específicos y durante varios días estuve pensando en cómo armaría todo: aunque podría haberle explicado a un carpintero cómo quería todo, me pareció que valía la pena el que yo lo hiciera. Además, me daba pretexto para comprar una sierra caladora eléctrica.

Cuatro días después, y con mi departamento pareciendo que lo hubieran bombardeado, terminé el gabinete de mi Media Center. Tal vez no es particularmente bonito (lo cual va en contra de la idea original de armarlo yo, pero bueno), pero lo hice yo solito con mis propias manos, sin herirme (mucho) en el intento, y después de dos prototipos que al final terminaron en la basura.

Por supuesto, estoy orgullosísimo del mismo.

Mi diseño era muy sencillo; dado que necesito una fuente de poder de verdad, decidí que el gabinete debía tener una altura (interna) de 8.5cm, que es lo que mide de alto una fuente de poder estándar. También quería que tuviera dos bahías 5.25″ enfrente; una para el lector de discos Blu-ray, y otra para mi VFD Thermaltake. Dadas esas dos restricciones, todo lo demás salía automáticamente; como la fuente de poder no podía estar arriba de la placa madre, tenía que estar al lado, y eso me daba el ancho, que si lo hacía un cuadrado me dejaba espacio de sobra para todo lo demás.

Por supuesto, no fui tan inocente como para creer que sólo tenía que hacer una caja; también hice los soportes para el Blu-ray y los discos duros, las aperturas enfrente y atrás para la placa madre y las bahías 5.25″, y todo lo necesario para que hubiera un flujo de aire decente (de las cosas que más me gustan de cómo quedó el gabinete es que no se calienta casi nada).

Aquí está el producto final:

El Media Center

El Media Center

En ese mismo álbum de mi galería están más fotos, por si quieren ver el proceso que seguí para construirlo. No voy a entrar en detalles del desmadre que fue el ir aprendiendo por prueba y error cómo ir trabajando la madera, ni las múltiples ocasiones en que me dieron ganas de mandar todo al carajo y prenderle fuego a mis experimentos. El punto es que terminé, y sin daños permanentes a mi persona. Espero.

Eso sí, a pesar de que estoy muy orgulloso de mi gabinete, la verdad qué bueno que estoy estudiando un doctorado. Porque si trataba de vivir como Pepe el Toro, me moría de hambre.

Ups

Estaba configurando el kernel de una máquina remota, que inicialmente había dejado con el kernel generado por genkernel (un programita de Gentoo que, contrario a lo que pudiera pensarse, genera kernels).

A mí no me gusta usar genkernel, generalmente; prefiero configurar a pie mi kernel. Pero ése lo había dejado así porque era lo más rápido.

Pero hoy ya lo estaba configurando, y tratando de descubrir qué módulo del kernel correspondía a la tarjeta de red, me puse a quitar los módulos de red que el kernel generado por genkernel inserta al iniciar la máquina. Que son, básicamente, todos; genkernel inserta todos los módulos posibles, esperando que el que de hecho tenga la máquina corresponda a alguno.

Mi idea no es tan idiota como suena; el kernel en general no permite quitar un módulo que esté en uso, y de hecho así pensaba descubrir cuál era el que correspondía: cuando tratara de quitarlo, el kernel se quejaría, y yo sabría que ése era el que buscaba.

Sólo que, por alguna razón, el kernel me permitió quitar el módulo. Y, siendo que la estaba configurando de forma remota, de repente me quedé sin ninguna forma de tener acceso a la máquina.

Ups.

No es la estupidez más grande que he cometido en este tipo de cosas (ni de lejos), pero ciertamente no me vi muy brillante. Ni modo; habrá que ir físicamente a la máquina.

Elisa Open Media Center

Mi Media Center está casi terminado. Del hardware no voy a hablar mucho hasta que de hecho termine de armarlo; le falta el gabinete, pero gracias a Enrique creo que pronto podré completar eso, aunque me parece que tendré que esperar a regresar de Europa. Necesito hacerle modificaciones a un gabinete que me pasó, y necesito a alguien que sepa trabajar con metal para eso. Ciertamente yo no podría hacerlo.

Hoy voy a hablar del software, porque básicamente he terminado enamorándome de él; hablo por supuesto del Elisa Open Media Center.

Menú principal de Elisa

Menú principal de Elisa

(Aguas con las ligas; son PNGs con una resolución de 1920×1080… FullHD, por supuesto).

Los screenshots no le hacen justicia a ciertos aspectos del programa; particularmente las animaciones, que están bastante simpáticas (el menú principal gira, por ejemplo).

Todo el programa está escrito en Python, aunque por supuesto las bibliotecas chonchas están escritas en C o C++, y Elisa utiliza los bindings en Python. En particular las más importantes serían GStreamer, que se encarga de todo lo relacionado con multimedia; y Pigment, que es la base sobre la que armaron toda la interfaz gráfica. Esas dos bibliotecas están en C y C++, pero Elisa utiliza los bindings en Python, que al parecer están muy bien hechos.

De Pigment no puedo hablar mucho, porque es un proyecto que existe únicamente (hasta el momento) para Elisa y yo nunca lo he usado; pero con GStreamer sí tengo algo de experiencia. GNOME lo utiliza también para todo lo relacionado con multimedia, y aunque a mí al inicio me parecía demasiado complejo, creo que ha terminado siendo un proyecto muy exitoso.

Casi no hay archivos de audio o video que no pueda reproducir con las bibliotecas de GStreamer, y además es altamente modular, lo que ha permitido separar y desarrollar independientemente un montón de codecs y filtros y un montón de cosas más para el proyecto. Utilizando otras bibliotecas open source, en la mayoría de los casos.

Eso es lo que da la base para Elisa; que puede reproducir casi cualquier cosa. Una excepción ahorita son películas Blu Ray (que no es algo exclusivo de Elisa; no hay reproductores para Linux todavía) y, hasta cierto punto, DVDs. De hecho los DVDs pueden verse, sólo fallan algunas cosas (hablaré de eso más adelante).

Como GStreamer es el que se encarga de tomar un archivo de audio y video y de hecho hacer que se vea y/u oiga en la computadora, lo que realmente nos debe interesar de Elisa es cómo presenta dichos archivos al usuario. En otras palabras, la interfaz gráfica.

Elisa está pensado como Media Center; por lo tanto se da por hecho que el periférico con el que el usuario se comunicará será un control remoto. En general Elisa presenta todo utilizando listas, y presentando una miniatura del objeto seleccionado en ese momento; aquí está cómo se ve mi directorio de series de televisión:

Menú de series

Menú de series

En este caso muestro también una modificación que le hice al programa; Elisa en este momento todos los directorios los muestra igual, pero yo le hice una mejora para que muestre una imagen. Hablaré más de las cosas que le he hecho al media center más adelante.

Dentro ya de un directorio específico, el mismo modelo se sigue; una lista con los archivos (de video en este caso) que hay, y una miniatura a la derecha. Para archivos de video, Elisa genera una miniatura automáticamente.

Miniaturas de videos

Miniaturas de videos

El reproductor es sencillo, pero en general funciona. No es tan rápido (pero ni de lejos) como MPlayer, pero sí es más inteligente para mantener la sincronización de archivos estúpidamente grandes (como los avances FullHD de Apple). Casi cualquier video que veo ahora, lo hago usando Elisa.

Reproductor de videos

Reproductor de videos

Para ver música se sigue el mismo modelo de listas; pero se puede cambiar a flujo de miniaturas (parecido al del iPod) o cuadrícula de miniaturas. También se puede hacer el cambio en videos, pero me gusta más en música porque como lo que se ve son las portadas de los CDs, se ve bastante chido:

Vista en Flujo

Vista en Flujo

Vista en Cuadrícula

Vista en Cuadrícula

El reproductor de música no me gusta tanto. Digo; funciona sin ningún problema, pero me gustaría que pudiera verse más que el efecto “gloom” (que además tiene como mil años). Mis MP3s están esquizofrénicamente bien etiquetados con ID3v2.4.0; me gustaría mejor que al reproducir pudiera ver la portada del disco, y toda la información que tiene la canción, no sólo el título, artista y álbum.

Reproductor de música

Reproductor de música

La parte de imágenes no la muestro porque es básicamente igual, y además no he movido mis fotos de F-Spot a Elisa. Y no sé qué tan deseoso esté de hacer eso; F-Spot tiene un montón de cosas que no veo cómo Elisa pudiera emular. Hay forma de hacer que los datos que F-Spot tiene sean leídos por Elisa, pero no me he metido mucho en eso. Y, la verdad, no estoy viendo fotos cada quince minutos.

Además de todo esto Elisa tiene un montón de monerías; la que más me ha gustado hasta el momento es que tiene un plugin de YouTube:

Plugin de YouTube

Plugin de YouTube

Por omisión incluye los videos mejor calificados, los más vistos y los más recientes; pero uno puede hacer búsquedas también, aunque hay que usar un teclado virtual porque hay que recordar que Elisa asume que uno lo controla con un control remoto.

Videos más recientes de YouTube

Videos más recientes de YouTube

También se incluye reproducción de DVD; pero la verdad no he tenido mucha suerte con eso, y mi PS3 es capaz de reproducir DVD además de Blu Ray. Sin embargo funciona hasta cierto punto; sólo los menúes son a veces medio volubles, y entonces no se puede elegir idioma o subtítulos de vez en cuando.

Opción de DVD

Opción de DVD

Reproducir DVD

Reproducir DVD

Menú de reproducción de DVDs

Menú de reproducción de DVDs

DVD reproduciéndose

DVD reproduciéndose

El soporte inicial está ahí; espero que dentro de no mucho tiempo se puedan reproducir DVDs y (esperemos) discos Blu Ray sin muchos problemas.

Pero lo que realmente me gusta de Elisa no es todo esto que he mostrado; es que es Open Source. Y está escrito en Python. Es facilísimo de modificar… después de que uno se rompe la cabeza tratando de entender la filosofía REST (que yo sigo diciendo es una evolución natural de utilizar continuaciones, pero bueno).

Una vez entendido que todo es asíncrono en Elisa y que los threads son escondidos al programador, modificar el programa es sencillo. Además del pequeño cambio que hice para que los directorios tuvieran una miniatura asignada, también modifiqué el programa para que utilizara portadas de CDs locales en lugar de pedirlas a Amazon y guardar un cache con un nombre ilegible, y otras pequeñas cosas. Nada más tenga más tiempo espero poder meterle más mano, porque mi media center como lo he planeado lo va a necesitar.

A pesar de que es relativamente verde el proyecto, yo ya lo uso para ver casi todo tipo de videos y para escuchar música. Con unos cuantos toques más (y que termine de alguna manera de modificar mi gabinete), tendré mi Media Center justo como lo quiero.