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

Imprimir entrada Imprimir entrada

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.

Imprimir entrada Imprimir entrada

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.

Imprimir entrada Imprimir entrada

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.

Imprimir entrada Imprimir entrada

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.

Imprimir entrada Imprimir entrada

Rock Band: Family

Total que cuando mi hermano vio cómo jalaba Rock Band, le dieron ganas de comprárselo también. Como quería realmente ver cómo estaba la batería, yo le recomendé que mejor comprara Guitar Hero III: Legends of Rock, porque en todos lados he leído que en ese juego el periférico de la batería está mucho mejor hecho.

El viernes me mandó un mensaje de que ya lo había comprado, y yo hubiera ido a su casa a probarlo el sábado, pero tenía una cruda infernal que de hecho apenas hoy al medio día comenzó a quitárseme, así que fui hasta hoy en la tarde.

Puta. Madre. Es divertidísimo.

Al final ni mi hermano ni yo jugamos mucho en la batería; en primer lugar porque nos gustó más Rock Band (que yo había leído que probablemente así sería; tiene mejores rolas y la interfaz aunque casi idéntica es más amigable), y porque al parecer todavía no funciona la batería de Guitar Hero: Legends of Rock en Rock Band. Activision e Informix (las compañías de los juegos) han dicho que están chambeando en eso, así que espero que eventualmente se resuelva. Pero encima usar la batería es cansadísimo; después de cada rola a mi hermano y a mí nos dolían los brazos.

Pero sí jugamos yo usando la guitarra y él el bajo (casualmente mi hermano “toca” el bajo como yo “toco” la guitarra), Rock Band principalmente. Y puta madre, qué divertido es jugar así. Nos aventamos un montón de rolas juntos, hasta que nos dolieron las muñecas. No recuerdo cuándo fue la última vez que me divertí tanto con mi hermano.

Además él tiene un Sistema de Entretenimiento Bose, 5.1 obviamente, y la diferencia en sonido es abismal comparado con mi configuración. Claro que hasta ahora he corrido mi PlayStation 3 conectando el sonido a las bocinas de mi tele, que son de chocolate; no he visto cómo conectarlo directamente a mis bocinas 5.1. Dudo que suene tan chingón como en casa de mi hermano; pero la diferencia sería menor, supongo. En casa de mi hermano es impresionante la calidad de sonido.

Fue muy divertido estar jugando Rock Band con mi hermano, y sí me dieron ganas de probar un poco más la batería. Dicen que si uno saca las rolas en el modo más difícil, básicamente uno ya sabe tocar la batería de verdad; no sé qué tan cierto sea, pero hasta cierto punto sí me lo creo. Ciertamente es más posible que con la guitarra; ser bueno con la guitarra en Rock Band no sirve de nada para tocar la guitarra de verdad. Bueno, tal vez algo de agilidad digital, pero nada más.

Ya quedamos de juntarnos de nuevo; y a ver si él se compra Rock Band y luego jugamos en línea. Pero juntos es muy divertido.

Imprimir entrada Imprimir entrada

Juguetes para adultos

Esta entrada es algo más larga que las últimas que he escrito, en gran medida para celebrar que ya acabé de escribir los últimos exámenes de mis alumnos en este semestre.

Ahora que mi hermano me hizo el favor de darme el mejor regalo que me han dado en años (un PlayStation 3), tomé unas cuantas horas los fines de semana pasados investigando qué juegos me podrían gustar y yendo a comprarlos. También hizo que volviera a ponerme en contacto con la banda que trafica, legal e ilegalmente, aquí en México.

La historia conmigo y consolas de videojuegos es no muy larga, y no es muy feliz. Mi hermano y yo tuvimos un Atari 2600 con como 40 juegos precargados ya tarde en nuestras vidas; yo ya estaba en secundaria, así que estamos hablando de 1990, para motivos prácticos. La razón es muy sencilla; mis papás no tenían dinero para andar gastándolo en pendejadas como videojuegos.

