Azúcar Metropolitana

Yo estoy en Ciudad Universitaria desde los dieciséis años: el CCH Sur es técnicamente parte de la Ciudad Universitaria. Eso es básicamente la mitad de mi vida.

Sin embargo, al primer campus universitario que fui (o al menos el primero que yo recuerdo), fue la unidad Iztapalapa de la Universidad Autónoma Metropolitana, porque mi mamá hizo ahí su licenciatura y después regresó a dar clases y hacer investigación. Todavía recuerdo el día que me descalabré ahí, siendo un niño.

Dado que mi madre ahí trabaja y ahí estudió, he ido bastantes veces a la UAM Iztapalapa; me conozco el camino de ida y regreso bastante bien, y estoy medianamente familiarizado con el campus. Pero nunca en mi vida había ido a algo relacionado con mi vida académica; había ido a cosas relacionadas con la vida académica de mi madre, pero no con la mía.

Hoy Bernardo Ábrego dio una plática de Geometría Combinatoria en el Departamento de Matemáticas de la UAM Iztapalapa, y yo fui. Después fuimos a comer (yo pedí un T-Bon… no un T-Bone, un T-Bon… estaba bueno) y nos quedamos platicando hasta cerca de las seis. Bastante agradable la cosa.

Pero lo que quería platicar es que estando en la plática, me fui a servir café y vi el azúcar que estaba en cubitos:

Azúcar Metropolitana

Azúcar Metropolitana

Y entonces recordé: cuando mi mamá me llevaba a la UAM cuando era niño, me encantaba comerme esos cubitos de azúcar. Se me hacían súper chidos, y no podía creer que siguiera habiendo. Uno de los doctores me dijo que según él, cubitos de azúcar siempre había habido en la metropolitana… que a veces se acababa el papel, los gises, los lápices… pero que cubitos de azúcar siempre había.

Fue un recuerdo de mi infancia que regresó de golpe. Muy, muy chido.

Imprimir entrada Imprimir entrada

Puntos amarrados

(Hasta hoy, bueno, ayer, me di cuenta de que ahora sí estoy siendo publicado en Planeta GNOME Hispano; un saludo a todos mis nuevos lectores).

Por fin terminé la refactorización (por decirle de algún modo) de Geom. Sí terminé reescribiendo bastantes cosas; en particular, Geom ahora sigue completamente un patrón Model-View-Controller, donde todas las operaciones interesantes se realizan en el modelo, y todo lo relacionado a presentación está en la vista.

Eso significó meter aún más herencia al diseño; pero si se me permite, quedó muy bonito. También ya está básicamente toda la infraestructura para propiedades de objetos (cambiarles individualmente color, ancho de línea, tamaño de los puntos, etc.), y para salvar y abrir archivos usando un formato XML. No está funcionando todavía porque necesito implementar un desmantelamiento de los objetos geométricos usando el orden parcial que se genera dadas las relaciones de qué objeto domina a cuál (o cuales). Y además necesito eso para mi tesis.

Que también es otra cosa de la que quería hablar; voy a dejar de programar en esto unos cuantos días, mientras termino el borrador del artículo que estoy coescribiendo y además cuando regrese probablemente me meta más a CCC que al programa: me están comenzando a pegar seriamente algunas limitaciones del canvas, y Sven se ve que está ocupado con otras cosas. El fin de semana (si tengo tiempo) probablemente ponga un repositorio para que la gente pueda bajar el código fuente y jugar con Geom; creo que ya está listo para que otra gente lo vea y (si así lo desean) me echen una mano.

Además de la refactorización, hay varias cosas nuevas funcionando: para empezar, cada objeto se resalta cuando el ratón pasa sobre él. Sé que no suena terriblemente emocionante, pero tuve que hacerlo afuera de CCC, por las limitaciones de la biblioteca inicialmente, pero creo que terminaré haciéndolo así en la versión final: es sencillamente más fácil tener todo el control de qué ocurre en el canvas. Con esto puedo restringir puntos a objetos como círculos, segmentos o polígonos, y construir cosas más interesantes que las que ya tenía. También hay líneas (conceptualmente infinitas), aunque me están dando algunas broncas. El canvas se puede desplazar haciendo click con el botón de enmedio del ratón (como en el Gimp), si bien tampoco funciona perfectamente.

