Multimedia Keys

Centurion, mi nueva máquina Athlon 64 X2 no está lista y probablemente no lo esté hasta que compre mi nuevo DVD y mi nueva quemadora de DVDs de doble capa. La definición de “lista” es que le tome una foto de conjunto, y no voy a hacer eso si las unidades ópticas no son negras (se ven feas de color cremita).

Independientemente de ello, hay avances. Hoy por ejemplo corregí un problema (que no sabía que tenía), que hacía que la máquina se trabara (hard way) cada vez que conectaba mi cámara digital. Lo primero que pensé fue “pinche Linux”, porque ya había conectado otros dispositivos USB sin broncas; pero resultó que es la placa madre. Si no desactivo una opción rara en el BIOS que permite tener teclado y discos duros USB visibles al tiempo de booteo, la cosa se traba feo. Traba traba: incluso el BIOS se traba.

Muy raro.

El problema lo descubrí cuando quise bajar a Centurion las fotos de mis nuevos teclado y ratón Genius. El teclado es un Genius ErgoMedia 700, que me costó la fabulosa cantidad de 261 pesos:

Teclado Genius ErgoMedia 700

Teclado Genius ErgoMedia 700

El ratón es un vil Genius NetScroll, con la particularidad de que es negro (y por tanto se ve bonito):

Ratón Genius NetScroll Negro

Ratón Genius NetScroll Negro

Me costó $31.50. Con IVA.

El ratón lo conecté y jaló, como suelen hacer los fieles ratones. El teclado ídem, excepto las teclas de multimedia. Por supuesto.

Yo ya sabía que con las teclas multimedia habría broncas; mientras que los teclados de 101 a 105 teclas están comlpetamente estandarizados (al menos en los idiomas que usan el alfabeto latino), las teclas 106 a whatever no. Al contrario; cada fabricante define los teclazos (que terminan siendo un vil número para el sistema operativo) como se les da la regalada gana. En Windows esto no es un problema: los teclados vienen con un CD que configura todo para el usuario; pero para nosotros Linuxeros es “a ver cómo le hacen”.

No me costó encontrar con la solución (contrario a lo algunos piensan, soy muy bueno buscando cuando lo que busco de hecho me importa). La bronca fue llevarla a cabo; no es difícil, nada más es bastante talachudo.

Las páginas que más me ayudaron fueron Logitech Cordless Desktop LX700 en Living with Linux, y HOWTO Use Multimedia Keys en el Gentoo Wiki, aunque aquí pondré un resumen.

La idea es sencilla: por cada teclazo, el teclado envía al sistema un número. Aquí hay dos sopas: que el sistema operativo reconozca el número, o que no. Si sí lo reconoce, se lo pasa a X, que lo interpreta como otro número, y de nuevo puede ocurrir que X reconozca este nuevo número, o que no. Si lo reconoce, otra vez hay de dos sopas: que lo reconozca bien (donde “bien” está definido como “lo que yo quiero que reconozca”), o que lo reconozca mal.

Para todas las posiblidades en donde algo puede salir mal, hay modo de corregirlo. La primera es que el kernel no reconozca el teclazo: en tal caso enviará un mensaje (que se puede ver con dmesg o en /var/log/messages), que dice algo de este estilo:

Jan 20 18:24:44 centurion atkbd.c: Unknown key pressed (translated set 2, code 0xbb on isa0060/serio0).
Jan 20 18:24:44 centurion atkbd.c: Use 'setkeycodes e03b <keycode>' to make it known.

Bastante claro, ¿no? Hay que correr setkeycodes como dice el mensaje, y asignarle un keycode a la tecla en cuestión. Para ver qué keycodes hay disponibles, uno corre (¡surprise!) getkeycodes:

Plain scancodes xx (hex) versus keycodes (dec)
for 1-83 (0x01-0x53) scancode equals keycode

0x50: 80 81 82 83 99 0 86 87
0x58: 88 117 0 0 95 183 184 185
0x60: 0 0 0 0 0 0 0 0
0x68: 0 0 0 0 0 0 0 0
0x70: 93 0 0 89 0 0 85 91
0x78: 90 92 0 94 0 124 121 0

Escaped scancodes e0 xx (hex)

