Firebug

Dado que uso GNOME, una pregunta válida es por qué no uso Epiphany, el navegador incluido. Para navegar funciona muy bien, es muy rápido (más que Firefox, parece ser el consenso) y además puede utilizar los plugins de Firefox; en particular Flash que gracias a cosas como YouTube se ha vuelto medio indispensable.

La primera razón por la que no uso Epiphany es porque en 64 bits no funciona (o no funcionaba al menos la últma vez que probé) el plugin de Flash; en mi laptop tal vez podría entonces usarlo, pero no en mi máquina grande.

La segunda razón son algunas extensiones de Firefox. La que corrige ortografía está superchida; sé que GNOME incluye corrección ortográfica, pero hasta donde yo me quedé funcionaba con únicamente un idioma a la vez, y yo escribo en inglés y español de forma más o menos regular (especialmente en el navegador; foros, listas de correo que leo con GMail, etc.)

Pero la extensión que se me ha hecho indispensable es Firebug:

Firebug

Firebug

La cosa es una maravilla para cualquiera que tenga que lidiar con cosas de HTML+CSS; no sólo permite entender de dónde viene la definición de cada elemento en un documento (que con la herencia en CSS se puede volver un verdadero desmadre entender qué definición es la que se está usando): además analiza el código HMTL en vivo, en particular después de haber sido modificado por JavaScript.

Lo cual es endemoniadamente útil cuando uno va a una página que muestra un video, pero la liga al video no está en el código fuente HTML de la página, sino escondido en uno de los múltiples archivos .js que incluye el documento.

De hecho Firebug es la primera aplicación, propiamente dicho, que yo haya visto sobre Firefox. Sé que hay muchas otras más (Greasemonkey siendo la más famosa, creo); pero que yo utilice Firebug es la primera.

Si hacen cualquier cosa relacionada con HTML+CSS, o necesitan averiguar qué está haciendo exactamente JavaScript con una página que vean, no duden en instalar Firebug en Firefox. Es de las cosas más útiles que he visto correr sobre un navegador.

Gentoo developers

Como continuación de mi entrada de los problemas en Gentoo, vi este chiste que me pareció fabuloso:

How many gentoo developers does it take to change a light bulb?

Answer: Unknown. It was estimated that a five-member committee of lightbulb maintenance would be the right number. However two of the members resigned and were replaced with two others. After that other members resigned and were not replaced. The remaining group pondered which wattage should be chosen for the replacement lightbulb or if they should outsource lightbulb maintenance to an even bigger group of people who would probably have some knowledge of electric engineering and shopping among them. In the end, nobody bought a new lightbulb even though they promised the matter of darkness would be solved within a few days.

One member of committee justified this by him living on another continent where lightbulbs adhere to an incompatible standard. Half a year later when the lightbulb was still out most of the committee had went AWOL except for one resigned member who sincerely said he was sorry for his inability to fulfil or make any progress towards his grand plan for the lightbulb.

So five (or seven) was not it. Other numbers will be tried shortly after the committee of building maintenance comes to a decision.

Gtk+ program for downloading Apple Trailers

I like to watch the trailers in the Apple trailers site. I like it a lot, but I do not like to watch them in my browser (and with a 32 bit Firefox running in a 64 bit machine is tricky… not impossible, but tricky). So I wrote a little program in PyGtk to select and download to my desktop the latests Apple trailers. Once the trailers are selected the process is automatic, so I can go and watch them later with Totem or wathever player I prefer, and in fullscreen even.

The “program” (it has three Python files) was hastily written, without thinking in any kind of design, and really early in the moring (or really late at night); however it scratches a very particular itch of mine and I hope it’s useful for someone else. You can download it from here, and after decompress it you can run it with python appletrailers.py.

(It’s GPL-3, if somebody cares about it.)

If somebody with more Python experience than me could take a look and make it a little more pretty (that ain’t gonna be difficult), please send patches (or suggestions) to canek@ciencias.unam.mx.