Ahorita los objetos se actualizan como si las relaciones entre ellos formaran un árbol (se actualiza el objeto “raíz”; después sus hijos, después los hijos de sus hijos, etc.), pero es sólo temporal. Realmente necesito implementar con cuidado el manejo del orden parcial entre objetos, no sólo para actualizar arbitrariamente, sino para poder salvar de forma eficiente (y correcta).

Y encima de eso están las cosas que tengo que hacerle a CCC: el rectángulo que dibujo cuando selecciono objetos no se borra perfectamente; el resaltado de objetos no funciona siempre; hay un bug en AMD64 cuando se limpian líneas, etc., etc. Pero eso será hasta después de que termine el borrador de mi artículo.

Nueva versión de Geom

Nueva versión de Geom

También hay un screencast de la nueva versión; son casi 8 megas, pero tiene comentario del director (gracias a Tomboy, y con faltas de ortografía porque lo hice en inglés y sin guión preparado).

Y pues eso es todo; me voy a dormir que mañana tengo bastantes cosas que hacer.

(Para los lectores del Planeta: aquí están las entradas relacionadas con Geom que tal vez no hayan visto:

Por si quieren ver las motivaciones de esto y algunas ideas en el diseño.)

Imprimir entrada Imprimir entrada

With a great power…

Uno de mis lectores, con respecto a mi entrada del test Which Super Villain are you?, me preguntó si había puesto antes en el blog un test similar pero de superhéroes. Le dije que no, porque realmente no lo recuerdo, pero fui al mismo sitio y ahí está el test Which Superheroe are you? Los resultados fueron mucho más agradables:

Your results: You are Spider-Man.

You are Spider-Man

You are Spider-Man

You are intelligent, witty, a bit geeky and have great power and responsibility.

Spider-Man

Spider-Man

Click here to take the Superhero Personality Quiz

(Lo desconcertante es que después de Spider-Man sea Supergirl… debe ser el pelo largo).

Imprimir entrada Imprimir entrada

Rocky Balboa

Desde que se estrenó el 12, quería ir a ver Rocky Balboa, pero no fui el viernes temiendo unas colas espantosas. Entonces fui hoy (bueno, ayer ya ahorita) a la función de las 22:45.

De todas formas hubo una cola espantosa; pero conseguí mi lugar favorito (cuarta fila, enmedio), y casi no hice cola. Se aplican las advertencias de spoilers normales.

Rocky Balboa

Rocky Balboa

Ya lo había mencionado, pero el Filthy Critic cuando criticó The Departed, le dedicó (literalmente) dos párrafos a esa película, y después otros seis párrafos a mentar madres porque vio el trailer de Rocky Balboa.

Yo tenía ganas de verla por dos razones: la primera, que es una película de Rocky. La segunda, que sale Milo Ventimiglia. Rocky es de mis películas favoritas, pero (y sé que varios me acusarán de hereje) mi favorita es Rocky II: la escena donde Adrian despierta de su coma (¿cómo no va a ser fabulosa una película donde la reina entra en coma?) y le dice a Rocky “Win!” es ante mis ojos insuperable. La tercera parte es decente (y sale Mr. T), y la cuarta ya de plano fue mala, si bien lo realmente desagradable es lo baratamente pro gringa que es. La quinta hagamos de cuenta que no ocurrió, por favor.

Milo Ventimiglia es Jess en las Gilmore Girls, papel al que lamentablemente creo que no regresará por estarla haciendo de superhéroe en Heroes; pero de cualquier forma el chavo me cae muy bien, y además lo primero que pensé cuando lo vi actuar de “niño malo” en las Gilmore era que el tipo hacía el papel como si fuera un Rocky chiquito. Muchas expresiones faciales incluso son idénticas, así que me pareció perfecto para el papel del hijo de Rocky.

Supongo que ya todo mundo sabe de qué trata la película: los comentaristas de un programa deportivo hacen una “simulación” de cómo sería una pelea entre Rocky y el actual campeón de pesos pesado, y resulta que el Rocky virtual gana. Eso y las ganas de Rocky de demostrar que todavía tiene algo que enseñar dentro de su viejo cuerpo hacen que se organice un circo para una pelea de exhibición entre él y el campeón.

Voy a hacer esto rápido: Rocky pierde. Obviamente; pero Stallone (que como bien lo dijo el Filthy Critic, aunque a mí no me ofenda tanto, realmente es de él la película) consigue vender el conjunto de lugares comunes y pequeños guiños, regalitos y fan service a los fans de la serie para dar el mensaje (algo torpe y balbuceante; justo como el habla de Rocky) de que la cosa no es tanto ganar, sino intentarlo y mostrar al mundo que la mitad del asunto es la actitud con el que uno se sube al ring.

