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.

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.

Lex

Y resulta que tengo que hacer un ensamblador para mi proyecto final de Arquitectura de computadoras. Un ensamblador no es un compilador. Trato de decirle eso a un montón de gente pero no entienden; un ensamblador es (básicamente) un reemplazo textual de instrucciones en ensamblador a lenguaje de máquina. Puede hacerse bonito; pero excepto transformar literales, cuidar que los jumps vayan a etiquetas definidas, y ver que las instrucciones reciban los parámetros que necesitan, no hace nada interesante.

Es tan trivial la tarea, que no sé si hacerla en Java, Perl o C. E independientemente de qué lenguaje utilice, no sé si usar una herramienta ya hecha (como JavaCC o Lex), o hacerlo a pie.

Como sea, si uso Lex (que nunca he usado) necesito saber cómo funciona, así que me puse a leer su página del manual. Es el manual más mamón que he visto:

The lex utility shall generate C programs to be used in lexical processing of character input, and that can be used as an interface to yacc.

(El énfasis es mío.)

¿Shall? ¿En una página del manual?

Chale.

Arquitectura de Computadoras

Llegué bien contento hoy al IIMAS, y me enteré de que mi examen final de Arquitectura de Computadoras no es el viernes, sino mañana.

Así que estoy pensando seriamente en asumir que sacaré 3 y ponerme a trabajar en el proyecto final.

Esta materia sería fabulosa si no hubiera exámenes. Pero que en dos horas me pregunten de multiplexores y de flip flops es algo que nomás no me gusta. Por eso estudié en Ciencias, y no en Ingeniería justamente.

Por suerte es el último examen y el proyecto final al menos se ve divertido. Si acabamos.

Analisis de Algoritmos

Para mi curso de Análisis de Algoritmos tuve que hacer una página con ligas a distintas fuentes de información acerca de (duh) Análisis de Algoritmos.

Como me dio flojera crear un estilo visualmente atractivo para la página, sencillamente la metí en el blog. Está aquí, por si alguien quiere verla.

La verdad no usé todas esas ligas en el semestre, pero sí hice un uso extensivo de la Wikipedia.

Si no les interesan las matemáticas o las ciencias de la computación, las ligas les serán bastante aburridas.

Paro

En clase de Lenguajes de Programación, estudiando alcance dinámico y estático:

Yo: Es que al final todo se reduce al problema del paro.
Iván: Freud tenía razón: todo tiene que ver con el problema del paro.
Yo: Y ni la viagra resuelve el problema del paro.

Gryffindor

Con Juan en el messenger:

Yo: Estaba en la sala común de Gryffindor… digo, del IIMAS, y saludé a unos compañeros. Ellos estaban cerca de la chimenea… digo, del Access Point…
Juan: ¿Leíste las 6 novelas de nuevo?
Yo: No, pero es una buena analogía… de hecho, hay una chava con el pelo rizado, que siempre anda con dos cuates… uno bajito de lentes, y el otro alto y pelirrojo…
Juan: Te cae…
Yo: Me cae… les voy a tomar una foto…

Exámenes y tareas

Tuve un par de semanas algo agitadas.

El jueves 29 de agosto, tuve examen de Arquitectura de Computadoras con el Dr. Savage (neto, no invento). Aspiro a un 5.

La verdad es que me alegra mucho aspirar a un cinco; no es mi fuerte, no me interesa como campo de estudio, y no me iba a poner a estudiar acerca de multiplexores. Así que si saco cinco y con mi equipo hago un buen proyecto final, creo que libraré bien la materia.

El viernes 30 de agosto originalmente entregaría mi tarea 2 de Urrutia, pero la movieron para el lunes 3 de octubre. La tarea la acabé sin mayores complicaciones, y espero que me vaya tan bien como en la primera, en donde saqué 10.