Por esa época (además de estar sufriendo horrores la secundaria), yo me hice medianamente bueno jugando Super Mario Bros. en las maquinitas cerca del mercado que había en nuestra casa. Podía recorrer los primeros cuatro mundos, pero siempre me perdía en el castillo del cuarto, porque nunca investigué cómo salir del laberinto (no había internet). Y se jugaba con monedas, por si es necesario que le recuerde a alguien.

Cuando un día entré a Aurrerá (¿se acuerdan de Aurrerá?), y vi que vendían el Nintendo con Super Mario Bros. incluido, yo me obsesioné con la idea de que mis papás me lo compraran. Mis padres sencillamente no podían; no había lana para eso, y había prioridades más importantes, como comer o tener zapatos que no tuvieran agujeros. Y encima de todo, yo tuve la gracia de que en esa época fue cuando más decepcioné a mis papás con la única responsabilidad que me daban: ir a la escuela. Así que, además de que no podían comprarme el NES, de hecho yo no me lo merecía.

Podría ponerme a rememorar más esa época, que sigue siendo la única de mi niñez-juventud que recuerdo con odio, pero no se me da la gana. Sólo diré que, ya pasado algo de tiempo, y yo ya saliendo bien en la escuela, conseguí que mis papás me compraran (mucho más barato que el Nintendo, y estoy 97.3% seguro que importado ilegalmente) el Famicom Family.

Para todos los que hayan tenido la paciencia de investigar al respecto, el Nintendo y el Famicom son exactamente lo mismo en lo que se refiere a circuitos; pero el Famicom era mucho más chafa el acabado (el plástico era más corriente, y se veía más feo), y los cartuchos no eran directamente compatibles, pero había adaptadores para poner cartuchos de Famicom en Nintendo y viceversa.

Super Mario Bros. 3

Super Mario Bros. 3

Ahí jugué hasta la ignominia Super Mario Bros. 3. En japonés (salían los juegos mucho más baratos para Famicom que para Nintendo; probablemente porque eran importados ilegalmente). Así que nunca supe qué le decía la princesa a Mario cada vez que la rescataba, porque salía en japonés, hasta que conseguí un buen emulador de Nintendo para la PC.

De hecho, no tengo ni puta idea de dónde acabó el Famicom. Según yo servía, pero no sé a dónde fue a parar. Sería interesante volverlo a jugar, supongo.

Para ese entonces las computadoras ya me habían interesado mucho más, y jugaba más Prince of Persia que cualquier cosa en el NES, así que lo abandoné. Y de hecho en el CCH también medio abandoné la compu; ahí me dediqué a ser adolescente, a aprender a tocar la guitarra, y a enamorarme estúpidamente de muchachas que no me hacían caso, y que me iba peor cuando me hacían caso.

Ya de ahí pa’l real las consolas perdieron cualquier atractivo para mí; la computadora me parecía muchísimo más poderosa (y en esa época de hecho así era), y el último cambio en mí fue cuando también dejé de jugar juegos de computadora en la PC, y comencé a usarla para “jugar” programando, o administrándola, o viendo en general qué podía hacer con ella. Por eso es que, desde hace ya mucho, yo digo que yo no soy un “gamer”.

Cuando el compañero de piso de mi cuate Juan José se consiguió un X-Box, me impresionó la evolución que habían tenido las consolas; pero las dos o tres veces que de hecho jugué me aburrí rápidamente. Me interesaba más como potencial media center, pero incluso como eso terminé llegando a la conclusión de que sería más divertido armar uno yo solo.

Así que cuando mi hermano me regaló el PS3, yo estaba literalmente fuera de contacto con cualquier cosa que tuviera que ver con consolas, excepto generalidades básicas y unas cuantas sesiones de juego en el Wii de un cuate. Por ejemplo, estoy convencido de que, para juegos, las consolas de ahora (y en especial el PS3) son mucho más poderosas que una PC normal.