e0 00: 0 0 0 0 0 0 0 0
e0 08: 0 0 0 0 0 0 0 0
e0 10: 165 230 231 232 233 0 234 0
e0 18: 235 163 0 0 96 97 236 237
e0 20: 113 140 164 238 166 239 200 0
e0 28: 0 0 255 0 0 0 114 201
e0 30: 115 202 150 0 0 98 255 99
e0 38: 100 0 0 203 0 204 0 205
e0 40: 0 0 206 207 0 119 119 102
e0 48: 103 104 0 105 112 106 118 107
e0 50: 108 109 110 111 0 0 0 0
e0 58: 0 208 0 125 126 127 116 142
e0 60: 0 0 0 143 0 217 156 173
e0 68: 128 159 158 157 155 226 0 112
e0 70: 0 0 0 0 0 0 0 0
e0 78: 0 0 0 0 0 0 0 0

Los ceros muestran keycodes disponibles.

Así que con todas las teclas multimedia de mi teclado (que como pueden ver en la foto son un chingo), tuve que estar como taradito picándolas y viendo en mis logs qué número tenía que pasarle a setkeycodes. Ese es el primer paso; superado eso, el kernel ya reconoce a todas las teclas. Ahora sólo hay que hacer que X las reconozca, y que las reconozca bien.

Para esto uno corre xev, y presiona la tecla que uno quiere que X reconozca. El programa escupe algo como:

KeyPress event, serial 26, synthetic NO, window 0x4000001,
root 0xb5, subw 0x0, time 3304354, (464,-439), root:(655,339),
state 0x10, keycode 169 (keysym 0x1008ff8b, XF86ZoomIn), same_screen YES,
XLookupString gives 0 bytes:
XmbLookupString gives 0 bytes:
XFilterEvent returns: False

La línea que nos interesa es la tercera: ahí nos dice qué keycode genera la tecla (que no necesariamente es el mismo que el que pasamos a setkeycodes), y además que keysym tiene asignado. Si no tiene ningún keysim asignado, dirá que tiene el 0x0. Uno debe ver en primer lugar si tiene keysim asignado, y si sí tiene ver que sea el “correcto” (o sea, el que uno quiere). Los keysyms están definidos en /usr/lib/X11/XKeysymDB, y ya hay bastantes para teclas multimedia.

Para que la tecla con keycode 164 (por ejemplo), se le asigne el keysym “XF86AudioStop” (que Rhythmbox utiliza para hacer stop), uno le pasa:

keycode 164 = XF86AudioStop

a xmodmap. Esto puede hacerse con la opción -e, o usando un archivo; vean la página de xmodmap si les interesa. Y hay que hacer eso para todas las teclas. Eso me llevó un rato.

Para automatizar el proceso, hice un script que define las keycodes y lo aventé en /etc/init.d, para que se llame antes de que inicie X. Los comandos para xmodmap los puse en un archivo .Xmodmap en mi $HOME, y configuré gconf para que los cargue automágicamente al iniciar mi sesión:

Configuración de gconf

Configuración de gconf

Después de todo eso, lo que hemos conseguido es que a las teclas las vean el kernel y X; pero aún no hemos asignado nada interesante a dichas teclas. Para eso yo usé dos cosas: los shortcuts de GNOME (en el menú Desktop/Preferences/Keyboard Shortcurs), y los keybindings de Metacity (configurables en gconf usando las llaves /apps/metacity/global_keybindings).

Fue un desmadre. Pero quedó muy chido; la bronca es que entre GNOME y Metacity no me permiten asignar todas las teclas que tengo. Usando las teclas multimedia controlo Rhythmbox sin problemas (y sin que tenga que tener el foco en la aplicación), y también el volumen. También tengo un montón de aplicaciones que las lanzo con las teclas multimedia: Gaim, Nautilus, The GIMP, Firefox y Evolution. Pero varias teclas que ya están bien definidas, no sirven: por ejemplo, tengo teclas de “Back”, “Forward”, “Stop” y “Refresh” para controlar el navegador; pero Firefox decide ignorarlas. Y la verdad no uso tanto esos comandos, pero sería chido que Firefox les hiciera caso. Y tengo en total seis teclas todavía que me servirían para lanzar aplicaciones: la bronca es que Metacity sólo tiene 10 run_command personalizables, y ya ocupé todos.

Pero a pesar de esas limitaciones, está muy chido. Especialmente el poder controlar Rhythmbox desde cualquiera de mis nueve escritorios, así como el volumen.

Imprimir entrada Imprimir entrada

Monica Dean

Tengo un desmadre de proporciones épicas.

Además de estar armando mi máquina, estoy rearmando mi máquina vieja para que se la quede mi mamá, y la que ella tiene actualmente se la pueda llevar a la UAM a su cubículo. Todo eso involucra un montón de cables, discos duros, CDs, y dando la vuelta en medio de todo un dongle Wi-Fi USB que me prestó Enrique (una pequeña maravilla, por cierto).