O algo así.

No importa realmente: esta es una auténtica película de Rocky. No como la cuarta (que era propaganda) o la quinta (que era… no me queda muy claro qué era… además de mala). Y además se muestran cosas que uno como fan tal vez extrañaba: cómo la gente de Philadelphia adoran a su ex campeón de boxeo; cómo Rocky (y por tanto supongo que el mismo Stallone) quiere a su ciudad; la innegable simpatía del personaje (aquí están de nuevo el sentido del humor llano y sincero del boxeador), y lo que se supone es el trademark del Semental italiano: su determinación inquebrantable.

Encima de todo eso, los viejitos que regresan a hacer de nuevo sus papeles, y los jóvenes que se integran a una serie de películas legendaria, es obvio que se divierten como enanos. Más los viejitos: Burt Young es encantador y fabuloso en su papel de un Paulie más viejo y más amargado que antes, y Tony Burton tiene básicamente una única escena (sale en algunas más, pero esta es la importante): en pocas palabras le dice a Rocky al empezar el entrenamiento que está viejo y con artitris, así que se pueden olvidar de velocidad o agilidad; entonces que hay que concentrarse en fuerza bruta… que todo golpe que le de Rocky al campeón debe hacer que le duela hasta a sus antepasados.

Y esa es la otra cosa que vale la pena mencionar: Stallone se ve condenadamente bien para tener sesenta años. Se nota ahí el lavadero, y no tiene casi nada de grasa. Y tiene unos brazos todavía espectaculares.

Pero además se mueve todavía bastante bien: no sé en cuántas tomas habrán hecho la pelea (o el entrenamiento), pero ciertamente se ve entero.

¿Es un churro? Indudablemente. Ni siquiera vayan a pensar por un momento que no: es un churro hecho y derecho. Pero es un churro muy bien hecho, y que lleva en él un cariño y cuidado muy sinceros. Es un buen fin para la serie… porque por dios espero que a nadie se le vaya a ocurrir jamás hacer otra.

Pero este es un buen fin. Rocky da una última pelea y muestra que el dicho de que “más sabe el diablo por viejo” tiene mucho de cierto, y cierran de forma mucho más digna la saga.

Le está yendo bastante bien a la película (más si consideramos que costó relativamente poco), y en general los críticos y los espectadores la están recibiendo cálidamente. Está bien; es una manera decente de despedirnos de Rocky “El Semental Italiano” Balboa.

Imprimir entrada Imprimir entrada

Trackback SPAM

La situación del SPAM en mi blog se había vuelto insostenible… de nuevo. En estos días que dejé un rato más o menos largo sin aprobar comentarios, vi que se apilaba un montón de SPAM.

Al principio no entendía de dónde carajos venía, porque tengo mi Captcha! y en general ha funcionado bien. Después de un rato investigando me di cuenta que era del trackback, la opción que tiene WordPress para agregar un comentario cuando parece que algún otro blog liga al mío. Así que desactivé eso y aparentemente se acabó el problema de SPAM.

La bronca es que ahora cuando alguien ligue a mi blog, yo no me voy a enterar. No es terriblemente grave, pero sí me gustaba que eso fuera automático. Así que si alguien quiere ligar alguna entrada desde su blog al mío, si pueden por favor mándenme un mensaje para que yo me entere.

Imprimir entrada Imprimir entrada

Jugo

Mi madre se fue a Acapulco unos días, y no se llevó su carro. En este tipo de situaciones generalmente me pide que saqué de vez en cuando su carro para que le de el sol… al jardín. Así que aproveché y me lo llevé a CU hoy.

De repente Susi me llama y me dice que la alarma de mi carro (el Tsuru) se activó, y que está haciendo escándalo. La alarma de mi carro es particularmente quisquillosa, y apagarla suele ser todo un reto, así que regresé a mi casa para en contrar a mi carro con la batería muerta completamente. Sin nada de jugo.

Tomé la oportunidad y compré cables pasa corriente. Desde hace mucho debí haberlo hecho, sólo que no había tenido problemas con la batería en bastante tiempo; pero hoy por fin lo hice y le di un jump start a mi batería usando el carro de mi madre.