Y entonces volví a meterme en el mundillo de los videojuegos en México. Y lo que realmente quería comentar en esta entrada, es que tengo la ligera impresión de que los usuarios y compradores de juegos para estas consolas son exactamente los mismos de hace veinte años. Y creo que es lo mismo en todo el mundo.

Cuando yo quería un Nintendo, el Nintendo era algo que los papás le compraban a sus hijos, que tendían a ser niños o preadolescentes. El SuperNintendo creo que fue una consola para adolescentes. Después la verdad ya no vi la evolución; pero me parece que en particular el PlayStation 3 se lo compran adultos para ellos mismos, y son los principales consumidores de juegos. Es un juguete para adultos.

Ciertamente creo que cualquier papá consideraría seriamente comprarle a su hijo de entre 10 y 16 años un PlayStation 3. Si tiene menos de 12 años, un Wii me parece perfecto. Si tiene menos de 16 un X-Box 360 está caro, pero creo que se puede justificar. ¿Pero un PlayStation 3? Es carísimo (más aquí en México), y además si uno se pone revisar el catálogo de juegos, los mejores y más vendidos son juegos que ciertamente no están pensados para niños, y yo incluso pondría en duda que para adolescentes.

Por supuesto todo esto son impresiones mías sin ningún tipo de justificación con datos duros; es sólo mi experiencia empírica. Pero cuando compré GTA:IV, y Rock Band, aunque en las tiendas de videojuegos que visité había un chingo de niños, los únicos que compraban juegos eran chavos de mi edad o algo más jóvenes, que si tienen hijos tendrían como cinco o seis años en general, y además los emocionados eran ellos mismos, lo que creo que implica que se compraban los juegos para sí mismos.

Así que después de pasar casi veinte años desde mis primeras interacciones con consolas, resulta que el mercado para las consolas modernas vuelvo a ser yo. Eso es interesante, por decir lo menos.

Lo que sí es que por divertidos que sean GTA:IV y Rock Band, y lo impresionante de sus gráficas, me da nostalgia jugar Super Mario Bros. 3. Me parece que puedo instalarle Linux al PS3, y entonces es sencillamente compilarle algún emulador para Nintendo (o SuperNintendo); pero me da frío: es un regalo muy caro como para arriesgarme a hacerlo ladrillo. Voy a investigarlo, sin embargo; si me parece se puede hacer de forma suficientemente segura, igual y me animo.

Mientras tanto es divertido pensar que, al parecer, la gente que juega los mismos juegos que yo tiene la misma edad o tan solo unos cuantos años menos que yo.

Imprimir entrada Imprimir entrada

PS3

Y resulta que de buenas a primeras mi hermano me regaló un PlayStation 3. El modelo de 80 gigas.

La consola viene con FIFA Soccer 09, y además mi hermano me regaló Metal Gear Solid 4; pero la verdad ambos juegos son demasiado complejos para mí en este momento: no puedo estar perdiendo tiempo aprendiendo a jugarlos ahorita. En las vacaciones de invierno me desquito.

Así que fui y me compré Grand Theft Auto IV: es (me parece) igual de complejo que los otros dos, pero éste al menos ya lo he jugado (o bueno, las versiones anteriores en la PC, especialmente GTA3), así que no tengo que aprender muchas cosas nuevas, y además tiene la ventaja de que uno puede jugar de a una misión a la vez; que además suelen ser misiones cortitas, no más de quince minutos cada una.

Grand Theft Auto IV

Grand Theft Auto IV

¿Recuerdan lo que comenté de Death Race? GTAIV es muy similar; carros, explosiones, y nenas guapas. Es muy divertido.