Harto porque no termino, me puse a ver el último capítulo de Lost (The Hunting Party), que bajé hace unos días pero por todos mis relajos de hardware no había podido ver. Y en ese capítulo vi a una actriz que no puedo creer lo bella que es: Monica Dean.

Monica Dean

Monica Dean

Guau. Se me hace bellísima, y no he podido encontrar nada de información suya en la red.

Gran aliviane a los ojos.

Actualización: Juan, que tiene más paciencia que yo para estas cosas, me acaba de decir que el nombre de la bella francesa (ahora sé que es francesa) es Monica Barladeanu.

Imprimir entrada Imprimir entrada

La vida a los 64 (bits)

Centurion (mi nueva máquina AMD 64, dual core) lleva viva unos dos días, después de no pocos problemas.

El primero fue bastante torpe de mi parte: debí conectar el procesador a la placa madre, la tarjeta de video y la memoria, un teclado, y prenderla para ver si todo respondía como debía responder: básicamente ver si podía entrar al BIOS. Pero nooooo, creyendo yo que esto es como Disneylandia, conecté todo y encendí la compu, esperando que todo funcionase. En lugar de eso, se apagó a los siete segundos, aproximadamente.

Las placas madre MSI desde hace años incluyen un sistema de autodiagnóstico que funciona muy bien: son cuatro leds que se prenden en 16 distintas configuraciones, dependiendo de qué prueba esté realizando el sistema. Mi placa madre se moría justo cuando probaba la memoria; el manual dice que si la memoria está mal o mal colocada, la máquina se apagará, y exactamente el mismo error ocurría cuando prendía la máquina sin memoria. Por supuesto traté de colocar mi pastilla de 1 Gb de memoria en cualquiera de las cuatro ranuras disponibles, pero fallaba igual. Desconecté todo de la placa madre (pero la dejé puesta en el gabinete), y siguió fallando igual.

Supuse que era la memoria. Es raro que falle una memoria nuevecita (especialmente una Kingston), pero no es imposible. Esperé a que Enrique regresara a su casa para que probáramos la memoria en su placa madre, y ahí funcionó. Eso quería decir que la placa madre estaba mal, que el procesador estaba mal (por ejemplo que hubiera doblado las patitas al colocarlo), o que alguna conexión con el gabinete estuviera haciendo algo raro.

De regreso en mi casa saqué la placa madre del gabinete, saqué la fuente de poder del gabinete, desconecté todo de la placa madre (incluyendo los conectores a leds y botones del gabinete), y sólo dejé un cablecito con botón que Enrique me prestó que me permitía prender y apagar la placa madre sin necesidad de gabinete.

Y por fin jaló.

Pero cuando regresé todo al gabinete, falló igual. Dejando la placa madre en el gabinete le quité de nuevo todos los conectores de leds y botones, y volví a usar el cablecito de Enrique. Volvió a funcionar.

La cosa estaba rara, pero entonces conecté sólo el botón de encendido del gabinete a la placa madre, y volvió a fallar. Así que, créanlo o no, era el maldito botón. Desarmé el gabinete (o mejor dicho, el coso del gabinete con el botón), y vi que lo que ocurría era que cuando prendía la PC, el botón se quedaba pegado; entonces se apagaba a los siete segundos (aproximadamente), que es como debe de funcionar si se mantiene apretado el botón de encendido, por cierto. Que estuviera pasando por la prueba de memoria en ese preciso momento era sólo casualidad.

Traté de reparar el botoncito, pero resultó imposible; así que cercené el cable que Enrique me prestó, y le cambié el botón de encendido a mi placa madre. De ahí casi todo fue miel sobre hojuelas, y dejé la máquina compilando cosas a las cinco de la mañana.

No puedo decir mucho respecto al sistema: restablecí mi viejo $HOME, y entonces todo se ve más o menos igual (de hecho más feo; no he puesto ningún tema agradable). Es rapidísima; un kernel se compila en dos minutos, cuatro con módulos (ocho si se me olvida especificar que tengo dos procesadores). Puedo estar compilando a la mamá de Superman, y no se siente en el escritorio; y no he podido llenar los procesadores al 100%.

Lo triste: Rhythmbox no funciona (y no veo nada en bugzilla), y hay cosas que sencillamente no están para amd64 (como OpenOffice: y yo que me moría por compilarlo aquí para ver cuánto tardaba en terminar). No hay flash para amd64; si lo quiero tengo que usar la versión binaria de Firefox compilada para 32 bits, y no he querido hacerlo (en parte porque realmente no uso mucho flash, y de hecho es chido no tener que soportarlo todo el tiempo).