Apple Trailers

Apple Trailers

(A mis lectores en español; una disculpa por la entrada en inglés, pero chicle y pega y el “programita” le interesa a alguien más, y en inglés es más fácil que me encuentren con Google).

(Update: fixed a crash with the Kung-Fu Panda trailer; the trailer fails to load, but it doesn’t crash.)

(Update: fixed so now it downloads all the trailers in the site… I think; I’m still downloading.)

Grilla

Esta entrada es de política. Sólo que no de política política; sino de las grillas que han afectado a Gentoo en el último año.

Esta entrada la inicié en la mañana porque vi un correo en la lista de correo de Gentoo donde un chavo preguntaba si la revista semanal de Gentoo (Gentoo Weekly Newsletter) estaba muerta porque no había salido desde octubre.

(A lo cual probablemente yo hubiera dicho “a preguntas idiotas…”)

Unos minutos después, mientras escribía la entrada, encontré en Slashdot la noticia de que Daniel Robbins “ofrece” regresar para liderear Gentoo de nuevo. Daniel Robbins, para los que no lo sepan, es el creador original de Gentoo.

Gentoo es estos momentos, básicamente, un desmadre.

Un montón (decenas) de desarrolladores han renunciado al proyecto, hay una desorganización enorme que ha causado que sólo hubiera un release en el 2007 (la 2007.0), la administración del proyecto es para motivos prácticos inexistente (tanto es así que, al parecer, Gentoo no existe legalmente), entre muchos de los desarrolladores que quedan hay harta mala leche, etc., etc.

La distribución no se ha vuelto inusable básicamente porque, mal que bien, el diseño de Gentoo es modular y ha permitido que la gente que se limita a mantener ebuilds lo siga haciendo, y porque la mayoría de los desarrolladores que se han quedado son los que de por sí se dedican a chambear en lugar de estar grillando.

¿Qué causó tan soberano desmadre? Como en todas las cosas donde un número no trivial de seres humanos estén involucrados (trivial siendo menor o igual a uno), la respuesta es compleja. En particular yo (que no he contribuido en el desarrollo de Gentoo más que con un par de ebuilds y un par de correos en la lista ayudando gente) percibo que en gran medida fue un problema de crecer mucho y muy rápido. Recuerdo hace poco más de un año, cuando diario en la lista de desarrolladores daban la bienvenida a tres o cuatro nuevos desarrolladores. Diario.

Toda esta gente nueva (que no dudo estaba ansiosa de contribuir) entró al proyecto sin que hubiera una infraestructura robusta o reglas claras de quién decide qué… o para motivos prácticos de cómo se deciden las cosas.

Y tampoco ayuda que muchos desarrolladores se portaran como adolescentes en las discusiones públicas. En -dev llegó un punto donde nadie podía decir nada sin que todo desencadenara en estúpidas flame wars.

¿Estoy preocupado, debería ir buscando una nueva distribución? No, por supuesto que no. En los proyectos Open Source siempre ha habido un montón de drama; sólo en el caso de Gentoo ha sido algo más espectacular, masivo y vergonzosamente público. Los ebuilds ahí están, y a pesar de todas las diferencias (y profundos odios) entre desarrolladores particulares, el EAPI ha ido avanzando, lo cual permite que incluso si el desarrollo de Portage muriese, entonces Pkgcore o Paludis puedan retomar la estafeta y continuar así el desarrollo de Gentoo. Con Software Libre en general ningún proyecto muere del todo.

Esto no quiere decir que Gentoo en este momento no esté plagado de problemas, técnicos y políticos, que deben resolverse. ¿Es la propuesta de Daniel lo que le conviene a Gentoo?

No lo sé. Por una parte creo que el que alguien (casi casi quien sea) tome el mando y se ponga a gritar órdenes (no importa si son buenas o malas) sería algo bueno, porque al menos podría evitarse que se siguiera perdiendo el tiempo en discusiones estériles y flame wars. Y ciertamente Daniel es el único que tiene la fama necesaria para poder hacerlo.