El otro juego que tengo muchas ganas de jugar es Rock Band; yo toco la guitarra (o al menos eso decía hace unos años), y me han dicho que el juego es endemoniadamente divertido. El problema es que el único paquete con la guitarra incluida que he encontrado cuesta alrededor de 3,000 pesos, porque incluye también la batería (que a mí no me interesa en lo más mínimo). Así que estoy buscando comprar el juego y la guitarra, aunque sea separados. Y que la guitarra sea inalámbrica, por supuesto.

Y sí, ya sé que está Guitar Hero, la edición especial de Aerosmith; pero por lo que he podido leer el chido es Rock Band. Además, no soy tan fan de Aerosmith.

Así que si alguno de mis lectores sabe dónde puedo conseguir Rock Band y la guitarra inalámbrica separados o en un solo paquete (pero sin batería) (o al menos la guitarra; el juego solito sí lo he visto), por favor díganme. Mañana yo creo que me doy una vuelta por Meave.

Actualización: Olvídenlo; ya encontré la guitarra y el juego.

Imprimir entrada Imprimir entrada

BD+ destrozado

Al parecer por fin acaban de destrozar BD+, el sistema de protección que utilizan los discos Blu-ray, y que es órdenes de magnitud más complejo que CSS (el que usan los DVDs). También decían que era mucho más seguro; acaba de quedar demostrado que no.

Esto significa que dentro de no mucho tiempo (yo digo que antes de febrero de 2009) podremos tener una forma de ver películas en Bluy-ray en Linux.

Lo cual por supuesto es fabuloso.

Imprimir entrada Imprimir entrada

Google Car

Iba para la universidad al medio día, y de repente vi un carro que parecía tener una grúa encima. Tardé unos segundos en darme cuenta de que era el Google Car tomando fotos de Eje 10. Logré tomarle unas fotos sin matarme en el proceso:

Google Car

Google Car

Y he aquí la prueba de que era el carro de Google:

Google Car

Google Car

Espero que no tarden demasiado en activar el street view en la Ciudad de México; claro que comprendo que ha de ser difícil cubrir todas las calles de La Majestuosa.

Imprimir entrada Imprimir entrada

Blu Ray

Una de las máquinas de mi departamento es el recién armado Media Center. No está terminado (de hecho le falta bastante), pero sí ya tiene un lector de discos Blu Ray, y me compré mi primera película Blu Ray para probarlo (la edición “ultimate” de dos discos de Iron Man).

Oh. Dos. Mío.

Todavía no es perfecto; la reproducción se “atora” cada diez minutos más o menos, y el sonido se corta un poquito en esos momentos. Voy a aplicar mis prejuicios y diré que la culpa la tiene Windows; no hay todavía reproductores de Blu Ray en software para Linux.

(También puede ser que estoy usando un cable VGA, porque no tengo un convertidor DVI → HDMI).

Pero quitando eso… Oh. Dos. Mío.

La calidad de la imagen en mi ridículamente grande televisión de 46″ (a FullHD, por suesto; ¿si no pa’ qué?) se acerca tanto a la perfección que dan ganas de estirar la mano y tocar los poros visibles en las caras de los actores. Ah, porque una de las características del Blu Ray de Iron Man es que viene a 1080p. En las escenas del desierto se ven los granos de arena. Me daban ganas de ponerme a contarlos.

No es perfecto, repito; pero espero que no tarde mucho en aparecer un reproductor para Linux (siendo como es la comunidad Open Source, de hecho seguro aparecerán varios), y que además los de NVidia se vuelvan a poner las pilas y los controladores para X.org que hacen tengan la calidad que tenían cuando salieron por primer vez hace años. Ya es hora de que se pasen a DRI.

Como sea, no hay prisa; tampoco es que haya películas en Blu Ray para tirar hacia arriba. Y como Media Center para DVDs y videos que bajo de la red, está más que sobrado.