Pero todo lo que uso (excepto Rhythmbox) funciona: básicamente GNOME, XEmacs, Firefox (sin flash por ahora), y MPlayer (aunque sin codecs de Windows). Y sigo compilando cosas.

Necesito cables-Y para la fuente de poder: la placa madre utiliza una entrada directamente (para PCI-Express), y mi NVidia 6800GS utiliza 2 entradas 2 (si trato de iniciar X sin conectarla, el módulo del kernel de nvidia protesta y me dice que necesita más jugo para funcionar); eso me deja con un único conector disponible, que ahorita está enchufado a mi disco duro IDE de 80 Gb… por lo que no tengo DVD o quemadora.

Pero todo se ve muy chido; hoy voy por teclado y ratón nuevos, y el próximo mes compraré mi disco duro S-ATA 2 de 160 Gb (y ni quiero pensar en el desmadre de pasar todo ahí). En este momento estoy bajando el demo para Linux de Quake IV, porque ninguno de mis programas que usan 3D he podido compilarlos (básicamente Celestia y Flight Gear Flight Sim; tengo que ver qué onda con eso).

Imprimir entrada Imprimir entrada

Ortografía y gramática

En Slashdot acaba de poner una entrada CmdrTaco acerca de el formato para los artículos que aceptan ahí. En algún punto, dice claramente que ortografía y gramática son realmente secundarios para él al momento de publicar una historia.

(Lo cual es obvio; hasta yo que entiendo inglés empíricamente me doy cuenta de las garrafadas gramaticales que se cometen en las historias de Slashdot).

Yo sigo una política similar al aceptar comentarios en mi blog; la gente se está tomando la molestia de leerme e incluso de dejarme una nota expresando su opinión, así que se me haría muy pedante de mi parte el ponerme a corregirles la ortografía y gramática.

Sin embargo, en las historias que yo publico, sí trato de usar gramática y ortografía correctas, y de hecho si encuentro un error en entradas anteriores suelo corregirlo. Soy estudiante universitario (de la UNAM además); creo que es mi mínima responsabilidad.

A mis alumnos en la Facultad de Ciencias (cuando daba clases) siempre les dije que era de las cosas que debían distinguirnos a los universitarios; debemos ser capaces de escribir correctamente. No digo que todo mundo deba tener el don de una redacción fluida y entretenida; pero sí al menos debemos saber construir enunciados, conjugar verbos y (mi mínimo indispensable) escribir sin faltas de ortografía.

Por supuesto es una utopía: la mayor parte de la gente escribe con las patas. Y me podría seguir aquí con mi cantaleta de que es culpa de los últimos gobiernos por descuidar la educación pública, porque ahí van la gran mayoría de los niños mexicanos a aprender a leer y escribir en primaria, y si hay fallas de origen se hace cada vez más difícil corregirlos. Digo, yo fui a escuela primaria pública (a mucho orgullo), y mi maestra (Teresita) me enseñó la regla de los acentos y otras más como “eme-pe/eme-be”, y nunca se me han olvidado.

Sé que las máquinas ahora ayudan mucho, con correctores de ortografía y cosas por el estilo; pero el saber escribir (y por supuesto, quiero decir el saber escribir bien) no es algo fácil. Si alguien no lee, o lee sólo el Semanal de camioneros, está muy cabrón que escriba bien. Y por supuesto, para escribir bien también hay que hablar bien; si alguien habla usando “haiga” y “dijistes”, y además no lee, no va a tener punto de referencia para saber que esas dos palabras están mal. Creo que ni siquiera existen.

Justamente por eso es que creo que los universitarios debemos hacer un esfuerzo extra y tratar de escribir bien. Eventualmente hay que conseguir que todos los niños de las primarias públicas terminen el sexto año sabiendo leer y escribir correctamente; pero para eso hay que generar cambios políticos y sociales y otras cosas que no tienen ya nada que ver con esta entrada. Pero los estudiantes universitarios tenemos los medios y deberíamos tener la disposición de corregir los errores en nuestra formación para al menos escribir correctamente.

Imprimir entrada Imprimir entrada

Centurion

El seis de enero (día de reyes), Enrique me dijo el ultimátum: iba a Centel a comprar cosas, y si yo quería piezas era en ese momento o nunca. Así que le dije que me comprara mi procesador, mi memoria y un gabinete.

