JDK 6 (Mustang) GTK+ Look and Feel

Durante estos días decidí probar la versión beta de Java 1.6, apodada “Mustang”. Según había leído por aquí y por allá, esta nueva versión traerá varias mejoras en cuestión de las interfaces gráficas Swing. La idea es que Swing tenga una apariencia más parecida a las interfaces nativas dependiendo del sistema operativo en el que se estén ejecutando. Me gusta mucho esta idea, y desde el principio soñé con ver algunas aplicaciones Swing que me gustan con la misma apariencia que el resto de mi entorno Gnome.

Se supone que Swing en JDK 6 hace uso de widgets nativos de GTK+, pero, según lo que probé, me parece que lo que en realidad pasa es que Swing trata de imitar el estilo de GTK+. Esto se puede comprobar fácilmente al ver diferencias sutiles (otras no tanto) entre Swing con tema GTK+ y una verdadera aplicación GTK+.

He aquí unos pantallazos de la aplicación de demostración que viene con el JDK, SwingSet2, con diferentes temas de Swing:

Pantallazo-SwingSet2-Swing-Metal

Pantallazo-SwingSet2-GTK-Clearlooks

Pantallazo-SwingSet2-GTK-Human

Desde aquí se ven varias cosas interesantes. Una es que el tema de GTK+ en Swing cambia en forma coherente con el tema actual de Gnome, prueba de ello es que dos de los pantallazos con tema GTK+ tienen tema de Gnome diferente, uno usa Clearlooks y el otro usa Human. Otra cosa bastante curiosa es ver cómo implementan una interfaz tipo MDI, que no están soportadas por GTK+. También se puede ver que a este estilo MDI le falta mucho por pulir, los botones de las ventanas internas aún están bastante burdos.

Para comparar como son renderizados algunos widgets específicos, aquí hay un diálogo típico de Gnome junto a algunos diálogos de preferencias de JEdit con tema GTK+ activado:

Pantallazo-Preferencias de ventana-GTK

Pantallazo-Opciones JEdit-Swing-GTK

Pantallazo-Opciones JEdit 2-Swing-GTK

La primera diferencia que se nota es que los widgets de Swing GTK+ usan una fuente de texto diferente de los widgets GTK+ reales. Para mi esto es crucial para no sentirse como en casa usando Swing. Ojalá que lo corrijan para la versión definitiva.

Algunos widgets en Swing GTK+ son casi idénticos a la versión real de GTK+, es el caso de los GtkCheckButton y los GtkRadioButton. Sin embargo, digo que son “casi idénticos” porque la versión de Swing no cuenta con pequeños detalles proporcionados por temas como Clearlooks, como los efectos de desvanecimiento suave en los GtkCheckButton. Otros widgets definitivamente son muy diferentes, es el caso de los GtkHScale y los GtkComboBoxEntry, que se notan bastante diferentes en la versión Swing. Otra cosa diferente son las barras de desplazamiento cuadradas al estilo GtkScrollBar en lugar de las redondeadas estilo GtkTextView.

Parece que la gente de Sun no sólo se ha preocupado por la similitud a nivel de widgets simples, sino que también han hecho algunos de los diálogos usuales bastante similares. He aquí algunos pantallazos:

Pantallazo-Abrir-GTK

Pantallazo-Abrir-JDK

Bueno, en realidad los diálogos de selección de archivos son muy diferentes. No encuentro el por qué Sun decidió usar el antiguo dialogo de abrir de GTK+ en lugar del nuevo. Este sí que me parece que es un punto negativo.

Pantallazo-Escoger Fuente-GTK

Pantallazo-Escoger Fuente-JDK

Aquí se pueden ver las diferencias entre los diálogos de selección de fuente. Se parecen bastante, aunque algunas cosas están en diferente orden y para ciertas cosas (texto de muestra) se usan widgets diferentes. De nuevo se nota aquí la diferencia entre las barras de desplazamiento diferentes, cuadradas en Swing GTK+ y redondeadas en Gnome.

Pantallazo-Escoger Color-GTK

Pantallazo-Escoger Color-JDK

Pantallazo-Escoger Color-Swing-Metal