Y no está terminado; necesito probablemente cambiar la placa madre (la que me dieron no era exactamente el modelo que se suponía había comprado), y (más importante) necesito un gabinete que se vea decente en la sala de mi casa. Me interesa uno slim, y con dos bahías frontales de 5.25″ a la misma altura: una para mi VFD (que está poca madre y completamente soportado en Linux), y otro para el Blu Ray. Negro, por supuesto.

Hay fotos, pero no las subiré hasta que termine con todo.

Imprimir entrada Imprimir entrada

Compus

Tengo en este momento cuatro computadoras en mi departamento. Mías, no que se las esté arreglando a alguien ni nada por el estilo.

Y para fin de año posiblemente agregue una más. Y no estoy contando mi N800.

Se pone calientito el departamento cuando están prendidas todas.

Imprimir entrada Imprimir entrada

Metrópoli

Cuando estaba en California, utilizaba Google Maps para todo, porque casi todo estaba ahí. Si quería ver dónde había una tienda, un cine, un negocio, o cualquier cosa de ese estilo, sólo buscaba en Google Maps usando el nombre de lo que buscara, y Northridge o Los Ángeles.

Me daba envidia, porque en la Ciudad de México Google Maps era (en ese entonces) más bien inútil para nada serio, porque aunque funcionara la vista satelital, no tenía ligada ningún otro tipo de información.

Poco más de un año después, un montón de cosas en la Ciudad de México se pueden encontrar utilizando Google Maps: restaurantes, cines, negocios. También están estaciones del metro, verificentros, y servicios de ese tipo.

Todavía no están las cosas como el obtener las instrucciones de cómo ir de un punto a otro de la Ciudad, y (¡maldita sea!) tampoco tenemos Street View. (Pero dicen que ya vieron al carrito de Google aquí en la Ciudad, así que igual y no falta mucho para que la incluyan.)

De cualquier forma es utilísimo. La Guía Roja queda casi completamente obsoleta en comparación.

Imprimir entrada Imprimir entrada

El servicio más inútil de la historia

Con la beca del doctorado me enteré que ahora es el becario el que debe ir al banco (Bancomer; ni siquiera dan opciones) y abrir una cuenta para que Conacyt deposite ahí la lana cada mes. Así que fui hace unas semanas y pedí mi cuenta y me la dieron.

Cuando la estaba tramitando, el ejecutivo que me tocó me preguntó si quería que me llegaran mensajitos al celular cuando hubiera movimientos en mi cuenta; i.e., que si me depositaban o retiraban dinero de la misma, que entonces me llegara un mensaje de texto a mi celular. Pregunté que cuánto costaba eso, y me dijeron que era gratis. Y yo dije “dadas, hasta las puñaladas”.

La cosa sonaba útil; así sabría en cuanto Conacyt me depositara, y yo podría continuar gastando dinero alegremente… o eso creí.

Resulta que por alguna razón, no me llegan mensajes cuando Conacyt me deposita. Pero cuando hay retiros (que yo soy el único que retira), sí me llegan mensajes.

Entonces cuando Conacyt me deposita yo no me entero. Y cuando estoy yo en caja o en el cajero automático retirando dinero, a los pocos segundos me llega un mensajito que me avisa de lo que justo acabo de hacer.

Es la cosa más inútil que jamás he tenido; tengo un servicio que me dice lo que hago. Inmediatamente después de que lo hago.

Imprimir entrada Imprimir entrada

The lulz

Mientras estaba en Oaxaca fue activado el Large Hadron Collider. Mientras que me parece muy chida la idea que hay detrás del experimento, y que por supuesto apoyo la idea de gastar dinero en este tipo de cosas, creo que también se ha exagerado un poco su importancia.

Lo que más risa me dio, fue la bola de idiotas que creyeron que el acelerador podía crear un hoyito negro que se comiera la Tierra. Esta imagen por lo tanto se me hace la neta:

The lulz

The lulz

Chido por la Unión Europea, y los miles de científicos trabajando para tratar de entender cómo fue que se creó el universo.

Imprimir entrada Imprimir entrada