Ese mismo lunes tuve examen de Lenguajes de Programación. El examen fue sencillo, pero estoy teniendo serios conflictos con la forma de calificar del ayudante; necesito hablar con Francisco y ver que no ocurra algo como en la primera tarea, donde casi todo el grupo no sabemos muy bien qué pensó el ayudante acerca de una pregunta, y nos la puso mal a casi todos.

El miércoles tuve que entregar tarea de Autómatas, y ahí estuvo medio raro el asunto. Una pregunta estaba ambigua, y a mí se me hizo fácil decirle a mi equipo que yo hacía dos versiones de la tarea; una por cada interpretación. Entonces ahí me tienen a las 3 de la mañana terminando mi tarea, versión “B”.

Y por último, el jueves tuve examen con Urrutia. El examen estaba sorprendentemente sencillo; pero (a mi juicio) innecesariamente talachudo. ¿Qué valor puede tener sacar el árbol de Huffman de un alfabeto de 21 caracteres? ¿No es idéntico a sacar el árbol de un alfabeto de 7? No creo sacar 10; hay muchos lugares donde me pude equivocar en sumas o algo así, y además no sé cómo me interpreten mi corrida de Dijkstra.

En medio de todo ello, estuvo el seminario de los lunes y miércoles, y uno más que nos insertaron martes, jueves y viernes.

Así que estuve básicamente en chinga todos estos días. Y para acabarla, el jueves comenzaron a salirme estos mensajes en la laptop:

dma_intr: status=0x51 { DriveReady SeekComplete Error }
hda: dma_intr: error=0x40 { UncorrectableError }, LBAsect=87454448, sector=87454368
end_request: I/O error, dev hda, sector 87454368

Muchos de esos. En distintos sectores y bloques. En mi experiencia, eso es un error de hardware en el disco duro, y no puedo darme el lujo de quedarme sin laptop; incluso aunque sólo sean dos semanas de garantía. Pero además, para aplicar la garantía tendría que quitarle Linux (o si no dirán que el error es por Linux), lo que significa hacer un backup y poner Windows, y luego convencerlos de que algo malo ocurre con el disco duro.

El disco duro cuesta alrededor de 1,000 pesos; misma velocidad, mismo tamaño. Y creo que sí estoy dispuesto a pagarlos con tal de no quedarme sin compu. Pero igual y puedo evitarlo; corrí e2fsck diciéndole que marcara los sectores dañados y parece que funcionó: ya no me ha marcado ningún error. La voy a traer así unas semanas; si vuelven a salir errores, tendré que hacer el backup e ir a garantía.

En el departamento de las buenas noticias: nos depositaron la beca, y ahorita no tengo nada que hacer. Aunque en teoría debería comenzar a ver el secuenciador para Arquitectura, pero ya estoy bajando el software de Xilinx para encargarme de ello. Sólo no creo hacerlo hoy.

Access Point

Dos cosas: el IIMAS tiene un Access Point sin llave en su sala de estudio, así que desde ahí escribí la entrada pasada. Está super chido, porque podré conectarme en mis horas libres.

La otra; tomé clase con el Dr. Urrutia.

Wow.

Creo que por mucho será mi materia preferida.

Estudiando

Hoy me sentí estudiante.

Ayer no me conecté en todo el día porque fui a barrer la cartelera aprovechando que era miércoles. Vi:

  • Agua Turbia (Dark Water).
    Dark Water

    Dark Water

    No me gustó; ni me dio miedo, ni la historia se me hizo interesante ni nada. Pero Jennifer Connelly es guapísima y además actúa muy bien.

  • Hotel Rwanda: La Matanza (Hotel Rwanda).
    Hotel Rwanda

    Hotel Rwanda

    Muy buena película. Cagado, porque esa la elegí básicamente porque era la única que me acomodaba los horarios con las dos películas que sí quería ver.

  • Yo Puta.
    Yo Puta

    Yo Puta

    Está bien, supongo. Nada terriblemente revelador o interesante; muy divertida en algunas escenas, bastante barata en otras. Denise Richards es guapísima, pero no enseña nada; y eso que ya lo había hecho en Criaturas Salvajes.