Aquí hay una comparación de tres diálogos de selección de color. Uno es el original de Gnome, otro es de Swing GTK+ y otro es de Swing Metal. El diálogo de Swing GTK+ es bastante parecido al de Gnome. De nuevo se notan diferencias en los widgets, como por ejemplo los GtkSpinButtons. También hay cosas que faltan y cosas que se agregan, como el botón del gotero (se quitó) o la vista preliminar de texto (se agregó). En el triángulo de selección de color se puede notar como la versión de Swing GTK+ es mucho más burda, a diferencia de la versión Gnome que usa un bonito antialiasing, el cual viene desde GTK+ 2.8, gracias a Cairo. Supongo que Swing no usa nada similar a Cairo por debajo. Otra parte donde se nota una extraña inconsistencia es en los botones “aceptar” y “cancelar”, los cuales no usan los iconos de botones estándar. Y digo que es extraña esta inconsistencia es porque en el diálogo de selección de archivo si lo usaban.

En el último pantallazo se ve el mismo diálogo de selección de color, sacado exactamente de la misma parte de la misma aplicación, pero usando el tema Metal de Swing. Aquí se nota cómo un mismo diálogo de Swing puede verse radicalmente diferente dependiendo del tema que se use. No sé que tan bueno sea esto.

Al final dejo dos pantallazos comparando JEdit con tema GTK y tema Metal:

Pantallazo-jEdit-Swing-GTK

Pantallazo-jEdit-Swing-Metal

Aparte de las diferencias de apariencia, existe otro problema grave, gravísimo con Swing GTK+: El rendimiento. Y es que cuando se activa el tema de GTK+ la aplicación se vuelve considerablemente más lenta en comparación con el tema Metal, y, por supuesto, mucho más lenta que una aplicación GTK+ nativa. Esto si que es un gran problema para la adopción de este look and feel nativo.

Bueno, afortunadamente esta todavía es una versión beta. Estoy seguro que la gente de Sun va a corregir muchos de los errores que existen por el momento. El problema del rendimiento es realmente obligatorio de corregir, por lo menos hacer que sea igual de rápido que Swing Metal. De todos modos me parece que el enfoque que está tomando Sun de imitar GTK+ no es el más adecuado, creo que nunca va a ser posible tener un 100% de concordancia. Por ahora me parece que la mejor opción para tener un look and feel nativo en Java es SWT, usado por aplicaciones como Eclipse o Azureus.

Fedora, Aiglx y Xgl

Hace unos días escribía sobre los pros y los contras de Ubuntu y Fedora. Bien, creo que ahora tengo un nuevo punto a favor y también en contra de Fedora.

Una de las cosas que más me atrajo a Fedora desde el principio, fue que es una distro que siempre está probando cosas nuevas e interesantes, siempre está bleeding the edge. Una de las cosas que destaco del Proyecto Fedora es proyectos como Fedora Rendering Project o el Proyecto de Integración con Xen.

Fedora Rendering Project plantea una nueva opción bastante interesante a el impresionante Xgl de Novell; Se trata de Aiglx (Accelerated Indirect GL X). A diferencia de Xgl, Aiglx no trata de crear un nuevo servidor X, sino que plantea usar el servidor actual con ciertas extensiones y el uso de un Metacity especial con un composite manager (¿gestor de composición?) potencializado por Mesa. El resultado es un gestor de ventanas con la posibilidad de hacer los mismos efectos que hasta ahora se han mostrado en Xgl y Compiz.

Lo que hace el composite manager es básicamente aprovechar las ventajas de las nuevas tarjetas de vídeo para dibujar las ventanas en la parte no visible del framebuffer. Esto no sólo tiene la ventaja de ser muy rápido, sino que también permite hacer uso de efectos brindados por las capacidades de las tarjetas 3D como el alpha blending (que permite transparencias), entre otras.

Para mi lo que intenta hacer Aiglx es básicamente lo mismo que pretendía Luminocity; es más, creo que Aiglx no es más que un porte de Luminocity a Metacity. La idea es básicamente usar los beneficios del composite manager desde un servidor X normal. Esto tiene la gran ventaja de poder activar y desactivar los efectos 3D sin tener que cambiar de servidor X y de una forma tan simple como cambiar una clave del gconf. El problema de este enfoque es que no ese está usando a fondo todo el poder de la tarjeta 3D, sino que se esta utilizando solamente para la composición. Por otra parte, al seguir utilizando el servidor X normal, existen problemas con aplicaciones que usen, por ejemplo OpenGL o XVideo. Otra desventaja muy importante es que, al estar integrado el composite manager en Metacity, este sólo servirá para Gnome y dejará por fuera a otros escritorios como KDE.