Chrome

Google acaba de anunciar su nuevo navegador suyo de ellos propio de sus personas: Chrome.

No lo voy a probar todavía porque sólo está para Windows en estos momentos; pero el cómic revela un diseño técnico bastante innovador e interesante. En otras palabras: en papel suena fabuloso. Falta ver cómo funciona en la vida real.

En particular, me gusta mucho cómo quieren enfatizar que si algo sale mal con un plugin, el problema es de quienes escribieron dicho plugin.

Y en general tiendo a confiar en Google, así que estoy algo emocionado. Espero que salga pronto el navegador para Linux.

Imprimir entrada Imprimir entrada

Model-View-Controller

En ingeniería de software hay un patrón de desarrollo que se llama MVC, por Model-View-Controller. La idea es que tenemos cierta información (el modelo), y que tenemos cierta forma de representarla (la vista), y que son independientes y, hasta cierto punto, ortogonales: de hecho en teoría debemos ser capaces de “conectar” distintas vistas al mismo modelo, y todo debe ser transparente y bonito.

¿Para qué sirve esto? Básicamente para que no se nos haga bolas el engrudo respecto a los datos que estamos trabajando y cómo se los presentamos al usuario. En el momento en que en el mismo camino de código estamos lidiando con información y con cómo la representamos, no estamos lejos de meternos en problemas.

Tal vez la parte más importante del patrón MVC es la famosa C; el controlador. Cómo hacemos para que (de forma inmediata, y automágica) la vista se actualice cuando los datos en el modelo son modificados, o que si el usuario cambia algo en su vista, los datos en el modelo cambien también. Si estamos utilizando encapsulamiento de datos la cosa puede complicarse porque la vista tiene que hablarle al modelo, y el modelo a la vista, y aunque no es raro que la vista cargue una referencia al modelo, sí es horrible que el modelo cargue una referencia a la vista… especialmente si ya dijimos que en teoría deberíamos poder conectarle distintos tipos de vistas.

Cómo solucionamos este pequeño problema depende de muchas cosas: el lenguaje de programación, la biblioteca que estemos utilizando para hacer la interfaz gráfica, el paradigma que estemos usando (en C o Scheme podemos usar Orientación a Objetos, por ejemplo), etc., etc. Yo de lo que quiero hablar es de cómo suele solucionarse en C utilizando Gtk+.

Como muchos usuarios únicamente esporádicos de Gtk+, no había querido meterme a aprender a usar el TreeView; cuando los mismos desarrolladores de Gtk+ dicen que es complejo, a uno no le dan muchas ganas de meterse en problemas usándolo. Pero para una nueva versión de mi programita en PyGtk que muestra y baja los últimos trailers en la página de Apple, decidí que lo que tenía que usar era el TreeView, y me puse a estudiar para aprender a usarlo.

Está bien bonito; de verdad no entiendo por qué tantos dicen que es complejo: está bien fácil de usar. Claro, a lo mejor está relacionado con que yo estoy familiarizado con el patrón MVC: el TreeView es un ejemplo de libro de texto de aplicación de dicho patrón. Pero lo que me sorprendió aún más fue cómo resolvieron el problema de la comunicación entre la vista y el modelo; no sólo por lo elegante y bonito de dicha solución, sino además porque era rete obvio y a mí nunca se me había ocurrido.

GObject (y por tanto, Gtk+) ofrece un marco de trabajo orientado a objetos en C; incluyendo herencia, despacho dinámico, interfaces, etc. Pero además también ofrece un sistema de señales: cada objeto en GObject puede emitir señales en determinadas circunstancias, y uno puede conectar funciones (llamadas generalmente callbacks) a cada señal que se emita.

Esto se usa en la mayoría de los casos para manejar los eventos generados por la interfaz gráfica: cuando uno hace clic en un botón en Gtk+, el objeto del botón emite la señal “clicked”, y entonces uno puede conectarle una función a dicha señal para que haga lo que sea que haya que hacer cuando el usuario haga clic en dicho botón.

