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

La comodidad de usar software libre

Hace ya un rato (casi año y medio) decidí que usaría F-Spot para manejar las fotos que tomo con mi cámara digital. Algunas semanas después por fin me decidí a usar Gallery2 para mi álbum en línea (la otra opción era Coppermine).

En un principio no se llevaban muy bien que digamos; con F-Spot exportaba las fotos a un “VFS folder”, que era una conexión SSH a mi galería en línea, a un directorio especial, y usando la interfaz administrativa de Gallery2 acomodaba las fotos en el álbum o álbumes correspondientes. Y después repetía el engorroso proceso de ponerle título a las fotos (cosa que también hacía en F-Spot, por lo que era hacer dos veces la misma tarea).

Estoy muy orgulloso de que mi galería en línea tenga títulos para todas y cada una de las fotos. Y además es condenadamente útil: si en la caja de búsqueda le pico “fulano”, aparecen todas las fotos de Fulano.

Después de un tiempo, F-Spot o Mono (o ambos) comenzaron a estar medio inestables, y la opción de exportar a un directorio VFS se amoló. Funcionaba para directorios locales, pero no para SSH, así que exportaba a un directorio local, y luego subía las fotos al directorio especial de Gallery2 y repetía desde ahí el proceso anterior.

Lo feo fue cuando dejó de funcionar hasta para directorios locales. Como no podía exportar, tenía que escalar las fotos a pie; de hecho eso es lo más chido de cómo exporta las fotos F-Spot, que las escala como uno quiera (no voy a subir fotos de 7.2 megapixeles a una galería en línea). Y no podía hacerlo con algo como ImageMagick, porque entonces perdía la información EXIF de las fotos (y ahí van cosas como la fecha).

Así que abría las fotos en The Gimp, las escalaba, y las subía. De hueva.

Hace unos días de pura casualidad revisé el exportador de F-Spot para una galería en línea. Al inicio F-Spot no tenía tal cosa, y cuando por fin la tuvo no sólo no funcionaba; no recuerdo exactamente qué pasaba, pero jodía a la misma galería en línea. Así que nunca la usé realmente, y cuando empezó a fallar con la exportación a directorios VFS, supuse que estaría aún peor la exportación a galería en línea.

Pero esta vez que volví a revisarla, aparentemente funcionaba. Así que con las fotos de la fiesta de año nuevo decidí subirlas usando esta opción.

Es una maravilla. Uno crea el álbum en la galería en línea, y después en F-Spot uno selecciona las fotos, le da exportar a galería en línea, elige el álbum, a qué resolución escalara las fotos, y listo. El programa hace absolutamente todo lo demás. Incluso exporta los títulos de las fotos, así que ya nunca más tendré que capturarlos dos veces.

(También hay que dar de alta la galería, para definir el usuario y password de la misma; pero eso se hace una única vez).

Y eso es lo que me gusta del software libre. Al inicio tenía un par de herramientas que más o menos funcionaban; pero hubo gente (un montón de gente) que se puso a trabajar en las fallas o debilidades de ambos programas, y ahora tengo dos herramientas que entre ellas se comunican sin ningún problema y me ahorran bastante trabajo.

E incluso creo que puedo crear el álbum desde F-Spot. Voy a intentar eso la próxima vez que suba fotos. Pero si no funciona, no importa: dentro de poco funcionará.

En el peor de los casos puedo programarlo yo mismo.

Imprimir entrada Imprimir entrada

La fiesta de año nuevo

En mi casa celebramos con bastantes ganas el año nuevo. Siempre ha sido como que la celebración importante del año, y en general siempre hay bastante gente en mi casa el 31 de diciembre.

Esta vez no fue la excepción, pero también tomé fotos; en particular de la comida, porque mi madre hace sus pechugas de pollo rellenas de tocino y queso amarillo con ensalada de manzana sólo una vez al año.

Las pechugas y el espagueti

Las pechugas y el espagueti

Estuvo bastante divertido; nos acostamos a las cinco de la mañana, así que acabamos medio cansados, pero estuvo muy chido.

Imprimir entrada Imprimir entrada

El programa de geometría

Para mi tesis eventualmente voy a necesitar hacer dibujos de entes geométricos que son endemoniadamente engorrosos de hacer a pie en PStricks (por ejemplo, hacer la triangulación de Delaunay de un conjunto de puntos).

Por supuesto tales dibujos terminaré haciéndolos programáticamente; pero sería padre poderlos hacer con un programa interactivo; i.e., en una ventana poner los puntos como se me pegue la gana (con la posibilidad de cambiarles la posición con el ratón, por supuesto), y con un fabuloso click generar la triangulación. O el diagrama de Voronoi. O el casco convexo. O lo que se nos pegue la regalada gana. Y no sólo eso; que también tenga construcciones geométricas obvias, como círculos y polígonos.

Por supuesto, tal programa ya existe (en gran medida); se llama The Geometer’s Sketchpad; pero tiene dos grandes “fallas”: una, sólo corre en Windows (módulo Wine y cosas así). Y dos, es un programa propietario.