Habla mucho de cómo estuvo el fin del semestre que ni siquiera fui a recoger mis nuevos juguetes hasta el jueves 12. También tuvo que ver que un procesador sin placa madre y sin tarjeta de video no me servía de mucho, más que para girar el ventilador y hacer ¡yay!

Hoy por fin fuimos al centro por la placa madre y la tarjeta de video. La cantidad de dinero que he gastado en esta nueva máquina es obscena, y me falta aún. Lo que llevo sin embargo ya es usable (aunque tengo que usar un disco duro de mi máquina actual, porque no encontré un S-ATA 2 de 160 Gb), y estoy en el proceso de armarla. Lo que llevo es:

  • AMD Athlon 64 X2 3800+
    AMD Athlon 64 X2 3800+

    AMD Athlon 64 X2 3800+

    No hay mucho qué decir de esta chingaderita; es dual-core y jala a 64 bits. No lo he corrido, pero espero que lo haga rapidísimo. Me impresionó el tamaño del procesador; cabe en la palma de mi mano:

    Procesador

    Procesador
  • MSI K8N SLI
    MSI K8N SLI

    MSI K8N SLI

    La placa madre es un poco menos poderosa de la que originalmente quería. De hecho, eso no es totalmente cierto; es igual de poderosa, sólo no tan expandible: sólo tiene 4 puertos S-ATA 2 (no tiene otros 4 S-ATA 1), y cosas por el estilo. Pero está bien chida. Y por supuesto, es SLI:

    SLI ready

    SLI ready
  • XFX GeForce 6800GS
    XFX GeForce 6800GS

    XFX GeForce 6800GS

    Sí compré una 6800 al final, pero no la GT: era demasiado cara. Me compré en cambio una 6800GS, overclocked edition; me juraron que es un pelito más lenta que la GT… y yo quiero creerles. Como sea, eventualemente (como en dos años), compraré una segunda 6800GS y haré uso del SLI.

    La tarjeta se ve bien mamona:

    Tarjeta de video

    Tarjeta de video
  • Memoria Kingston
    Memoria Kingston

    Memoria Kingston

    Aquí no debería que decir nada; es memoria. La bronca es que Enrique compró el giga en una sola pastilla, no en dos. Así que olvídense de dual-channel, al menos hasta que compre otra pastilla de un giga. Pero bueno, al menos me da el pretexto de comprar pronto ese otro giga.

  • Gabinete Cooler Master Centurion
    Cooler Master Centurion

    Cooler Master Centurion

    En el gabinete confié en Enrique para que escogiera el modelo, yo sólo pedí que fuera negro. Y resultó ser super chido. El gabinete está poca madre; tiene 3 ventiladores incluidos: el de la fuente de poder (que se va a quemar en algún momento, es de 350 Watts), uno adelante común y corriente, y uno atrás de 5 1/4″:

    Ventiladorsote

    Ventiladorsote

    Además está bien macizo, y se ve bastante chingón.

Ahora sólo tengo que armar todo. Sólo que me da una hueva. Lo que sí, es que ya tengo nombre para la máquina; y aprovechando que soy fan de Battlestar Galactica, esta nueva máquina se llamará Centurion.

Imprimir entrada Imprimir entrada

BloodRayne

BloodRayne es un juego de video. Nunca lo he jugado, no me interesa jugarlo, y por ello dudo mucho llegarlo a jugar.

BloodRayne es una película basada en el juego de video. No sé si la vayan a pasar en México; pero aún si la pasan, dudo verla, porque no me interesa en lo más mínimo.

BloodRayne es también la última película que revisa The Filthy Critic. Buen Dios; qué cagada crítica. Se ve además que le encantó a Filthy el hacerla; en su calificación (un dedo, por supuesto) el comentario es “Uwe Boll, you Magnificent Bastard!” (Uwe Boll es el director), y la crítica termina con “One Finger for the Uwe Boll’s latest crapterpiece. And I can’t wait for the next.”

Muy divertido.

Imprimir entrada Imprimir entrada

El proyecto final de Arquitectura

Ayer tuve mi último examen de Análisis de Algoritmos, el correspondiente a la tarea 3 de Análisis de Algoritmos (en negritas, porque tengo que escribir acerca de ella, del examen y de la materia en general).

Al terminar le hablé a Alejandro, que estaba recluido en su casa (creo que sin bañarse) desde el viernes, y él me dijo que prefería estar en su casa chambeando. Dado que él fue el head developer por defecto del proyecto, presumí que nuestro deber era ir a apoyar; así que agarré a Alexander y fuimos a casa de Alejandro, llamándole a Iván y diciéndole que su misión si decidía aceptarla era ir también.