Por otra parte Daniel no me da muy buena espina. Hacer el prototipo de Portage en Python se me hace una idea bastante buena; el negarse a reescribirlo en un lenguaje más estricto (o rápido), o ni siquiera a reescribirlo en Python para reparar los errores de diseño que lo plagan (digo “diseño”, pero quiero decir realmente errores porque no hubo diseño) me parece bastante necio. Además hace unos meses Daniel había “regresado”, sólo para salir unos días después haciendo berrinche como niño chiquito porque no quisieron hacer las cosas exactamente como él quería. Además de que amenaza con sólo dedicarle tiempo parcial al proyecto.

Si Gentoo muriese (que lo dudo) es muy fácil continuarlo: es sencillamente tomar el último snapshot del árbol de Portage (los ebuilds) y construir una distribución encima de eso. E incluso podría usarse Pkgcore o Paludis como manejador de paquetes en lugar de Portage, gracias al EAPI. Así que no me preocupo ni siquiera de tener que reinstalar nada.

Pero además yo creo que Gentoo se recuperará. Eventualmente. Con o sin Daniel Robbins.

Y sí, hay grillas, hay discusiones y hay tensión; pero eso es medio inevitable, y aunque ahorita sí es excesivo, no dudo que regrese a la “normalidad” tarde o temprano. Yo seguiré cumpliendo mi deber como usuario; actualizando regularmente, llenando reportes de bugs, colaborando de vez en cuando en la lista de correo.

Esto es sólo un bache. Uno particularmente largo y profundo, pero sólo un bache. No dudo que en unos meses (tal vez años, esperemos que no) Gentoo habrá superado estos problemas. El otro día un desarrollador se disculpó con otro; eso ya para mí es un avance.

Tips para Nautilus

Aunque varios de mis cuates utilizan GNOME, pocos de ellos usan Nautilus en su modo espacial.

Las razones son varias, pero me parece que una muy importante es que no conocen los distintos atajos disponibles, que hacen que utilizar Nautilus sea rapidísimo y óptimo.

Para su beneficio y el de cualquiera de mis lectores que use GNOME, aquí les van algunos tips para Nautilus:

  • Con Nautilus abierto en un directorio, Backspace abre el directorio padre.
  • Shift y alguna acción cierra el directorio actual (por ejemplo, Shift+Backspace abre el directorio padre y cierra el directorio actual).
  • Ctrl+L abre un diálogo donde se puede poner un directorio para que Nautilus abra; más aún, el diálogo tiene autocompleción.
  • Ctrl+S abre un diálogo para poner un patrón para seleccionar archivos; si uno pone *.txt, se seleccionarán todos los archivos con extensión .txt en el directorio.
  • Ctrl+1 y Ctrl+2 seleccionan la vista con iconos y la vista con lista, la cual además permite ir abriendo los subdirectorios usando un árbol; lo que es particularmente útil para directorios remotos.
    Vista con lista en Nautilus

    Vista con lista en Nautilus
  • Ctrl+Shift+w cierra todos los directorios ancestrales que estén abiertos; el padre, el abuelo, etc.
  • Ctrl-q cierra todos los directorios.

(Entre otras cosas también quería poner esta lista porque me gusta mucho cómo se ven las balas en mi nuevo tema.)

Con esos trucos es muy sencillo utilizar Nautilus a la misma velocidad (o mayor) que la línea de comandos. Siempre y cuando uno no necesite manejar archivos y/o directorios a los cuales un usuario normal no tiene acceso.

Que esperemos de eso se haga cargo PolicyKit cuando esté listo.

Actualización: Agregué Ctrl+Shift+w y Ctrl-q por recomendación de Omar.

KDE 4.0

Hoy salió (después de un retraso de algunas semanas) KDE 4.0.