A mucha gente esas dos cosas les puede importar un comino; a mí no.

En Linux ha habido varios intentos de hacer un equivalente (en software libre, por supuesto); el más famoso tal vez sea DrGeo. Muchísimo menos famoso es un programa en el que Juan y Omar llevan (literalmente) años trabajando, que más o menos buscaba (o busca) resolver lo que a mí me interesa.

Me dieron ganas de entrarle al problema, y les pregunté que qué onda con su código. Omar me dijo que de plano convenía empezar de cero, porque su primera versión estaba escrita con Gtk+ 1 (y por tanto usa el original GnomeCanvas, que como todo mundo sabe consummatum est), y la segunda versión (en C#, hasta donde yo supe) estaba en pañales.

Lo que ellos querían era mucho más ambicioso a lo que yo busco: tenían contemplado usar Lua como lenguaje de extensión, por ejemplo. A mí me interesa generar código en PStricks para mi tesis; me queda muy claro que ese es mi principal objetivo, así que un lenguaje de extensión ni siquiera me pasa por la mente ahorita. No se descarta nada, pero tengo una lista de prioridades bien definida.

También quiero (o quería; más adelante ahondo) usar Java como lenguaje de programación, y usar Java GNOME (porque ni de loco lo hago en Swing). La decisión de usar Java tiene varias justificaciones: en primer lugar lo conozco mucho mejor que C# (aunque a la hora de la verdad dudo mucho que eso realmente importe). Pero más importante (para al menos), es una decisión política. Con la liberación de Java por parte de Sun, espero ver un montón de aplicaciones escritas en Java proliferando en GNOME, y quiero saltar al vagón. Además de que sinceramente creo que el lenguaje es el adecuado… como sin duda también lo sería C#.

Como sea, mis alegres intenciones se caen ante un problema enorme: no hay bindings de GNOME para Java. Mejor dicho; sí hay, pero las estables apestan (como bien lo han dicho sus propios creadores), y las nuevas (mucho más chidas) están en pañales.

Y no me refiero a que estén verdes: en gran medida no están. Básicamente están implementadas ventanas y una clase de botón. Y ni hablemos de Pango, Cairo (fundamental en lo que yo quiero), y similares.

Además, yo pensaba lanzarme a hacer un lienzo (canvas) sencillito (y lento) que hiciera lo que yo quiero, y después cambiarme al nuevo lienzo que eventualmente aparecerá en Gtk. El problema es que el nuevo lienzo ya está… en pañales también, y sin ser integrado en GNOME. Además de que es versión 0.0.1… ni soñar de bindings para Java (aunque, curiosamente, sí hay para Python y C#).

Así que tengo básicamente dos opciones: hacer el programa en C (como los hombres y mujeres de verdad de antaño), o ayudar extensivamente en los bindings, y hacerlo en Java. No quiero hacerlo en C# por razones políticas, como ya expliqué.

Si tuviera tiempo, tomaría la segunda opción; pero quiero titularme para junio. Así que me lanzaré a hacerlo en C. La idea de usar Java no está para nada descartada; sólo esta primera iteración estará escrita en C. Varios programadores dicen que un proyecto debe ser reescrito al menos una vez; usaré esta iteración para entender bien cómo quiero este programa, cometer errores (inevitables al primer intento) en el diseño, y (lo principal) sacar mi tesis. La generación de código en PStricks es ortogonal a casi todo, según yo; incluso podría exportar a un formato XML, y la generación de código PStricks hacerla de una vez en Java.

En forma paralela (y conforme vaya acostumbrándome a las distintas APIs de CCC y Cairo) ayudaré con los bindings correspondientes, para que la segunda iteración sea posible en primer lugar.

O al menos ese es plan: igual y termino sin hacer mucho por la presión de la tesis. Pero suena interesante, y ni siquiera terriblemente complicado

Imprimir entrada Imprimir entrada

Nuevo tema para mi álbum

Dado que cambié el tema de mi blog, decidí que quería un nuevo tema para mi álbum. O bueno, originalmente quería un nuevo tema para mi álbum.

Lamentablemente, los temas de Gallery2 son bastante más complejos que los de WordPress. También son más poderosos, si somos justos. Así que hay muchos menos, y ninguno de los álbums que encontré satisfacieron mi gusto.

Tiene que ver que el formato del tema Matrix de mi galería me gusta bastante: la barra lateral se me hace útil, y me gusta cómo acomoda los álbums y las fotos. Ningún otro tema tiene un formato que me llame la atención (y varios ocultan o de plano quitan la barra lateral).

Pero encontré que se puede cambiar el “color pack” de un tema; así que elegí uno azulito… que tres personas de forma independiente tuvieron a bien decirme que apestaba. Así que creé uno yo, usando los colores de mi blog.

No sé qué tanto apeste, pero a mí me gusta. También puse AdSense de Google, porque mis logs revelan que es bastante más gente de la que yo creía la que ve mi álbum en línea.

Imprimir entrada Imprimir entrada