De carros no sé realmente mucho. Sé cuando algo “suena” mal, y puedo (sin ningún problema) cambiar llantas y pasar corriente. También sé medirle los niveles; pero un mono manco y tuerto puede medirle los niveles.

Pero fuera de eso, siempre llevo mi carro al taller.

Imprimir entrada Imprimir entrada

Age of Apocalypse

Hice el quiz Which Super Villain are you? El resultado fue ligeramente desconcertante:

Your results: You are Apocalypse.

You are Apocalypse

You are Apocalypse

You believe in survival of the fittest and you believe that you are the fittest.

Apocalypse

Apocalypse

Click here to take the “Which Super Villain am I?” quiz…

En general me daría risa; pero por alguna razón me sacó de onda. Creo que es que supuse que sería Luthor; pero tener la greña larga debe ser perjudicial para esa opción.

Como sea, el que “sea” Apocalypse en un 47% debe querer decir que realmente no soy villano. Y hay que tomar en cuenta que En Sabah Nur siempre ha sido alguien que ha luchado por los derechos e intereses de su gente.

(Si bien de una forma particularmente sicótica y violenta).

Chale. Yo quería ser Magneto.

Imprimir entrada Imprimir entrada

Ventanas flotantes

Resulta que la nueva versión de Beryl tiene una opción para poner las ventanas “flotando” en el cubo. Eso significa que cuando uno gira el cubo, las ventanas se separan de él dependiendo de qué posición tengan unas sobre otras: la ventana con el foco es la más separada, y la que más al fondo esté es la más cercana.

Es completamente inútil, pero se ve bastante chido.

Ventanas flotantes

Ventanas flotantes

Y además el cubo ya gira con el botón medio del ratón. Yipi.

Imprimir entrada Imprimir entrada

Crank

Ayer, aprovechando que era miércoles 2 × indio fui al cine y vi Crank. Se aplican las advertencias de spoilers normales.

Crank

Crank

Mierda. Qué buena película de acción. Creo que es mi película de acción favorita del 2006 (no importa que la haya visto en el 2007).

La verdad no creí que fuera más que otro churrito de acción; elegí verla un 90% por Jason Statham (que el tipo se me hace fabuloso), y 10% por Amy Smart (que me gusta mucho). Pero resultó ser una película bastante bien hecha, que no cae en el sinsentido de creer que “acción” son grandes explosiones (de hecho no hay ni una explosión), y muy inteligente y divertida, si bien es completamente irreal y exagerada.

Statham es Chev Cehlios, un matón que despierta para descubrir que le inyectaron un “coctel chino sintético” que lo matará en una hora a menos que mantenga un flujo de adrenalina continuo en su sistema. Entonces el tipo tiene que vengarse de los que le hicieron eso, despedirse de su novia, y partir al otro lado con tantito estilo, todo mientras se trata de mantener excitado de todas las formas posibles.

Y eso hace. Toda la película. La película es un vehículo para el ego de Statham, pero buen dios le funciona: Chelios nunca pierde el estilo ni entra en desesperación. Sabe perfectamente que se lo chingaron y sólo hará su mejor intento para vengarse.

Amy Smart aparece en calzones o enseñándolos la mayor parte del tiempo, así que su participación es buena. Pero además su personaje de “¡OMG! ¡Mi novio mata gente…! Cool” es bastante simpático, y da entrada a un par de escenas particularmente divertidas.

Pero además me gusta mucho que al final el tipo sí se muere. Hubiera sido muy decepcionante que al final milagrosamente apareciera un antídoto que lo curara, después de la destrucción que causa a lo largo y ancho de Los Ángeles.

Está muy buena esta película; muy divertida, con acción el 103% del tiempo, y con una trama que sorprendentemente está muy bien hecha, si bien tiene un par de hoyos por ahí. Pero se le perdonan, porque incluso sin trama yo creo que hubiera seguido siendo divertida.

La recomiendo ampliamente.

Imprimir entrada Imprimir entrada

Más avances en Geom

En mi “tiempo libre” de estar trabajando en el artículo (dícese, cuando ya estaba harto de programar cómo calcular tangentes a dos círculos arbitrarios para hacer diagramas bonitos) también le moví a cosas a Geom, con el resultado de que ahorita no funciona, pero cuando lo haga va a estar mucho más avanzado: funcionará (espero) seleccionar construcciones en grupo, salvar y leer archivos en su propio formato XML, y separar bien y bonito el modelo de las construcciones geométricas de su presentación en el canvas.