Yo nunca usé KDE. Bueno, muy al inicio de que comencé a usar Linux es posible que haya instalado una de las primeras versiones, al buscar una interfaz gráfica para el sistema.

Pero en general no usé KDE porque básicamente no había de otra: KDE usaba (y usa) Qt, que en ese entonces no era posible incluirlo en la mayoría de las distribuciones, y entonces casi cualquiera de las distribuciones que instalara no lo traía.

Para cuando Qt se cambió a la licencia dual GPL/QPL, yo ya usaba WindowMaker o algo por el estilo, y comenzaba a preferir las aplicaciones escritas con Gtk+. Cuando GNOME fue usable (que, dado que yo usaba casi para todo la línea de comandos, no debió tardar mucho), me pasé a él y jamás he vuelto a cambiar.

Cuando instalé Gentoo por primera vez en mi primera laptop, recuerdo que me maravilló lo sencillo que era instalar cosas y decidí probar KDE de nuevo. Me arrepentí muy rápido; compilar con C++ era órdenes de magnitud más lento que compilar C. Aún ahora sigue siendo más lento.

Esa es una de las razones por las que no volví a tratar KDE (y por las que en ninguna de las máquinas que yo mantengo hay rastro de KDE o Qt); pero en verdad la principal es que GNOME 2 me parece muy bien diseñado y pensado.

GNOME 2 tiene en este momento una desventaja clara con respecto a KDE: GNOME VFS fue un módulo que se trajeron de GNOME 1.2 y que sencillamente está descompuesto. Más allá de descompuesto; es irreparable, y debe ser reemplazado… que es justo la idea de gio y GVFS.

Pero exceptuando eso GNOME me parece ha tenido ideas mucho más innovadoras (y elegantes) que KDE. Además de que GNOME ha sacado sus versiones cada seis meses sin falta desde hace casi diez años. Y conservando compatibilidad binaria en las cosas más básicas; es por ello que Firefox, Thunderbird, VMware y un montón de otras aplicaciones usan Gtk+ y no Qt. Porque además no me hagan empezar con la compatibilidad de ABI en C++.

Pero claro, todo eso es como yo veo las cosas; habrá quien piense distinto. Yo no tengo nada en contra de KDE, sus desarrolladores o sus usuarios.

KDE 4.0 se retrasó unas semanas por razones que varían dependiendo de a quién le pregunten y cuándo lo hagan. Entre los cambios que trae por fin tiran a la basura aRts (que su mismo creador había sugerido hacía años), agregan un manejador de archivos propiamente, y no un sistema operativo completo como era Konqueror (aunque siguen incluyéndolo), y un montón de cosas más.

La verdad no sé cómo esté KDE 4.0… pero para ser sincero tampoco he sabido cómo está KDE 3.5… ó 3.4… etc. Sólo sé que desde un punto de vista externo, KDE 4.0 se puede percibir un poco como Windows Vista. Hay quejas del retraso que tuvo, de que aún así no está listo, que hay demasiados cambios y muchos de ellos innecesarios, etc.

Yo no estaba al pendiente de las cosas cuando GNOME cambió de 1.2 a 2.0 (estaba enclaustrado haciendo la tesis de licenciatura), pero muchos han dicho que se dijo exactamente lo mismo de él. Y GNOME 2 creo que ha sido terriblemente exitoso (dado que es la interfaz por omisión de casi todas las distribuciones importantes de Linux). Así que esperaría que KDE 4 terminara superando cualesquiera problemas que pudiera tener ahora en una versión punto cero.