Salí del cine a las 10:40 (después de pagar 85 pesos de estacionamiento), y llegué a dormirme. Estoy haciendo ejercicio desde las 6:00 de la mañana, así que necesito mi sueño.

Ayer la única clase que tuve (y tomó las dos horas el Dr. Pineda) fue Autómatas y Lenguajes Formales. Di la materia el semestre pasado en la Facultad, y además están dando el curso from scratch, así que en lo referente a la exposición no vi nada nuevo. Pero el curso es interesante en que se da por videoconferencia también a Tabasco, y que utiliza muchas ayudas audiovisuales. Tengo que sacar 10 en esa materia; sería humillante que no lo hiciera.

Hoy tuve (de nuevo) Arquitectura, con el Dr. Savage (neto, no lo invento). Muy divertida clase; y saliendo (después de firmar mi solicitud de beca al Conacyt) fui por el libro de la materia, que venden en la Facultad de Ingeniería.

En ese momento comencé a sentirme estudiante por primera vez desde que empezó el semestre. Se sintió muy bien.

Hoy tengo la única clase que no he tenido del semestre; Algoritmos con Urrutia. También es la que más me interesa, por múltiples razones. Creo que puedo salir bien este semestre, aunque hay que ver qué tanta chamba nos dejan.

Y mañana no tengo clases.

Fines de semana

Ayer tuve hora y media de clase. Hoy tuve media; el Dr. Urrutía comienza hasta el jueves, y el Dr. Savage (neto, no estoy inventando) sólo presentó el curso.

Pero además, revisando mi horario, me di cuenta de que el viernes no tengo nada. Así que tengo fines de semana de tres días.

Yipi.

Primer día

Ayer fui con Juan a ver La Isla.

The Island

The Island

Buen churrito de acción; y muy guapa Scarlett Johansson. Pero mi opinión no debe tomarse muy en cuenta; soy fan incondicional de Ewan McGregor.

Hoy fue mi primer día, con una clase de tres horas con Francisco Quiroz. Conozco al tipo desde hace años, pero nunca había tomado clases con él. Buena exposición; entretenida. Lamentablemente no me enteré de nada nuevo; aunque siendo justo Francisco dijo que los que hubiéramos llevado la materia en Ciencias nos aburriríamos.

También ayudó que sólo tuvimos la mitad de la clase por ser primer día. Ahora necesito aceitar mi Haskell y otras nociones que desde hace un rato no he cuidado.

Alumnos copiando

Calificando uno de los proyectos de mis estudiantes, descubrí a dos copiando. Soy (creo) bastante bueno descubriendo quién ha copiado y quién no. Digo, y si no puedo descubrir si alguien copió, quiere decir que lo hizo bien, y entonces merece la calificación; si lo modificó tanto que ya no se reconoce el original, quiere decir que le tuvo que pensar mucho. Y al fin y al cabo ese es el objetivo de las prácticas.

En estos casos lo que generalmente hago es dividir la calificación entre aquellos que copiaron; eso es lo que hice, y les dije que los había cachado copiando (son un chavo y una chava).

Al rato me contestó el chavo indignadísimo, diciendo que él le había pasado su primer proyecto a la chava para que viera cómo se parseaban los XML, y que nunca esperó que ella lo copiara. Me dijo que comprobara el proyecto 2 (el copiado) con su proyecto 1 y que vería que se había basado en ese para hacerlo, y que además la chava no había ni siquiera entregado el uno.

Chequé y era verdad. El chavo entregó el 1, la chava no, y era evidente que el 2 (el de el chavo y la chava), estaba basado en el proyecto 1 del chavo. Así que le puse la calificación completa al chavo, cero a la chava, y le escribí a ella diciéndole que copiar no se me hace terriblemente grave (y no se me hace terriblemente grave; yo lo hice en su momento), pero que hacerlo a espaldas del copiado es básicamente robar.