Además (y medio inevitablemente) seguí investigando cosas de CCC, porque al fin y al cabo lo necesito. Después de pruebas extenuantes, vi que el bug al redibujar segmentos de línea en CCC sólo ocurre en AMD64, no en x86. ¿Por qué? No sé; de hecho no tengo idea, pero Sven no tiene acceso a una máquina AMD64, así que recaerá en mis hombros el tener que resolver eso.

El formato XML que originalmente elegí para guardar los archivos de Geom se veía más o menos así:

<geom>
    <point id="p1" x="10.0" y="15.5" />
</geom>

Mi razonamiento era que la información que inherentemente tendría el documento no es muy estructurada, pero Juan me dio un ejemplo que me hizo reconsiderarlo:

<point size="3.0" color="#000000">
  <coordx>200.0</coordx>
  <coordy>200.0</coordy>
</point>

Y es que se me había olvidado que en algún punto el programa permitirá editar cosas como el color de un punto, su tamaño, el ancho de la línea de un círculo, etc. Y entonces sí conviene representar la presentación en atributos y el contenido en elementos. También envolví cada construcción en una etiqueta <construct/>, porque así me permite mapear la jerarquía de herencia que estoy usando en GObject, y me hizo darme cuanta que el atributo id de cada construcción será fundamental, cuando al incio había creído que sólo la usaría para ponerles nombres bonitos a los puntos.

Los ids son fundamentales porque por diseño la estructura que toman las construcciones geométricas no es un árbol, sino una gráfica. Si fuera un árbol representarlo en XML sería de risa; como es una gráfica necesito referencias para poder hacer ciclos, de ahí la importancia de los ids.

Otra consecuencia es que voy a necesitar utilizar órdenes parciales para poder guardar y leer bien los archivos XML; necesito primero guardar los elementos maximales, después los menores y así hasta los minimales. Y el mismo camino para leer, obviamente.

Como sea, este si es un post en medio de la obra; no tengo screencast o screenshot para mostrar.

Todavía.

Imprimir entrada Imprimir entrada

El artículo

Después de pasarme un par de días como loco programando, me pasé los siguientes días como loco trabajando en lo que será (espero) un artículo para publicación, resultado de lo que hicimos en Guanajuato.

Eso involucró estar escribiendo en inglés (que después de lo que me dijeron los del TOEFL me siento mucho más confiando en hacerlo), y estar haciendo diagramas en PStricks; como mi programa todavía no está, tuve que generarlos usando un lenguaje de programación común y corriente. Por suerte ahora sí desempolvé mi Python y los hice en ese lenguaje, que creo sí es mucho mejor para este tipo de cosas que Java.

Aunque me decepcionó bastante; la inferencia de tipos en general no funcionó bonito: jala mucho mejor en ML. A lo mejor estoy haciendo algo mal, pero lo dudo; tuve que usar str() y float() un montón. Según yo era mucho más inteligente Python para inferir tipos.

Se ve bastante bien lo que llevo (Urrutia ya lo revisó), si bien aún le falta. Además quiero cooperar en otro de los artículos que saldrá de lo de Guanajuato, e investigar problemas relacionados del primero: creo que puedo agregar algo novedoso acerca de órdenes parciales.

Y en paralelo de todo eso debo hacer mi tesis. Pequeño detalle.

Como sea, perdón por no moderar comentarios o escribir nada en estos días, pero es que regresé de lleno a trabajar después de unas vacaciones bastante relajadoras.

Imprimir entrada Imprimir entrada

El cheque

Por andar clavado programando, se me había olvidado mencionarlo: Google me envió mi primer cheque de AdSense:

El cheque

El cheque

Yay!

La verdad es que es bien poquito… pero es por escribir en mi blog, que lo hago por gusto. Así que está bien que al menos saque para los chicles.

Imprimir entrada Imprimir entrada

Avances en Geom

Los últimos 2 días estuve concentrado en programar; ni siquiera moderé comentarios del blog. Avancé bastante, y Geom comienza a tomar forma de algo similar a lo que he tenido en mente desde que inicié el proyecto.

Geom

Geom

También hay un screencast (en Flash de nuevo; lo siento). Aguas; este mide 2.7 megas (aunque en esta época de banda ancha no creo que importe demasiado).

Creo que lo básico de la infraestructura ya está ahí; ahora me estoy peleando (obviamente) con cómo manejar la interfaz. Al hacer el screencast, por ejemplo, fue dolorosamente evidente que necesito poder seleccionar por grupo (ahora selecciono punto por punto). No tengo idea de cómo hacer eso.