Lo que siguió fueron las veinte horas más pesadas que he tenido en el IIMAS, y ciertamente están en el top five de mi vida.

Estuvimos en casa de Alejandro con la firme idea de no salir hasta que saliera el proyecto o hasta que tuviéramos que ir al IIMAS a entregarlo, lo que ocurriese primero.

Varios obstáculos se interpusieron en el camino: primero, la chingadera no cabía. La Xilinx Spartan-3E que teníamos era el modelo más chafa (bueno, el segundo más chafa) de esa compañía, y nuestro proyecto era muy complejo: entonces las compuertas no alcanzaban. Los inges (principalmente Alejandro) estuvieron haciendo maromas con el código VHDL para optimizar todo lo optimizable, y viendo qué podían quitar.

Después, la FPU ya estaba, jalaba en el ModelSim, pero no servía cuando la quemábamos en la tarjeta. Tenía que ver con la frecuencia a la que jalaba la tarjeta, que era como el doble de lo que aguantaba el FPU… o algo así.

Y por último, cada quemada de todo el CPU nos tomaba cerca de 20 minutos… lo cual nos mataba el ritmo, porque no podíamos hacer nada mientras estaba compilando y quemando el CPU a la tarjeta.

Cerca de las 3 de la mañana, un gran pesimismo comenzó a apoderarse de nosotros: la cosa no quería quedar, y comenzamos a pensar en un plan B. En el peor de los casos, teníamos smiley para presentar.

Y entonces, a las 7:30 de la mañana, cada quién haciendo lo que podía con su parte (yo estaba terminando la documentación), todos madreados y ya sin muchas esperanzas, Alejandro de repente nos dijo “¡miren!”.

Y miramos.

Mandelbrot

Mandelbrot

Haciendo uso de todos los trucos del universo, y optimizando todo lo optimizable, el CPU cupo y funcionó en la tarjeta. Literalmente ocupamos todo el espacio de la tarjeta: incluso usamos una opción que tiene el XST de Xilins para utilizar los Block RAMs no utilizados en el proyecto como compuertas lógicas extras.

Uso de la tarjeta

Uso de la tarjeta

Ya de ahí todo fue de bajada; terminamos todo lo que había que terminar, y nos tomamos la foto del triunfo:

El triunfo

El triunfo

Lo chido de esa foto, es que de verdad estábamos eufóricos: el pinche procesador nos había costado un huevo y la mitad del otro, y ya casi habíamos perdido la esperanza cuando por fin funcionó.

Terminamos todo el procesador. Sólo excluimos las instrucciones lógicas (and, or, xor, shl y shr), porque no cabían. Era trivial implementarlas (las operaciones están soportadas a nivel de VHDL, y Xilinx para variar sí implementó esa parte del estándar VHDL); pero no teníamos ya compuertas. Nos quedaban como dos ORs. Y un AND.

Después fue preparar la presentación (que ya fue sencillo teniendo todo), nos fuimos al IIMAS, y fuimos el primer equipo en presentar su proyecto. Fue una presentación muy padre: fuimos el único equipo que hizo ensamblador y simulador, y pudimos enseñarle a Savage dos fractales y nuestro smiley. Además, de verdad estábamos emocionados con nuestro micro, porque nos había costado un chingo. Savage incluso nos felicitó; yo ni podía creerlo.

Ya después, cada quién fue a dormir a su casa.

No sé qué calificación vaya a tener al final en esta materia; en los exámenes me fue mal. Pero creo que no importa; a este proyecto le echamos todas las ganas del universo, y la verdad nos quedó muy padre.

Aunque yo le pondría 10 a mi equipo.

Imprimir entrada Imprimir entrada

Smiley

El trabajo en nuestro procesador para Arquitectura sigue y sigue. Los inges trabajan día y noche para poder sintetizar (así se le dice) el código VHDL en lo que sea que se quema en la tarjeta Xilinx.

Nuestro micro (cuando esté) podrá hacer cosas bastante interesantes. Pero aunque sigue incompleto, los inges han ido implementando cada vez más instrucciones, hasta que por fin fue capaz de hacer esto:

Smiley

Smiley

En la imagen (que no tomé yo) también se alcanza a ver la tarjeta que estamos usando.

No parece mucho, pero el programa en ensamblador que genera eso ya no es trivial. Para poder dibujar toda la carita necesitamos saltos (para los fors), saltos condicionales (para ifs), y dado que sólo tenemos cuatro registros enteros, necesitamos apuntadores (poder escribir y leer datos teniendo sólo la dirección de memoria). No ha sido nada fácil.