Después de analizar las dos opciones: Aiglx y Xgl, definitivamente me parece que la mejor opción es Xgl. La razón es que el poder de las tarjetas 3D no sólo se debe usar para tener efectos visualmente llamativos, sino que la principal razón debe ser la velocidad. Dado que Xgl es un servidor X completamente nuevo, escrito por encima de OpenGL, se asegura que todas las operaciones de dibujo van a estar usando la aceleración 3D. Gracias a esto vamos a poder tener más cosas que simplemente lo que nos brinda Compiz, como por ejemplo renderizado de fuentes más rápido e incluso, quien sabe, hasta widgets 3D. Además, al ser Xgl un servidor X, sus ventajas van a poder ser aprovechadas por cualquier administrador de ventanas o entorno de escritorio.

Sin embargo, no todo es color de rosa para Xgl, yo le veo dos inconvenientes importantes: Una es la dificultad para pasar del modo acelerado al modo normal, lo cual podría ser causar problemas a personas que no tengan el hardware apropiado. El otro inconveniente tiene que ver con el backend que se está usando para Xgl actualmente: Xglx, que, a mi modo de ver, plantea un modo algo redundante aunque, eso si, bastante práctico. Xglx realiza las operaciones OpenGL sobre otro servidor X, es decir que a la larga tendríamos algo así: Xgl, un servidor X, corriendo sobre Xglx que a su vez corre sobre otro servidor X.

Para mi la solución ideal para el sistema gráfico en Linux, sería Xgl corriendo sobre Xegl, una alternativa a Xglx que permite que Xgl dibuje directamente sobre el framebuffer, evitándose de esta manera el segundo servidor X. Además que, al estar basado en el EGL de Khronos, sería mucho más portable. Sin embargo, Xegl todavía se ve bastante lejano. Existen muchos inconvenientes, uno es el problema de los drivers gráficos para que escriban directamente en el framebuffer, otro es la terquedad de tantos desarrolladores de X que pretenden seguir remachando el viejo X a probar nuevas y radicales ideas como Xegl. Esto es de lo que se prenden los de Aiglx para justificar su proyecto y es de lo que se queja Jon Smirl, ex desarrollador de Xegl, en su grandioso artículo sobre el estado del arte de los gráficos en Linux.

En fin, siempre he creído que la competencia en el software libre es buena y ayuda a que se logre un buena solución. Por eso me gusta que exista Gnome y también exista KDE, o que exista Fedora y también Ubuntu. Sin embargo en el caso de Aiglx vs Xgl la cosa es un poco distinta porque, como dijo alguien por ahí, no se trata de gustos, por lo que los dos no van a coexistir por mucho tiempo.

Distribuciones

Estoy indeciso con respecto a qué distribución instalar ahora que llegue Gnome 2.14. Lastimosamente, para nosotros los amantes de Gnome parece que sólo hay dos distribuciones importantes basadas en este entorno de escritorio: Ubuntu y Fedora. Otras como Suse y Mandriva están basadas en KDE y las demás (Debían, Slackware, Gentoo, son más bien como neutrales).

Desde Marzo hasta Diciembre estuve usando Fedora y me gustó muchísimo, sin embargo, decidí cambiarlo debido a que los del Proyecto Fedora tenían a Mono entre su lista de cosas prohibidas, por problemas de patentes según los abogados de RedHat. Entonces decidí pasarme a la otra distro Gnome: Ubuntu. Durante este tiempo me a gustado bastante, la versión 5.10 (Breezy) me ha hecho cambiar de opinión desde la última vez que lo probé (4.10 – Warty). Sin embargo, al poco tiempo que estaba usando Ubuntu, salía la noticia de que Fedora decidió incluir Mono y todos sus juguetes (Beagle, FSpot) lo cual me deja a la tarea de tomar esta decisión.

He aquí un balance de los pros y contras de cada una:

Ubuntu.

Pros:

  • Basado en Gnome.
  • Completamente libre y gratuito.
  • Minimalista: un sólo CD con las herramientas estrictamente necesarias.
  • Un sistema de paquetes más organizado y centralizado.
  • gestor de actualizaciones es muy bueno.
  • Regalan unos CDs bonitos.
  • Muy buena documentación en Internet sobre cómo hacer muchas cosas.
  • Perfecta sincronización con los lanzamientos de Gnome.