(Bueno, sí tengo idea, sólo no sé si sea la correcta).

Y faltan muchas cosas. Comenzando con que con cada cosa de CCC que uso, no es raro que aparezca algo que no funciona. Por ejemplo, por alguna razón CCC no detecta eventos del teclado; y eso es bastante grave dado que tenía pensado usar el teclado para facilitar muchas acciones. Ya reporté el bug en bugzilla. Otra: por alguna razón, las líneas en CCC no se estaban borrando al moverlas; ahorita le estoy dando la vuelta con un método que funciona, pero que es lentísimo: comienza a sentirse más y más lento el programa cuando uno mueve muchas líneas a la vez.

Pero a Geom en sí mismo le falta bastantito:

  • Seleccionar en grupo (ya lo dije)
  • Implementar undo y redo
  • Implementar cortar, copiar, pegar (cortar es sencillo)
  • Guardar y abrir archivos; ya me cansé de repetir los ejemplos cada vez que abro geom
  • Definir un formato en XML para guardar archivos
  • Permitir seleccionar las herramientas sin que el número de puntos esté seleccionado; ahorita si trato de crear un círculo con tres puntos sin tener dichos puntos seleccionados, el programa sencillamente se niega
  • Poner una página y SVN para el programa; podría usar ayuda de más gente
  • Conquistar el mundo

Falta un buen. Pero dado que llevo dos semanas (y sólo unas cuantas horas al día) haciendo esto, creo que no va mal.

Y ahora sí, puedo regresar a cosas como moderar los comentarios de mi blog.

Imprimir entrada Imprimir entrada

Tengo un enorme micrófono, y haré uso de él

Estaba leyendo mis páginas de todos los días, y cuando finalmente llegué a Planet GNOME me encontré con esto. Para los que les de flojera seguir ligas, esto es lo que Sven publicó en su blog (y que por tanto apareció en Planet GNOME):

Canek Peláez Valdés is creating a nice geometry application (english) based upon the CCC canvas library. There’s even a really interesting flash demo (english) that demonstrates some of the ideas for the application.

He’s blogging a lot right now, which might be a pretty nice addition for Planet GNOME Hispano.

Lo primero que pensé fue “cool, mi nombre apareció en Planet GNOME”… hasta que fui a Planet GNOME Hispano y vi que mi nombre está en la lista de miembros (se ve ahí, luego luego a la derecha).

Aunque por alguna razón la liga que tienen ahí no es a mi blog… pero bueno.

Como sea; un saludo a todos los lectores del Planeta GNOME Hispano (si es que mi blog sí está siendo republicado ahí), y para los administradores del Planeta: creé una categoría GNOME en mi blog, porque publico mucho en mi blog de muchas cosas que tal vez no sea del interés de sus lectores.

Imprimir entrada Imprimir entrada

Glade

Teniendo la funcionalidad mínima del canvas que necesito, y un prototipo funcionando, me puse a hacer la interfaz del programa de geometría. No me termina de quedar claro exactamente cómo la quiero, pero una primera idea es esto (que ya está funcionando):

Interfaz de Geom

Interface de Geom

Tampoco es permanente el nombre de “Geom”; pero la verdad me está gustando.

La idea hasta ahora es simple: si se selecciona la “herramienta” de puntos, uno puede poner puntos a lo bestia. Si se selecciona la de recta (por ejemplo), una de dos: o están seleccionados dos puntos (y automáticamente se crea la recta), o el usuario pone el punto o puntos necesarios para que se cree. Etc.

La flecha es para seleccionar puntos libres y moverlos. Por ahora ni me cruza por la cabeza el mover construcciones no libres… y tampoco me queda 100% claro qué sea libre.

La interfaz la hice en Glade3, que nunca había usado (sólo había usado Glade2). Está bien bonito; y quitaron la generación de código automática, lo que me forzó a utilizar libglade. Pero jaló de pelos, si bien el programa para hacer las interfaces tiene sus problemas… por decir lo menos: tuve que editar varias veces el archivo XML a pie. Pero no me quejo; me está gustando cómo va quedando esto.

Falta mucho; pero hay progreso.

Imprimir entrada Imprimir entrada

Git