Yo esperaba una respuesta del estilo de que su perro había sido atropellado y que se arrepentía de hacerlo y que pedía disculpas etc., porque toda la evidencia apunta a que ella copió, y el chavo no tendría porqué ocultar que él sabía que la chava le estaba copiando; el chavo tiene bastantes buenas calificaciones y de hecho no le afectaba en nada a su calificación final el tener 5 en ese proyecto: él mismo reconocía eso.

Así que me sorprendí mucho cuando la chava me contestó indignadísima diciendo que no sabía porqué uno que se hacía llamar su “amigo” la apuñalaba por la espalda y que ella jamás había copiado y que no pensaba empezar ahora, y en general una perorata bastante emocional.

Era evidente que alguien estaba mintiendo, así que hice un análisis bastante detallado de los proyectos, y a esto llegué:

@@ -2,9 +2,9 @@
   * Lee los estados correspondientes al automata
   * @param estado Lista de Nodos que se genera al momento de leer el
   *               archivo XML.
-  * @throws ExcepcionAutomata si los estados no esta bien definidos.
+  * @throws Excepcion si los estados no esta bien definidos.
   */
-public void getEstados(NodeList estado) throws ExcepcionAutomata {
+public void getEstados(NodeList estado) throws Excepcion {
   Estado actual;
   for (int j=0; j < estado .getLength(); j++) {
     if (estado.item(j).getNodeName() == "estado") {
@@ -13,13 +13,13 @@
         if (q0 == null) {
           q0 = actual;
         } else {
-          throw new ExcepcionAutomata ("Estado "+ actual.getNombre()+
+          throw new Excepcion("Estado "+ actual.getNombre()+
                                        " y estado "+q0.getNombre()+
                                        " declarados como iniciales");
         }
       } else {
         if (estados.contains(actual)) {
-          throw new ExcepcionAutomata("Estado "+ actual.getNombre()+
+          throw new Excepcion("Estado "+ actual.getNombre()+
                                       " esta repetido");
         }
         estados.add(actual);

Eso es un diff de un método del proyecto 1 del chavo, y del 2 de la chava. Sólo difieren en el nombre de una excepción: todo lo demás, incluyendo comentarios y cadenas, son idénticos. Ahora, hay como otros seis métodos (sólo en esa clase), que se llaman igual y que tienen diferencias mínimas… y que incluso están declarados en el mismo orden.

Así que le dije a la chava que no sabía si era verdad o no que el chavo estaba consciente de ser copiado o no. Es la palabra del chavo contra la de la chava, y realmente no me interesa tanto. Pero lo que sí es innegable es que la chava copió, así que por favor que no me viniera con que no lo había hecho.

Acabé a las 4:30 de la mañana el análisis y el correo que le envié a la chava, y me puso de bastante mal humor, porque si hay algo que me molesten es que insulten mi inteligencia. Y que me dijera que ella nunca había copiado… por favor.

Por suerte creo que será el último conflicto de este curso; Liliana ya tiene las calificaciones (en Spreadsheet de OpenOffice, en Excel y en PDF), y ya está absolutamente todo. No me falta nada.

A menos que Liliana quiera que haga algo más… pero espero que no necesite nada y que hayamos terminado, bastante bien si puedo decirlo, este curso.

La carta

No he escrito en casi mes y medio.

No ha sido el peor mes y medio de mi vida, pero ciertamente no estará en el top ten. Conacyt me dijo (después de pedirme paciencia), que no me daban la beca por las siguientes razones:

Principalmente se evaluaron cuatro temas en específico: Programa de Posgrado, Historial Académico del Solicitante, Pertinencia del Programa de Estudios Seleccionado y Elementos que Fundamentan la Solicitud. A cada uno de estos temas se les otorgan calificaciones entre los siguientes rangos “muy alta”, “alta”, “media”, “baja” y “muy baja”.

En tu caso para el Programa de Posgrado la calificación fue “muy alta”

Para la calidad del historial académico varió entre “muy alta” para tu historial, “alta” para la relación con tus antecedentes académicos y laborales, “media” para la experiencia del candidato y “baja” para la claridad del candidato en la selección de su Programa de Posgrado.

La pertinencia del programa de estudios seleccionado se calificó como “baja”

Los elementos que fundamentaron tu solicitud se consideraron frágiles “baja”.

El comité recomienda que consideres realizar tu maestría en México.

Pocas veces he estado tan molesto y sintiéndome tan mal en mi vida. Contesté furioso, pidiendo explicaciones de porqué el comité recomendaba que hiciera mi maestría en México, si ya me habían dado la beca en el 2002. Y otros argumentos.

Después de algunos días, me volvieron a contestar diciéndome que lo intentara el año que viene. Ja, dije yo. De ahí fue una búsqueda frenética de contactos para ver qué podía hacer; incluso le escribí directamente a Jaime Parada, el director del Conacyt.

Mónica me hizo el favor de conseguirme el número de René Drúcker, y me pasó el tip de que ella olía algo político en el hecho de que no me dieran la beca. Después de perseguir durante semanas al doctor Drúcker (es un hombre ocupado), por fin me tomó la llamada y me recomendó que no hiciera nada como escribir a los periódicos o meter demandas. “Sencillamente estos pendejos no tienen lana”, me dijo. Parafraseando.

Pero me dijo que no dejara de intentarlo, y me pasó el teléfono de la directora de asignación y operación de becas. Después de perseguir a la licenciada durante varios días (también es una mujer ocupada), me dio cita hace dos semanas.

A esas alturas del partido yo estaba caminando con las axilas. Había entrado en modo ahorro de energía, reduciendo al mínimo todas mis actividades físicas y mentales, y guardando fuerzas para únicamente la resolución de lo de la beca. Por eso no escribí en el blog, por eso casi no hice nada en esas semanas. Mi estado de ánimo estaba en su punto más bajo en años. Tal vez en toda mi vida; sólo ahora hago menos drama que cuando era adolescente.

Fui a la cita con la directora de becas, y ella me mostró mi evaluación. En resumen, no me daban la beca porque en México hay maestrías donde puedo estudiar Ciencias de la Computación. Lo demás realmente son sólo elementos secundarios; el argumento principal (la pertinencia del programa de estudios), es debido a que puedo estudiar una maestría en Ciencias de la Computación en México.

Le pregunté qué podía hacer. “Mete una carta pidiendo que se te evalúe nuevamente”, me dijo. Me recomendó que argumentara porqué aunque hay maestrías de lo mío en México, no me ofrecen lo que me ofrece la Universidad de Waterloo. Me advirtió que probablemente no me darían la beca, pero que tenía derecho a pedir una segunda evaluación. Se portó muy chida conmigo; es su trabajo, pero de cualquier forma lo agradezco.

Preparé esa carta durante dos semanas, y además tuve que poner en práctica el plan B. Hice el examen de admisión al IIMAS; lo cual me puso de muy mal humor: el examen es un fraude. No sé si me acepten (yo digo que sí), pero ciertamente es el plan B, y bastante lejano al A.

Ayer acabé la carta, junto con otras cosas que me ayudan a contra-argumentar las razones del primer comité evaluador de no darme la beca. Hoy la entregué, a las 10:31 AM.

Y ya. No hay nada más que pueda hacer. Agoté todas las posibilidades, toqué en todas las puertas, hice todo lo que estaba a mi alcance. Jamás en mi vida me había esforzado por algo como por esto.

Y no creo que sirva de mucho. La realidad es que el gobierno federal le ha cortado fondos al Conacyt de forma criminal, y que están tratando de dar el menor número de becas. La triste realidad es que probablemente me quede aquí a hacer mi maestría (si el IIMAS me acepta), y que tenga que intentarlo de nuevo en dos años. Esperemos que al menos el Peje ya sea presidente entonces.

En el fondo no debería quejarme. Soy privilegiado; si Conacyt no me da la beca (que es lo más seguro), puedo empezar a trabajar y ganar bien, o puedo hacer mi maestría aquí y becarme (tienen que hacerlo), o un montón de probabilidades más. Sólo se cierra una puerta. La que más quería yo, y la más interesante… pero sólo una puerta.

El plan B es sencillo; de alguna forma mucho más sencillo que el A. Me quedo aquí a hacer una maestría que no creo me cueste demasiado, ahorro el dinero de la beca, salgo con mis cuates, leo, escucho música, voy al cine. Trato de publicar y de ir a cuanto congreso pueda… ahora sí tratando de aumentar mis conocimientos y no sólo de vacaciones. Me busco un asesor perrísimo para mi tesis.

Todo va a salir bien.

También hoy di mi última ayudantía, que era la única otra obligación que tenía. Me faltará calificar alguna práctica, o tareas, pero realmente ya acabé. Y el entregar la carta significó que ya no tengo que preocuparme más al respecto: ya no hay nada más que pueda yo hacer.

Así que retomaré mi blog, subiré las fotos que he tomado que me faltan de subir, reorganizaré mis álbums. Trataré de programar algo para Gnome o para Classpath. Saldré a enamorarme de nuevo de esta ciudad (tengo que ir a la exposición “Faraón”). Viviré.

Y no voy a desanimarme. Porque todo va a salir bien.

La beca

El viernes llegó y como desde las seis de la mañana comencé a monitorear la página del Conacyt. Para las 2:00 nada había pasado, y fui a comer con Juan y Omar.

Al llegar a la Fac, les pedí a Omar y Juan que me dejaran consultar en la máquina del cubículo. Siendo como es la vida, ya estaban ahí los resultados. Y yo no estaba entre los candidatos elegidos.

Omar y Juan se portaron super chidos; fuimos a ver varios episodios de Cowboy Bebop y cuando Omar se fue Juan y yo seguimos viendo Robotech. No dejaron que me deprimiera o solo durante todo el día.

Antes de ir al depa de Juan, fuimos a mi casa y mandé dos correos electrónicos. Uno para Jonathan Buss (mi asesor en Waterloo), y otro a the powers that be en Conacyt. A Jonathan le dije que a) no me daba por vencido, b) pero que tenía que considerar que igual y debía hacer aquí la maestría, y c) que qué posibilidades había de conseguir una posición de Teaching Assistant en Waterloo. A los del Conacyt, que por qué no me habían dado la beca. Quiero las razones académicas y los integrantes del comité académico que decidió no darme la beca. Si no hay razones académicas, entones se va a poner divertido el asunto.

En la noche del viernes (o sea, de madrugada cuando seguir viendo Robotech se volvió vomitivo), me quedé en el depa de Juan, en el cuarto en el que en alguna época vivimos Liliana y yo. Fue lo más cercano que estuve de caer en pánico en todo este tiempo. “Agota todas las posibilidades” me dije. “Sólo agota todas las posibilidades”.

Estoy seguro de que o fue un error, o alguien se está buscando problemas conmigo. No hay posibilidad de que un comité académico decidiera no darme la beca. Sencillamente no es posible: ya me la habían dado antes. Y mi currículum, experiencia, cartas de recomendación y universidad con aceptación aumentaron bastante desde esa vez.

Yo creo que por el hecho de haber recibido la beca antes, pero no haber terminado el trámite, algún tipo de error administrativo ocurrió. O algo por el estilo.

Si no, voy a armar un escándalo. No pueden justificar de ninguna manera que no me den la beca.

El sábado vino Amílcar; por fin regresó de Europa, y fue chido alegrarme de verlo y sentirme bien de que le haya ido bien en su examen. Además es encantador el cabrón, y nos tuvo muertos de la risa contándonos de su viaje.

Me trajo una taza con las inscripciones de la piedra de Rosetta, una cajita musical (manual) que toca La Marsellesa, y un USB key de 256 MB. Lo cual es über cool, aunque no sepa todavía en qué lo voy a usar. Que por cierto hay un bug (o feature) en GNOME 2.10 que no muestra el icono del key hasta que monto otro drive. Ya reporté el bug número 300119, describiendo el problema. A ver si sirve de algo.

USB key en Nautilus

Amílcar además me dijo que, en caso de que las cosas no se resuelvan de manera “pacífica”, podemos meter un amparo, ir a la Comisión de Derechos Humanos, escribir a los periódicos. Aún no quiero hacer nada de eso (espero que no sea necesario), pero fue muy chido que se mostrara tan solidario.

También le hablé a Mónica, y me dijo que se pondrá en contacto con sus contactos. Así que ahí hay otro frente.

Le hablé a la mamá de Enrique; mis cosas ya están aquí, pero se le olvidó traerlas de casa de su hermana. Me dijo que iba a ir por ellas; me dio mucha risa porque se oía bien apenada. Así que al rato le hablo a ver qué onda. Enrique se fue a Manzanillo; por eso no lo vi el viernes, y por eso estoy hablándole a su mamá.

Me impresiona mi reacción. Supongo que hice bien en no suponer en ningún momento que la beca me sería concedida de forma casi tramital. Hay tiempo; tengo hasta Septiembre para llegar a Canadá con una maleta de dinero para pagar mi colegiatura; y hasta ese momento puedo (y debo) seguir intentando por todos los medios el conseguir la beca.

Así que ahora sigue eso. Lo único que me molesta es que quería dejar de preocuparme por el asunto.

Me quieren volver loco

Estuve monitoreando ad nauseaum la página del Conacyt… cuando funcionaba, porque se estaba cayendo cada dos horas o algo así.

Por fin, masticándome los codos, le hablé al Conacyt para preguntar quihubo… me dijeron que dejara de chingar hasta las seis, que para esa hora ya estaría el bisne…

Falta media hora… Carajo.

Cerca de las cuatro de la tarde, tiraron el sitio en Web Sphere y regresaron a la versión anterior. Algo habrá salido mal en la actualización, supongo. Eso o el sitio es intermitente.

Falta media hora, y yo sigo aquí, masticando mis coditos.

Maistro 2.0 Service Pack 1.0

Dada mi incapacidad de decidirme a dejar como final lo que ya dije que sería final, voy a empezar a lanzar Service Packs.

Después de calificar los exámenes de mis alumnos, subí las calificaciones a Maistro. Por supuesto, hasta usar el sistema en “producción”, descubrí que faltaban un par de features fundamentales para un curso. Tal vez “fundamentales” sea exagerado; pero sí eran necesarias ciertamente.

Una de ellas son las estadísticas. ¿De qué sirve tener las calificaciones de tus alumnos en una bien organizada base de datos, si no puedes sacar estadísitcas con ella? Las estadísticas son muy sencillas de hacer, además, lo que demuestra que fue un olvido absoluto de mi parte.

Una de las estadísticas es “cuántos presentaron esta parte”. O sea, cuántos alumnos presentaron el examen, o cuántos entregaron una tarea. La idea es poder determinar si el promedio del grupo se ve muy afectado por todos los que no entregan (que obviamente se quedan con cero). Y me acabo de dar cuenta de que no saqué las estadísticas tomando sólo en cuenta a los que sí entregaron. Carajo; otros quince minutos servicepaqueando.

Como sea, de una vez termino, es necesario entonces llevar una columna en la base de datos que diga si tal o cual calificación es cero porque el alumno no tiene muchas luces, o si es cero porque no entregó. Hasta ahí todo bien; la base de datos tiene dicha columna, y en la interfaz se asume como “no entregado” si la casilla con la calificación se deja en blanco en lugar de poner cero.

Pero el problema es que eso sólo aplicaba cuando uno insertaba calificaciones nuevas; cuando uno editaba, el valor por defecto de la casilla era cero. Con un poco de magia de JavaScript y modificando un poquito algunas páginas la cosa quedó, pero sí me llevo un poco más de lo que esperaba.

Ahora tengo que sacar las estadísticas sin alumnos que no entregaron. Chale. Service Pack 2.0 en camino.