Si les interesa, el código del smiley está aquí. Viendo la cantidad de números mágicos que estaban apareciendo en nuestros programas, también añadimos constantes. Son iguales que las variables, sólo que de hecho no generan código máquina (se convierten en literales antes de generarlo), y por supuesto no pueden aparecer del lado derecho de un mov.

Imprimir entrada Imprimir entrada

Julia

Teniendo ya Mandelbrot, era trivial hacer Julia. Pero para hacerlo más interesante, el programa en ensamblador cambia la constante de Julia por una \Delta, y vuelve a dibujar el fractal. Esto resulta en una “animación” (entre comillas porque mi simulador tarda unos siete segundos en dibujar todo el “monitor”), que me dieron ganas de mostrar en el blog.

Para esto, utilicé la opción que tienen los GdkPixbufs de salvarse a archivos gráficos, y modifiqué el simulador para que lo haga si el usuario lo invoca con un parámetro en la línea de comando. En el camino, arreglé todas las broncas de sincronización que tenía el simulador (el ciclo del simulador es un hilo de ejecución (thread) independiente de gtk_main()), y de una vez limpié todo mi uso de Gdk. Quedó mucho más bonito.

Para generar automáticamente las 325 imágenes de la animación, hice un hack para que el simulador guarde una copia de la imagen cada vez que se ejecuta la instrucción shl (shift left), porque esa instrucción no se usa en el programa de Mandelbrot o Julia. El hack es necesario porque el simulador sólo guarda la imagen cuando entra en un ciclo infinito que no hace nada, que es como “oficialmente” acaban los programas correctos en nuestro micro. El programa de Julia no tiene ciclo infinito que no haga nada; tiene un ciclo infinito que dibuja Julia en cada iteración, y no iba a generar las 325 imágenes a pie.

La animación quedó bonita:

Julia

Julia

Los inges siguen avanzando con el micro. Or so they say.

Imprimir entrada Imprimir entrada

Si X entonces Y, si no Z

Con Alejandro en nuestro proyecto de Arquitectura:

Yo: ¿Entonces VHDL no permite if‘s anidados ni elsif‘s?
Alejandro: No, la bronca es que cuando hacemos

if (pin = ‘0’) then
        do shit
else
        esto no quiere decir que pin es ‘1’, sólo no es ‘0’
end if;

Yo: Y es por eso que no estudié en Ingeniería.

De donde yo vengo, los bits valen cero o uno. Y ya.

Imprimir entrada Imprimir entrada

Fin de semestre

Sólo he escrito entradas de Arquitectura de Computadoras últimamente, porque ha sido mi coco este semestre (no es que sea difícil; no lo es… es sólo que esta materia tiene todos los elementos por los cuales acabé en la Facultad de Ciencias y no en la de Ingeniería). Pero eso no quiere decir que no tenga un fin de semestre completito.

Mañana son las reposiciones de Lenguajes de Programación. La materia ha sido muy frustante, básicamente por el ayudante. Tengo un historial añejo de pelearme con ayudantes. El resultado es que no sé qué he sacado en mis exámenes; sé que no he reprobado ninguno, y que (creo) en ninguno tengo menos de ocho. Pero no sé exactamente qué calificaciones tengo, además de que el antes mencionado ayudante no ha entregado las calificaciones de los últimos dos exámenes que hicimos. Entonces no sé si tengo 10 de calificación… y quiero 10, así que ante la duda (si no nos entregan calificaciones antes), tendré que hacer reposiciones.

El lunes tengo examen de Análisis de Algoritmos. Ha sido sin duda mi mejor materia, incluido un 6 idiota que tuve en un examen, especialmente por la tarea 3, de la cual hablaré (espero) al fin del semestre. El punto es que no me preocupa demasiado el examen; creo que estoy en condiciones suficientemente buenas para pasarlo bien.

El martes es el día que entregamos nuestro micro en Arquitectura de Computadoras. Creo que sí acabamos a tiempo, y creo que va a quedar muy padre ese proyecto. Cómo carajo se va a ver reflejado eso en mi calificación, no tengo idea.

Y por último el miércoles tengo mi último examen de Autómatas y Lenguajes Formales. Exceptuando un 7.2 y un 8.5 en dos de las ocho tareas, tengo 10 o más de 9.5 en todo lo demás (incluido el primer y hasta ahora único examen). Pero este segundo examen es el 40% de la calificación, así que más vale que lo saque bien.