Cuando Percy le envía a Ron la carta donde le dice que se aleje de Harry, en Harry Potter y la Orden del Fénix, Ron rompe la carta y dice que Percy es el “world’s biggest git”. Git (como lo define Wiktionary) es

  1. (British slang) A contemptible person.

    Elissa is a right git.

  2. (British slang) A stupid or unpleasant person.

    Jacko is a git.

Bueno. De eso no voy a hablar ahora.

De lo que voy a hablar es de Git, el programa iniciado por Linus Torvalds para reemplazar a BitKeeper como sistema de control de versiones.

Yo no tengo mucha experiencia con sistemas de control de versiones; he usado CVS y tengo todos mis documentos en Subversion desde hace ya algunos años. Fuera de eso, sólo de vez en cuando he utilizado otros sistemas como Bazaar para bajar algún proyecto que me interesara cuando lo estaban desarrollando.

Hay distintos desarrolladores que defienden uno u otro sistema de control de versiones; algunos al punto del fanatismo. Todos los repositorios de GNOME se cambiaron de CVS a Subversion en estos días (después de un intento fallido hace seis meses), y eso desató toda una discusión por parte de la gente que no le gusta Subversion.

Como sea, yo no me he metido en eso. Subversion me funciona a mí para mantener mis documentos bajo control de versiones, pero no me he puesto a ver si hay algo mejor o más rápido o que proteja a los gatitos indefensos.

Pero para mi programa de geometría necesito un canvas, y lo único que se ve que será usable en un tiempo razonable (para GNOME, obviamente) es el Criawips/CriaCanvas, o CCC.

Sven Herzberg es el lead developer del proyecto (creo que es el único de hecho), y cuando descubrí su canvas la única página que había disponible daba como repositorio uno en Subversion. De ahí bajé el código y comencé a usarlo, hasta que me di cuenta que no tenía forma de manipular el orden en que se dibujan los elementos en el canvas; eso es malo, porque en un programa como el que yo quiero hacer los puntos deben estar “hasta arriba” (top layer) siempre.

Así que escribí una implementación rápida, y se la mandé por correo a Sven, preguntándole si se podría incluir. Me respondió diciéndome que el repositorio en Subversion estaba deprecado (el nuevo está en Git), y dándome unos consejos para mejorar la implementación que había hecho.

Así que bajé la versión que había en el repositorio en Git, reescribí mi implementación y se la mandé a Sven. Él la incluyó en el repositorio, y me pidió que escribiera un demo de lo que había hecho para un programa incluido con CCC que muestra pequeños ejemplos de lo que ofrece la biblioteca. Después de escribir mi prototipo hice el demo, que de hecho me hizo descubrir dos bugs en CCC; uno en lo que yo había contribuido, y otro en otra parte del sistema.

Total que ya le he enviado como siete parches a Sven, y estoy contribuyendo regularmente con el proyecto; me conviene, porque lo necesito para mi programa.

Pero el punto es que he tenido que usar Git bastante, y debo admitir que está bastante chido. Sobre todo porque yo suelo desarrollar en mi desktop y en mi laptop; entonces hago un pull del repositorio de Sven en mi desktop, y después hago un pull de mi desktop a mi laptop. Si se desincronizan puedo hacer (de forma bastante sencilla) un merge entre mi desktop y mi laptop; y además tengo un branch para mis propios cambios (que también puedo sincronizar entre mi laptop y desktop), con lo cual puedo generar parches fáciles de enviar para Sven.

En pocas palabras; Git está poca madre para desarrollo distribuido. Después de leer durante años cómo Linus trabaja para mantener el kernel, puedo entender perfectamente por qué desarrolló así el programa. Lo chistoso es que funcione igual de bien para el kernel (cientos de megas de código fuente, literalmente miles de programadores), y para un bibliotequita como CCC (dos megas de código fuente, un puñado de programadores).

Ahora: no sé si Git sea una solución “mejor” que Subversion. En particular, es bastante complejo (más que Subversion sin duda), consecuencia obvia de que es (creo) más poderoso. También come disco duro como si fuera gratis: de los dos megas que usa CCC, mi copia del repositorio genera casi doce. Y no es terriblemente intuitivo, especialmente si uno viene de sistemas como CVS.

Pero está muy, muy bonito. Sí tiene cosas bastante interesantes.

No voy a pasar mis documentos de Subversion a Git (Subversion es perfecto para ese caso de uso); pero en parte creo que he colaborado de forma tan sencilla con Sven porque Git lo facilita. Eso, y que necesito a CCC para mi programa.