Contras:

  • Un poco lento. Según mi experiencia, FC4 es un poco más rápido, especialmente en la carga inicial, que Breezy. Antes la cosa era al revés (FC3 vs Warty).
  • Hay muchos paquetes que no colocan la entrada correspondiente en el menú de aplicaciones. Esto me parece realmente irritante.
  • Algunos paquetes que no encajan dentro dentro del ‘perfecto’ sistema de paquetes son muy tediosos de instalar. Por ejemplo Sun Java o Skype.
  • Hacen falta herramientas gráficas para configurar varias cosas, como el servidor X, samba o el firewall.
  • No actualizan los paquetes de la versión estable. Esto es lo que me parece más irritante de todo. Por ejemplo, no puedo instalar Firefox 1.5 o Mono 1.1.13 en Breezy, sino que tengo que pasarme a la inestable (Dapper) y con ello actualizar varias librerías como Gtk+. Esto tal vez se pueda solucionar con el uso de backports, pero no he probado eso.
  • La apariencia por defecto es fea. No me gusta el color café, ni tampoco los iconos poco consistentes ¡Qué tal ese logo de Firefox! Bueno, esto es bastante personal y, la verdad, se puede arreglar fácilmente bajando un par de temas.

Fedora

Pros:

  • Completamente Libre y gratuito
  • Orientado a Gnome.
  • Tiene bastantes herramientas gráficas, que también pueden funcionar en modo de texto al estilo de YaST o Mandriva Control Center
  • Me parece que se la lleva mejor con aplicaciones propietarias como Sun Java o Skype.
  • Es bastante rápido y parece que cada vez mejoran más ese aspecto.
  • Se puede disfrutar de las últimas versiones de ciertos programas como Firefox o Mono en la versión estable.
  • Es visualmente muy bonito, el tema general y de los iconos me parece el mejor entre todas las distros, con tal vez Novell Linux Desktop 10 como competencia. La instalación se ve mucho mejor que la de Ubuntu.

Contras:

  • Los lanzamientos no están sincronizados con Gnome. Bueno algunas veces si.
  • Muchos CDs, cuatro, llenos de cosas innecesarias para un sistema de escritorio
  • El sistema de paquetes es bastante desorganizado, hay que agregar muchos repositorios por aquí y por allá.
  • No hay tanta documentación como para Ubuntu.
  • El gestor de actualizaciones no sirve. Hay que ver cómo cambia eso con las nuevas herramientas para Yum

Al fin vacaciones

Ayer, por fin, salí a vacaciones. La semana que acaba de pasar ha sido la más dura de los últimos meses. Todos los exámenes y trabajos que presentar en la universidad se juntaron. De verdad me alegra que ya se haya acabado. Lo bueno es que el miércoles me voy de vacaciones; iré para Medellín, dónde últimamente han vivido mis abuelos. Casi toda mi familia irá para Medellín a pasar el fin de año, después iremos a Coveñas, un agradable pueblo en la costa atlántica, estoy bastante ansioso por viajar, la verdad es que un buen descanso me vendrá muy bien.

Bien, aunque ya salí a vacaciones en la universidad, aún no estoy completamente libre; todavía tengo cosas pendientes en el trabajo. Había pensado terminar y presentar lo que tenía pendiente esta semana, pero debido a tanta cosa en la U, me tocó aplazarlo. Ahora tengo que hacerlo antes del miércoles, aunque no me preocupa, lo que me falta esta de un pelo.

Algo que seguro influyo para que esta semana fuera tan complicada, es el hecho de que el fin de semana pasado no hice nada. Bueno, no hice nada relacionado con la Universidad ni el trabajo. El fin de semana pasado me dedique a dos cosas, por un lado estuve compilando Gnome desde el CVS y por el otro estuve intentando cambiar el skin de la página del GLUC.

