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

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Mandelbrot

Hoy acabé la parte de software para nuestro proyecto de Arquitectura de Computadoras. Por supuesto no va a servir de mucho si los inges no acaban el micro, pero me he divertido al menos.

Nuestro micro es bastante sencillo; tiene instrucciones para manejo de memoria, una pilita (en la misma memoria), saltos, un ALU de enteros, y (el chiste), una unidad aritmética de complejos.

La idea era hacer algo nuevo.

La aplicación obvia para nuestro micro es un fractal; sobre todo porque tenemos salida VGA de nuestra tarjeta Spartan-3E, y entonces (mientras los inges se hacen bolas con el código VHDL), yo hice un ensamblador, un desensamblador, un convertidor de código máquina a VHDL, y un emulador. La idea es tener todo el software depurado para que al momento de correr la aplicación en la tarjeta, si algo sale mal, sepamos que de hecho es el código VHDL y no algún error bobo en el software.

El ensamblador lo hice con Yacc y Lex (y sé que no era necesario; sólo era muy sencillo hacerlo así), el desensamblador en Perl (aunque lo pasé a C porque cómo joden los inges con la eficiencia), el convertidor en C, y el emulador también en C, utilizando Gtk+ para emular el monitor. Ya entrados y en el vicio, hice también el programa en ensamblador que dibujara Mandelbrot en la pantalla.

Para que se den una idea, este es un programa en nuestro ensamblador que dibuja una línea vertical justo al centro del monitor (en VGA tenemos 640×480 de resolución):

1: start:    
2:   mov 0, %ebx
3:   mov 7, %ecx
4:   mov 320, %eax
5: for:    
6:   vput  
7:   mov 1, %edx
8:   add %ebx, %edx
9:   mov 480, %edx
10:   sub %edx, %ebx
11:   jz end
12:   jmp for
13: end:    
14:   jmp end

Les queda de tarea descifrarlo. Sólo quiero especificar que el ciclo infinito al final es idea de los inges: parece que la idea de que las cosas terminen les molesta.

Tenemos sólo cuatro registros enteros (%eax, %ebx, %ecx y %edx), y cuatro complejos (iguales, pero “c” en lugar de “e”). Cada complejo tiene una parte real y una imaginaria. No pongo el algoritmo de Mandelbrot porque está bastante más largo (108 líneas de ensamblador; pequeño para todo lo que hace), pero sí les pongo que para graficarlo uno calcula

z_{n+1}=z_{n}^{2}+c

donde z_{0}=0+0i, y c recorre un área que será la que cubra la pantalla.

(Realmente no había razón para ponerles la fórmula; pero ya tengo rato buscando un pretexto para utilizar mi \LaTeX{} renderer).

Mi emulador ya pudo dibujar Mandelbrot, y sin más preámbulo se los presento:

Mandelbrot

Mandelbrot

Si les parece que los colores son demasiado “All the leaves are brown…”, tienen toda la razón. Sólo tenemos 3 bits para representar colores, así que sólo tenemos ocho: negro, azul, verde, rojo, magenta, cyan, amarillo y blanco. Así que la caballada estaba flaca para empezar.

El proyecto está bonito; si lo acabamos lo va a estar más.

Valiant

Ayer además de ver En sus zapatos vi Valiant.

Valiant

Valiant

Muy buena película; lástima que sólo esté doblada aquí en México; me hubiera gustado oír a Ewan McGregor, John Cleese y John Hurt.

La historia es un poco simplona, y la animación no es lo mejor que se haya visto; pero se nota que es inglesa, y al final de cuentas es aliados contra nazis, y eso siempre es divertido. Y que los franceses sean ratones es cagadísimo.

Al final de la película, me enteré de que hay una medalla para animales en el Reino Unido. Es la Dickin Medal, y parece que las palomas mensajeras han sido las que más han recibido. Whatever.

Quitando lo maniqueo y propagandístico de la película, está chida.