Pero las señales están disponibles a todos los objetos de GObject; entonces el TreeView lo que hace es que los modelos que utiliza implementan la interfaz TreeModel, que define ciertas señales a las cuales se conecta el TreeView. La idea es que cuando el modelo modifique sus datos se dispare una señal, a la cual el TreeView se habrá conectado, y entonces sabrá cuándo (y cómo) modificar la vista.

Y ya está; se preserva el encapsulamiento de datos, y se cumple al pie de la letra el patrón MVC.

La verdad no sé cómo no había pensado yo en eso; en Geom se me hizo un montón de bolas el engrudo, y terminé dejando en la misma clase todo lo relacionado con el modelo (la información geométrica) y la vista (cómo dibujarlo en mi lienzo). No tengo que explicar que eso hizo que todo se me hiciera un relajo después de un tiempo.

Para mi programita que baja los trailers del sitio de Apple hice eso; puse en clases independientes (que heredan de PyGObject) todo el código que va a la página y se conecta y baja la información, y señales para cada paso del camino: una señal cuando baja el poster, otra señal cuando obtiene el URL del video, etc. Y entonces la interfaz gráfica sólo se conectaba a esas señales y sabía cuándo tenía que hacer algo. Quedó bastante padre.

Con este nuevo truco me están dando ganas de volver a programar en Geom. Lástima que esté tan ocupado ahorita.

Imprimir entrada Imprimir entrada

El bastón

Mi mamá compró el Tsuru en el año 2000, y casi casi lo primero que hizo fue comprarle un bastón; sus carros anteriores habían sido robados, en algunos casos de afuera de la casa. Era un bastón de los que son en T, color amarillo.

Cuando compró su Stratus, mi madre me vendió (debo admitir que bastante barato) el Tsuru; en eso se me fue casi toda mi liquidación de Simitel. Como ahora mi mamá dejaba su Stratus en el patio de la casa, y sólo cabía un carro, yo le compré otro bastón al Tsuru; uno azul de los que se extienden nada más.

El primer bastón entonces ya tenía casi cuatro años, y seguí usando ambos bastones incluso cuando me mudé. Y siempre ha sido una costumbre mía el ponerle los dos bastones donde sea que deje el carro. Hasta ahora no me lo han robado, y ni siquiera le han dado un cristalazo; no tengo idea de cuánto (si acaso) haya que atribuirle a los bastones de dicha suerte, pero la verdad no quiero ponerme a averiguarlo.

Desde hacía unos días el bastón me daba algunas broncas para quitarlo; como que se atoraba aunque la llave giraba sin ningún problema. Yo estaba más que consciente de que el bastón estaba bastante viejo; incluso le faltaba un trozo de cuando una ex novia, en un ataque de furia histérica, lo azotó contra el suelo.

Pero hoy en la noche cuando traté de quitarlo, de plano ya no se dejó. La llave giraba sin ningún problema, pero el bastón se comportaba como si siguiera cerrado. Estuve meneándole durante varios minutos, hasta que decidí que sencillamente había dejado de funcionar.

Alguien normal habría ido por un cerrajero; pero yo (para bien o para mal) no soy alguien normal, así que regresé al ICN y le pedí a Enrique unas pinzas. Y procedí a romper el bastón trocito por trocito, continuando el daño que aquella ex-novia había comenzado.

Así fue como quedó:

El bastón

El bastón

Me llevó unos quince minutos irlo rompiendo poco a poco, y lo primero que hice (después de regresarle sus pinzas a Enrique) fue ir a comprar uno exactamente igual. Sólo que de color rojo.

Como les digo, no sé qué tanto atribuirle a los bastones por el hecho de que no se hayan robado mi carro.

Pero la verdad, no quiero averiguarlo.

Imprimir entrada Imprimir entrada