Independientemente de que es fin de semestre completito, el cansancio ya comienza a ser evidente. Es la primera vez que en diciembre no descansé nada (estuve yendo al IIMAS diario o trabajando desde mi casa en cosas de Arquitectura y Algoritmos), y además ya comienzo a hartarme. Pero falta menos de una semana para que este semestre acabe.

Y mañana sale el nuevo capítulo de Battlestar Galactica.

Imprimir entrada Imprimir entrada

Comentarios

En mi correo electrónico de la Facultad de Ciencias (canek@ciencias.unam.mx), parece haber broncas para recibir correos. Como la UNAM está de vacaciones hasta el jueves (al menos), es poco probable que estos problemas sean resueltos pronto.

Esto se traduce en que las notificaciones de nuevos comentarios para moderar no me están llegando, y por lo tanto sus comentarios pueden tardar en aparecer uno o dos días (en general apruebo los comentarios de forma casi inmediata, porque estoy conectado casi todo el día). Si su comentario no aparece de forma rápida, tengan un poco de paciencia por favor.

En ese mismo canal, creo que es bueno que les recuerde que yo modero todos los comentarios que aparecen en mi blog. Inicialmente lo hice por el SPAM, pero ahora lo hago por ciertos comentarios que he recibido. En general, les pido que se abstengan de tratar de publicar los siguientes comentarios:

  • Insultos de cualquier tipo por el sólo hecho de insultar. No es porque sea mojigato y me molesten las groserías: yo digo un chingo de groserías. Es sólo que ciertos niños (y no me cabe la menor duda de que son niños) no sé porqué les parece divertido poner groserías sólo por el hecho de ponerlas.
  • Spoilers. A menos que sea en una entrada que ya tenga una advertencia contra spoilers, se me hace mala onda ponerlos sin darle una advertencia al lector. Además, suelen ser comentarios parecidos a los que hacen los niños que ponen groserías (del tipo “el príncipe mestizo es fulano de tal… ja ja ja”)… lo cual me hace pensar que son los mismos niños.
  • Propuestas de negocios; del estilo de “vendo capítulos de Robotech”. Si quieren lucrar con algo ilegal yo pienso que tienen todo el derecho de intentarlo, e incluso les deseo suerte y ojalá la ley no los agarre. Sólo no lo van a hacer en mi blog.
  • Porras al América, y en general a cualquier equipo que no sean los Pumas. Cada quién tiene todo el derecho de irle al equipo que se le de su regalada gana… pero este es mi blog, y aquí no habrá porras para ningún equipo que no sean los Pumas. Y de hecho, a menos que sea una porra muy original, tampoco creo aprobar ninguna porra a los Pumas.

Si no les importa, por supuesto pueden intentar publicar comentarios como los que les acabo de pedir que no publiquen. Sólo les recuerdo que yo los modero todos, así que no va a aparecer ningún comentario que yo no quiera. Y me quedo con un log de la IP y la hora en que se hicieron los comentarios. De todos los comentarios, aparezcan publicados o no.

Y aprovecho para agradecer a todos los que se toman un poco de su tiempo para leer mi blog y publicar comentarios que aportan algo a las cosas que aquí se discuten. De verdad agradezco todas las contribuciones sinceras.

Imprimir entrada Imprimir entrada

WordPress 2.0

Al final no pude resistirme y cambié a WordPress 2.0.

Exceptuando algunas adecuaciones que tuve que hacerle al filtro de HTML (¿porqué carajo quieren filtarme a mí si quiero usar <div> personalizados?), y cosillas por el estilo, todo quedó como me gusta.

La nueva versión administrativa está muy padre; lamentablemente no está toda en español como a mí me gusta. Pero sólo la veo yo, así que tendrá que esperar a (al menos) que acabe el semestre.

Imprimir entrada Imprimir entrada

WordPress 2.0

Y acabo de hacer otro respaldo de mi blog. Digo “otro”, porque tengo como 20… todos en abulafia.

(Lo cual, siendo estrictos, los descalifica como respaldos; un respaldo por definición es off-site, si no cuando abulafia explote no me sirven de nada).

La razón del respaldo es que acaba de salir WordPress 2.0. Ahora; no hace mucho que configuré mi nuevo tema (con todo en español como a mí me gusta), y que puse cosas como el plugin de LaTeX… no estoy seguro de qué tan bien funcionen todas esas cosas en la versión 2.0, y no estoy de humor (o con tiempo) de arreglarlas si fallan.

Así que probablemente me espere un poco para actualizar; y mientras empiezo a reparar la base de datos, porque acabo de revisar y parece que está combinando UTF-8 e ISO-8859-1… lo cual siempre da broncas.

Imprimir entrada Imprimir entrada