Compilar Gnome desde el CVS ha sido menos complicado de lo que pensé, aunque eso si, bastante demorado. Jhbuild facilita mucho el trabajo, incluso tiene una interfaz gráfica (aunque yo lo usé desde la consola), y un práctico icono en el área de notificación. También estuve haciendo un archivo de módulos para poder compilar mono usando jhbuild. Lo práctico de esto es que puedo actualizar, recompilar e instalar todo de nuevo con sólo escribir un comando. Además todo se instala en un entorno aparte, con lo cual puedo tener conviviendo mis versiones estables de Mono y Gnome con las versiones de CVS y SVN. El único inconveniente es tal vez que cuando pongo a correr ambos al tiempo se consume bastante memoria. Por ejemplo cuando corro Mono Develop (corriendo sobre gtk# 2.8 y gnome 2.13.3) dentro del entorno estable.

He aquí algunos screenshots de Jhbuild:

jhbuild gui

jhbuild in notification area building

jhbuild in notification area configuring

Screenshots de Gnome CVS:

gnome cvs about

Screenshot de Gnome CVS

Screenshot de Gnome CVS

Herramientas para Python

Por estos días que he estado trabajando bastante en DeStar, estuve buscando algún buen IDE para programar en Python. Hasta ahora he estado programando con JEdit, un excelente editor de textos que poco tiene que envidiarle a Emacs o Vim y que es muy fácil de usar. La combinación de JEdit con gnome-terminal, Pdb y PyLint es bastante cómoda, sin embargo, quería probar algo un poco más integrado, así que me decidí a probar Pydev. PyDev es un plugin para el maravilloso Eclipse, el cual, por cierto, funciona perfectamente bajo GCJ, la implementación libre de Java.

PyDev tiene características bastante impresionantes:

  • Resaltado de sintaxis, explorador de clases y resaltado de errores. Bueno, esto es lo básico de todo IDE. Siendo Python un lenguaje dinámico, el resaltado de errores se hace utilizando PyLint. PyLint es bastante impresionante y configurable, puede detectar errores que van desde un objeto no declarado hasta prácticas feas de programación como líneas muy largas o nombres de variable muy cortos.
  • Code Completion, que no es más que el clásico asistente que ayuda sugiriendo qué se puede colocar digamos después de un punto. Muy útil a la hora de recordar nombres de métodos.
    Eclipse Screenshot with PyDev
  • Integración con Bicycle Repair Man, la herramienta para refactorizar código en Python. Esta si que es una gran característica que no había podido usar con JEdit. Por más que exista el HyperSearch y todo, este tipo de herramientas agilizan mucho las cosas.
    Eclipse Screenshot with PyDev
  • Depurador gráfico. Esta si que es una de las mejores características. Sé que Pdb es bastante fácil de usar, pero la verdad es que, a la hora de depurar, no hay nada como tener una buena perspectiva gráfica de todo lo que esta sucediendo. El depurador fue la principal razón que tuve para buscar un IDE y la verdad es que Eclispe con PyDev hacen un excelente trabajo en ese sentido.
    Eclipse Screenshot with PyDev
  • Integración con Subversion. Bueno, esto no es de PyDev, sino más bien de Subclipse, el plugin de Subversion para Eclispe. La integración es muy buena, cada cambio en la copia local con respecto al repositorio se muestra con algún icono, casi como tener un “svn st” en tiempo real. Por otra parte, todos los comandos usuales en SVN tienen su equivalente gráfico.
    Eclipse Screenshot with PyDev

Desafortunadamente no todo es perfecto. PyDev tiene algunos problemas que pueden llegar a ser molestos. Por una parte, PyDev no tiene soporte para PTL, el lenguaje de plantillas de Quixote, es decir que toca decirle a PyDev que maneje los archivos PTL como archivos normales de Python; aunque el depurador funciona bien para los PTLs, otras características como PyLint y el explorador de clases no lo hacen bien (En JEdit en cambio si funcionaba gracias al plugin Code Browser). Algo similar pasa con los archivos que tienen extensión diferente a “.py”, solo que en este caso simplemente no funciona nada, la única solución que he encontrado en este caso es renombrar los archivos temporalmente.

También he probado otras alternativas como JPyDebug, un plugin de Python para JEdit que agrega funciones de depuración, PyLint y explorador de clases, pero desafortunadamente este plugin sólo funcionaba cuando quería y decidí quitarlo. En fin, creo que probaré con PyDev por un tiempo y si no me gusta seguiré con el cómodo JEdit + Consola.

En resumidas cuentas: Eclipse + PyDev + Subclipse hacen un gran equipo

Detesto los paquetes – Parte 2

Definitivamente creo que la forma en que se están manejando los paquetes de software en las distribuciones de Linux es uno de los más grandes problemas que tiene la adopción del Software Libre en el escritorio. Y cuando hablo de las distribuciones de Linux hablo de todas, incluyendo Debian y Gentoo que se jactan de tener los mejores sistemas de paquetes.

Me molesta que cada distribución tenga un formato diferente de paquetes, e incluso las que comparten uno (como RPM), lo hacen incompatible. Esto lleva a que la labor de empaquetado se tenga que hacer una y mil veces. Un programa como Firefox tiene que ser empaquetado tantas veces como distribuciones hay. ¡Qué enorme gasto en trabajo de los colaboradores!, si las cosas funcionaran como deben, el desarrollador del programa debería empaquetar una vez y el paquete debería servir para cualquier distribución (en parte esto es lo que ocurre cuando se distribuye el código fuente, pero compilar definitivamente no es lo adecuado para un novato).

El hecho del empaquetado esté en manos de los que distribuyen y no de los que desarrollan el software es un problema mucho más grave de lo que parece. He aquí algunas razones:

  • No importa qué tan grande sea el ejercito de empaquetadores que se tenga, no es posible empaquetar todo el software. Por más que la gente de Debian diga que tiene n-mil paquetes, basta con mirar un poco gnomefiles.org para darse cuenta de que existen muchísimos programas sin empaquetar. El problema es aún peor con las distribuciones que no cuentan con la suerte de tener tantos colaboradores, simplemente tienen que resignarse con no tener el suficiente software, porque así es el sistema. Todo lo que no está empaquetado es difícil de instalar y no se integra bien con el resto de la distribución; esto hace que los usuarios muchas veces opten por simplemente no instalar lo que no está empaquetado, de hecho, tengo muchos amigos que no instalan nada que no se pueda apt-get installar, de ahí es donde surge la frase muy comúnmente escuchada que dice “Si no está en Debían, no exite”; la verdad es que se están perdiendo de un montón de programas.
  • Aún cuando se tenga un cierto programa empaquetado, no siempre se puede tener la última versión. Esto es bastante frustrante. ¿Por qué cuando sale el último Firefox no puedo probarlo porque no está empaquetado aún? El problema es peor aún con las versiones anteriores de la distribución. Por ejemplo, si yo uso Ubuntu Warty, nunca voy a disponer del paquete para Firefox 1.5, aún cuando si me bajo el binario de Mozilla.org si funciona. Es decir que los usuarios de Warty van a estar condenados a usar versiones viejas de todo el software y la única forma de conseguir un programa nuevo es actualizando toda la distribución. En otros casos es peor; en donde hay que pasarse a una versión inestable para poder probar el software nuevo. ¿Acaso suena lógico tener que actualizar a una versión inestable todo el sistema operativo, incluyendo Gnome, Gtk, etc sólo porque quiero probar el nuevo Firefox? Todo esto simplemente porque las personas de las distribuciones no quieren hacer los paquetes. Si el empaquetado estuviera en manos de los desarrolladores, la historia sería otra. Por ejemplo, la mayoría del software para Windows funciona desde la versión 95 hasta Vista ¿Que pasaría si para instalar un programa de Windows nos pidieran que obligatoriamente nos actualicemos a Vista? La actualización semestral de las distribuciones me parece una excelente idea, pero hay que aceptar que los usuarios normales no actualizan su sistema operativo cada 6 meses, eso es más bien para complacer a los geeks. Privar a los usuarios no expertos de ciertos programas no me parece una buena idea. Aunque hay casos en los que toca realizar la actualización, por cuestiones de dependencias, en muchos otros no, como el de Firefox.
  • Los sistemas de paquetes son completamente hostiles al software que no es libre y esto aleja a los ISVs. En mi opinión, no se puede tener una verdadera aceptación en el escritorio si los usuarios no tienen la libertad de escoger usar programas propietarios además de los libres. Además, ¿Qué pasa con los programas que no son del todo libres pero que su licencia tampoco es tan agreste como las típicas licencias propietarias? un ejemplo de este tipo de software es SciLab. Peor aún, no cualquiera puede ser empaquetador de una distribución, a veces hay que seguir rituales casi religiosos para poder hacerlo (véase cómo ser un DD). Los empaquetadores son los que deciden qué software se empaqueta. ¿Qué pasaría si para distribuir un programa de Windows hubiera que pedirle permiso a Microsoft? (Sé que la comparación es insensata, por favor no armar un flame por esto). En fin, me gusta la frase de la web de Zero Install: “You don’t need to be blessed by a distribution (or anyone else) to be part of Zero Install”.

Bueno, ya me desahogué un poco, la verdad es que a veces es bastante frustrante todo esto, lo peor es que a poca gente le interesa el problema, incluso he visto como la propuesta de crear un autopackage para Mono no sonó mucho. Por cierto, en el título dice “Parte 2” esto es porque hace poco más de un año había escrito sobre este mismo problema, y mencionaba algunas alternativas interesantes como Zero Install y Autopackage.

En resumidas cuentas: ¡Al diablo con el APT!

Revelando

Curso de Fotografía

Hace unas semanas me inscribí en un curso de fotografía que estaba dando el Foto Club de la Universidad. Desde hacía varios semestres quería inscribirme en el curso, pero no había tenido tiempo, este semestre tampoco tenía, así que me tocó decidirme e inscribirme como sea, ya que de otra forma nunca lo iba a hacer. En fin, el curso es a la antigua, con cámaras analógicas manuales, yo he estado usando la magnifica Canon A1 de mi papá. Al principio quería comprarme una cámara digital, pero la verdad es que me he dado cuenta que la fotografía analógica tiene su encanto, por eso tengo pensado conseguirme una Canon AE1 o similar, que sea manual.

En una de las prácticas del curso tomamos unas fotos en blanco y negro por varias zonas de Popayán. Hicimos todo el proceso manual, desde la escoger objetivo, filtros, velocidad y diafragma, hasta el mismo revelado y copiado. Este último, el revelado, es uno de los aspectos más interesantes de la fotografía analógica. Todo el proceso que va desde desenrollar el rollo completamente a oscuras en la etapa de revelado hasta ver cómo va apareciendo lentamente la foto en el papel bajo una tenue luz roja en la etapa de copiado, es simplemente fascinante.

Esta es mi hoja de contacto de aquella práctica:

Hoja de Contacto

Esta es una de las fotos ya copiada en papel:

Foto de un Árbol

Mono Canvas

Después de varios meses de no tocar el código de MonoCanvas ni de MonoUML, ayer decidí volver al retomar el trabajo. MonoCanvas ha cambiado mucho desde la última vez que lo vi, Mario ha avanzado bastante. Durante el fin de semana desempolvé el repositorio del SVN y empecé a corregir algunos bugs y a refactorizar un poco el código. Por ahora el trabajo que falta es re-escribir la parte de los elementos anidados, la cual era la causante de varios bugs, tengo pensando crear una nueva clase aparte para ello. De ahí seguirá el trabajo con las conexiones, que es importantísimo.

Una cosa que todavía me preocupa es el rendimiento, pese a que se han corregido varios bugs en Mono.Cairo por parte del equipo de Mono, me parece que todavía hay mucho por mejorar, tanto desde la parte de MonoCanvas como del mismo Mono, en fin, creo que luego hay que dedicarle un tiempo a eso más adelante.

Avance en MonoCanvas:

Screenshot de MonoCanvas

DeStar

Continuando con el tema del rendimiento, últimamente me estoy dedicando a mejorar el de DeStar. Después de analizar detenidamente, por fin he dado con el cuello de botella, que es una sincronización entre datos y metadatos que tienen los configlets. Esta sincronización se requiere cada vez que un configlet es accedido o modificado. El proceso de sincronización es lento porque tiene que recorrer todos los configlets, y por cada uno, recorrer todas sus variables y sincronizarlas, además de otras tareas de bricolaje. El proceso puede llegar a tardar hasta cuatro minutos con una configuración relativamente compleja, lo cual es exageradamente lento. La solución al problema es obvia, cambiar el sistema de sincronización y manejar los configlets con una estructura de datos más apropiada. Sin embargo, esta solución implica reescribir una enorme cantidad de código, es el problema de los errores a nivel de arquitectura. Lo que he estado analizando es cómo podría disminuir el problema sin reescribir mucho código, se me han ocurrido varias ideas, pero han tenido resultados desastrosos, en fin, hay que seguir probando…