Y claro, todo mi interés en esto es puramente académico; yo sigo usando GNOME y estoy muy contento (y cada vez más) con el sistema, muchas gracias. Sólo que en general espero que a KDE le vaya bien; la competencia amigable entre ambos escritorios ha hecho que ambos mejoren: gio y GVFS sin duda alguna toman muchas ideas de KIO y los IOslaves (aunque también del paquete java.io de Java y el equivalente en C#). Así como Dolphin evidentemente copia un poco de Nautilus en su modo de navegación (no espacial).

Así que le deseo suerte a KDE 4.0, y espero que resuelva los innegables y numerosos problemas que ya mucha gente ha reportado. Le conviene a Linux en general.

Enlightenment

Hace siglos (1998) intenté usar Enlightenment. Creo que nadie me preguntó si quería usarlo, sólo RedHat (o Mandrake; no recuerdo) comenzó a usarlo como el manejador de ventanas por omisión de GNOME.

(En ese entonces GNOME seguía la estúpida filosofía de no recomendar ningún manejador de ventanas; que cada usuario “escogiera” el suyo. Y yo siempre he usado GNOME.)

Recuerdo dos cosas de Enlightenment: le encantaba usar un montón de gráficos llamativos, y era lentísimo. Pero de verdad lentísimo.

No aguanté ni una semana con él y regresé… no tengo idea de a qué. Supongo que a Sawfish o algo así.

El punto es que después de años (literalmente) de estar haciendo quién sabe qué cosas con él, leí hace unas semanas que parece que por fin saldrá la versión 0.17. Creo que la que probé en 1998 era la 0.16.

Como sea, lo divertido de todo esto y por lo que escribo la entrada, es que todos los que usan las versiones betas de 0.17 (todos los cinco güeyes) dicen que es rapidísimo. Que no tiene comparación con GNOME y/o KDE y/o incluso Xfce.

Yo sólo pude pensar en SimCity 4. SimCity 4 salió en 2003, y en la máquina que tenía hace cinco años el juego no podía ejecutarse de forma cómoda a menos que uno bajara toda la resolución y los detalles gráficos. E incluso así se atoraba.

Pero cinco años después, SimCity 4 corre poca madre en mi AMD 64 X2 3800+ con dos gigas de memoria y una NVidia 6800GS.

Así que no, no dudo que Enlightenment sea rapidísimo diez años después.

Control equis, control ce

Desde hace meses (o incluso años) he ido modernizando mi uso de herramientas en la computadora.

Uso Firefox para navegar, Evolution para leer mi correo, Liferea para leer RSS, Rhythmbox para escuchar música, todos los archivos multimedia de mi computadora están indexados con Beagle (y eso funciona de pelos, por cierto), bajo torrents con Azureus (traté de usar Deluge, pero Python todavía no escala bien para aplicaciones que usan extensivamente la memoria), y copio archivos a otras computadoras usando Nautilus con su excelente soporte para SFTP (que espero mejore todavía más en la siguiente versión, cuando comiencen a usar gio y GVFS).

Mi lector universal es Evince, y ahora que por fin soporta el llenar formas PDF estoy considerando seriamente desinstalar el Acrobat Reader. Veo imágenes con Eye of GNOME, y las edito con The GIMP; mis fotos (que tengo que actualizar, por cierto) están archivadas y perfectamente catalogadas con F-Spot.

Mi uso de la línea de comandos se ha reducido a cuando hago cosas como root (que últimamente es básicamente actualizar el sistema) y cuando tengo que editar archivos remotos (que espero eso ya funcione como debe de ser en GNOME con gio y GVFS).

Todas mis herramientas por lo tanto son sin duda alguna modernas… excepto por XEmacs.

XEmacs es un programa que básicamente no hace el café porque las cafeteras no tienen puertos USB. Si no, lo haría. Es un programa (algunos lo llamarían incluso sistema operativo) que ha sido optimizado a lo largo de casi treinta años para que, utilizando sólo el teclado, uno pueda escribir código rápido. Usando XEmacs yo sin duda soy mucho más rápido para programar que con cualquier otro editor.

Y sentía que era lo mismo con \LaTeX{} hasta que mi tesis pasó de las veinte cuartillas. En ese momento XEmacs se volvió lentísimo.

Debo hacer notar que no es un problema de XEmacs; tiene algo que ver con Compiz Fusion y mis controladores de NVidia en mi máquina de escritorio. En mi latop, que es como tres veces más lenta (no exagero), y que tiene una pinchurrienta tarjeta de video Intel, XEmacs jala de pelos.

Pero en mi AMD 64 X2 +3800 con una tarjeta de video NVidia 6800GS de 256 megas de memoria, XEmacs es inmanejable. El problema no afecta sólo a XEmacs; la terminal de GNOME también tiene unas broncas espantosas para cambiar de tamaño y maximizarse. Supongo que es un problema con las fuentes y Compiz (en Metacity no tengo problemas); no sé, no me he puesto a investigar a fondo. Tenía que acabar mi tesis.

La solución más sencilla (dado que tenía que terminar la tesis) era dejar de usar Compiz y regresar a Metacity, al menos temporalmente. Pero aunque muchos no me creen, yo siento que hago las cosas mucho más rápido en Compiz que en Metacity; y en particular al cambiar de escritorios sí hay una diferencia enorme entre el primero y el segundo: en Metacity uno puede ver cómo se redibujan las ventanas cada vez que se cambia de escritorio.

Y yo ya me había acostumbrado a tener mi tesis en un escritorio, y los artículos o páginas de la red que necesitaba consultar en otro.

Pensando seriamente terminar la tesis en mi laptop, me encontré con un screenshot de GEdit (el editor de texto de GNOME) en Planet GNOME, y vi que tenía soporte para \LaTeX{}. Ya investigando vi que era un plugin en Python, así que lo bajé y sólo para ver qué tal estaba comencé a editar mi tesis ahí.

GEdit editando LaTeX

GEdit editando LaTeX

La maldita cosa funciona de pelos. La verdad no extrañé a XEmacs.

Mucho tiene que ver que yo nunca aprendí a usar como realmente se debe AUCTeX, el paquete especializado de \LaTeX{} para [X]Emacs. Sus usuarios juran que casi casi le escribe a uno el documento.

Yo usaba lo mínimo de AUCTeX cuando editaba \LaTeX{} con XEmacs. Creo que aprovecho mucho más el editor cuando programo; no me veo cambiando a GEdit o a Anjuta dentro de poco para programar.

Pero me parece que eventualmente así será. GEdit no es tan poderoso como XEmacs; pero potencialmente lo es, porque puede extenderse usando Python como XEmacs se extiende usando elisp. Además de que prefiero Python cualquier día en lugar de cualquier forma de LISP.

Con \LaTeX{} además GEdit ofrece algunas ayudas bonitas; tiene un navegador de archivos integrado (también funciona aunque uno no edite \LaTeX{} por cierto):

Navegador de archivos

Navegador de archivos

Y ofrece soporte para cosas como BibTeX; nada del otro mundo, pero está bonito:

BibTeX

BibTeX

La verdad me sentí muy cómodo usando GEdit para terminar mi tesis; y se puede usar la mayor parte de la funcionalidad del editor sin usar el ratón, lo cual para mí es fundamental. Además se integra perfectamente con GNOME: Evince se abre automáticamente cuando uno compila el PDF, por ejemplo; o uno selecciona “Places → Recent Documents → capitulo1.tex” del menú principal de GNOME y GEdit se abre (porque los archivos .tex están asociados a él).

No voy a renunciar a XEmacs… todavía. Pero sí le veo sus días contados; GEdit me sorprendió mucho, realmente es muy poderoso y como doce veces más rápido que XEmacs. Lo cual no es muy difícil, por supuesto.

Así que no dudo que dentro de poco Anjuta o el mismo GEdit puedan darme el mismo poder que me da ahora XEmacs, y en ese momento mi escritorio usará exclusivamente aplicaciones basadas en Gtk+. Ya ahorita utilizo RapidSVN para manejar mis repositorios SVN, y Giggle para manejar los repositorios de Git; utilizo Meld para ver diffs gráficos (utiliza cairo, y se ve de pelos); y cuando programo cosas en Gtk+ utilizo Glade y DevHelp. El editor es lo único que me falta.

Y me da gusto ver que dentro de poco (espero) podré reemplazarlo.

La mezcla

Parece que Beryl y Compiz se van a mezclar de nuevo.

Mucha gente dice que algo de competencia estaría bien, que en general ha sido benéfica para proyectos como GNOME y KDE. Pero lo cierto es que Beryl y Compiz son suficientemente similares como para considerar que es un desperdicio de recursos el que existan dos equipos trabajando básicamente en lo mismo.

Algo gracioso (por decirle de alguna manera), es que parece que hay consenso en que hay que elegir un nuevo nombre, distinto a Compiz y Beryl. La justificación es que hay suficiente animadversión entre ambos proyectos como para que una de las comunidades sea “absorbida” por la otra.

Me pregunto cómo terminará llamándose la mezcla. Una característica de los proyectos de Software Libres es que luego eligen nombres particularmente raros.

Espero que no le pongan nada como “cosito tres de”. Vamos a ver.

La intrusión

Como si no tuviera cosas que hacer, me metí a la página administrativa de mi servidor virtual (éste donde hospedo mi blog y galería en línea), y vi con horror que tenía registrado un uso de ancho de banda casi cuatro veces lo que generalmente uso al mes.

Indignado, me metí a mi servidor virtual e hice una revisión rápida: según webalizer, había usado menos que en otros meses, así que mandé un correo al soporte técnico, exigiendo saber cómo era posible eso.

Me contestaron diciéndome que tenía un directorio extraño en /tmp, que mi servidor había sido comprometido, y que el aumento en uso de ancho de banda era casi seguro consecuencia de la intrusión.

Intrigado, entré y vi que ciertamente mi servidor había sido comprometido. Lo que no entiendo es cómo: utilizo llaves públicas en SSH, y además tengo prohibido que root entre directamente. Los únicos servicios que corro son HTTP(S) y MySQL, y lo único en Apache es WordPress y Gallery2. Así que sencillamente no imagino cómo le hicieron para meterse.

Como sea, borré los ejecutables que agregaron en /tmp, restauré varios ejecutables que podían haber sido comprometidos, y actualicé WordPress y Gallery2 a sus últimas versiones. Durante todo el proceso, estuve en comunicación con los técnicos de mi servicio de hospedaje en línea.

Debo agradecer mucho al soporte técnico de Open Hosting; no sólo fueron rápidos y eficientes, y me ayudaron con cualquier duda que tuve y me dieron consejos útiles: además, reconocieron que la intrusión no fue culpa mía (o al menos no mucho), y me ajustaron mi uso de banda a lo que estaba antes de la intrusión. Un servicio de primera; realmente lo recomiendo.

Y bueno, ahora a apretar más la seguridad de mi servidor virtual. Y revisar más seguido si todo está como debe de estar.

Se solicita fánatico de tipos

Algo pasó en mi última actualización. Cuando abrí Firefox, vi que tenía en todos lados un tipo bellísimo, que me parece ya había visto antes, pero no recuerdo dónde.

Para que se den una idea, así dibuja Firefox un párrafo usando Sans Serif:

Tipo bonito

Y así lo dibuja GNOME normal:

Tipo feo

La diferencia es que utilizo la versión binaria de 32 bits de Firefox, y entonces (supongo) la versión binaria y y de 32 bits de Gtk+ agarra otro tipo. Y no lo puedo encontrar. O tal vez fontconfig o alguna otra biblioteca del stack para dibujar tipos lo dibuja de forma distinta; no lo sé.

Lamentablemente, yo nunca he sido un font freak o fanático de tipos, pero sí sé que me gustaría tener ese tipo en todo mi escritorio. ¿Alguien sabe cuál es?

“Key Found!”

Ya que estoy descansado después del viaje de regreso de Guanajuato (otra vez, sin incidentes dignos de mención), y ahora lejos del lugar donde ocurrieron los eventos que en un momento relataré, me animo a contar la chocoaventura de las llaves.

Como ya conté, resulta que el Cimatel por acogedor que sea no tenía Internet; lo cual no es tan grave, pero ciertamente es incómodo. Así que estaba con mi laptop prendida trabajando en mi presentación, cuando se me ocurrió ver si había alguna red inalámbrica de la cual pudiera colgarme.

Para variar con este tipo de cosas, sólo había un par de redes inalámbricas, todas con la llave de seguridad WEP activada. Pero había una particularmente fuerte (considerando la distancia a la que debía estar de nuestro cuarto), y recordando que había leído que hay varios programas para romper las llaves WEP, decidí probar suerte.

Así que tarareando (de nuevo) el tema de Mission: Impossible en mi cabeza, instalé aircrack-ng junto con otros programas del estilo… que por cierto, tuve que ir a un café interné para poder bajar el código fuente de los programas.

Sólo que no funcionó el domingo que llegamos. Ni el lunes. Ni el martes.

La seguridad que ofrece WEP es más bien débil (por no decir nula), y capturando un suficiente número de IVs (Initialiation Vectors), romper las llaves es sólo cuestión de segundos en una computadora moderna; incluso laptop como la mía. Así que todos los días nada más regresábamos al hotel yo ponía a mi laptop a capturar paquetes, y la dejaba toda la noche haciéndolo.

Para el miércoles en la mañana, llevaba unos 17,000 paquetes. Pero ese día se dio la tarde de descanso, así que regresamos al hotel como a la 1:30, y puse a capturar paquetes a mi laptop de nuevo. Para mi sorpresa, capturó 50,000 en más o menos quince minutos.

El problema era bastante obvio; de día la gente de hecho usa su red inalámbrica. En la noche no había más tráfico que el que yo generaba artificialmente.

Así que el miércoles al regresar de comer, mi laptop escupió el siguiente mensaje después de tardar dos segundos en romper la llave (con cerca de 1,000,000 de IVs):

KEY FOUND! [ 1X:7X:4X:9X:6X ]

(Oculto la mitad de la llave con “X” para no hacer el balconeo tan obvio).

No me queda claro el estado legal de lo que hice; y como no utilicé la red para nada ilegal (sólo leer mi correo y navegar básicamente), no siento que haya hecho nada moralmente reprensible. Inmoral es la seguridad que llevan los Access Points de Prodigy, y que usen llaves de 40 bits (que no importa; para romper una de 40 bits se requieren alrededor de 250,000 IVs, y una de 104 bits requiere cerca de 800,000). Me alegro que mi Access Point además tenga filtrado de direcciones MAC. Que tampoco sirve de mucho, pero bueno.

Además, la página de administración del Access Point estaba completamente desprotegida. Ni siquiera una triste clave de acceso tenía:

WEP Cracked

WEP Cracked

Y por supuesto tuvo sus múltiples desventajas. Por ejemplo, tenía que estar casi colgado de la ventana del cuarto del hotel si quería que la conexión fuera estable. Aquí una foto de la red pirata en acción:

La red inalámbrica pirata

La red inalámbrica pirata

Que por cierto, ya están las fotos que tomé en el coloquio; tomé fotos casi exclusivamente de las pláticas.

Yo exponiendo

Yo exponiendo

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.

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.

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.

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.

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.

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.

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

“Byte-by-byte”

Federico Mena escribe de cosas chidas que están pasando en GNOME. Uno de los puntos que menciona:

Callum is working on gathering statistics of the desktop’s memory consumption. GNOME and KDE seem to be pretty close, to within a few MB. We should riot in the streets and demand a byte-by-byte recount, or just get the damn bugs fixed so that we can get unquestionable numbers ;)

Por supuesto, Federico es mexicano. ¿Me pregunto cuánta gente en el mundo (Planet GNOME es leído por personas de decenas de países) habrá entendido el chiste?