Imprimir entrada Imprimir entrada

Fantastic Four: Rise of the Silver Surfer

Acabo de ver el trailer de Fantastc For: Rise of the Silver Surfer. Se ve poca madre, especialmente el titular Silver Surfer:

Silver Surfer

Silver Surfer

Yo sé que la primera película no fue muy buena (aunque ganó 330 millones de dólares); pero tal vez por las pocas expectativas que tenía, a mí me gustó bastante. Quién sabe; igual y esta segunda parte es mucho mejor que la primera. Al menos eso espero; pero incluso me contentaría con una similar a la primera.

Silver Surfer

Silver Surfer

Por supuesto, que aparezca el Silver Surfer hacía casi obligatorio que lo haga también Galactus, el devorador de mundos. En la Wikipedia dicen que sí aparecerá, y nada más por eso valdría la pena ver la película. Digo, ver a Galactus en pantalla grande puede (del verbo “vamos a ver cómo les sale”) ser fabuloso.

Silver Surfer

Silver Surfer

Vamos a ver cómo sale. A ver si por tener mejores expectativas esta vez resulta que me gusta menos la secuela.

Imprimir entrada Imprimir entrada

Primer prototipo del programa de geometría

Después de estudiar un poco el sistema de tipos de GObject, escribir algo de código, bajar la versión de desarrollo de CCC, corregirle unos bugs que tenía, agregarle funciones que necesitaba, y pelearme con vnc2swf, por fin quedó mi primer prototipo (recalco, prototipo) de mi programa de geometría.

La parte en que me peleé con vnc2swf fue porque un screenshot no refleja realmente nada del prototipo, así que hice un screencast en Flash. Lamento hacerlo en algo que no es libre, pero Istanbul sencillamente me falló (además de que estoy seguro que la mayor parte de mis lectores no tiene los codecs de Ogg Theora), y el otro que había usado que genera GIFs sacaba unas “animaciones” bastante chafas.

Así que les dejó la animación; es sólo un prototipo (repito): me falta mucho para tener lo que realmente busco. Pero hay progreso.

Imaginen un video extremadamente primitivo.

Por cierto, el código JavaScript para controlar la barra de búsqueda de la animación puede matar al Internet Explorer. O al menos eso decía el código.

Actualización: Quité la barra de búsqueda en JavaScript. Sencillamente no funcionaba.

Actualización 2024: Borré la liga, porque desapareció ese video de mis archivos; en mi defensa, era muy mal video y además tenía una resolución como de 300×200.

Imprimir entrada Imprimir entrada

GObject

Comencé a trabajar en mi programa de geometría, pero rápidamente me di cuenta de que, si lo hacía en C tradicional, el diseño iba a ser significativamente distinto de cómo originalmente lo había planeado.

En particular, en Java ya tenía algunas clases para manejar las construcciones geométricas; nada de cómo dibujarlas en pantalla, sólo cómo relacionarlas entre ellas. Y estaba usando herencia mucho, porque es lo correcto hacer aquí.

En C por supuesto no hay herencia, y si me seguía por un camino de estructuras con funciones me iban a alterar bastante las cosas. Nada realmente grave (se puede hacer así también), pero no como yo lo quería originalmente.

Así que me lancé el clavado de por fin aprender a usar GObject, el sistema de tipos (con herencia e interfaces) para C que usa GLib, Gtk+, y por consiguiente GNOME y amiguitos. Nunca lo había querido aprender a usar porque me daba bastante hueva, y no había tenido necesidad realmente.

Está bastante chido. Sí hay un montón de cosas que hay que hacer a pata, un montón de código repetido, y la herencia tiene sus bemoles. Por ejemplo, hay que hacer cast cuando uno quiere ver al objeto como si fuera de una clase más particular, obviamente; pero también uno tiene que hacer cast cuando se quiere ver al objeto como si fuera de una clase más general. O sea, en pocas palabras, se tiene que hacer cast siempre.

Pero funciona, y bastante chido además. Como consecuencia, mi diseño con herencia está básicamente intacto, y además está bastante divertido usar GObject (aunque sin duda es mucho más engorroso que usar un lenguaje OO de verdad). Y claro, no he aprendido bien todo; apenas estoy viendo cómo definir métodos virtuales, y no sé nada aún acerca de cómo definir y usar interfaces con GObject.

Pero está entretenido sin duda alguna.

Imprimir entrada Imprimir entrada