Archivo por meses: mayo 2008

¡Houston, tenemos un problema!

Al poco de sacar la versión 3.8 de DeVeDe ya he tenido que lanzar la 3.8b para corregir dos fallos en la traducción a italiano y polaco, lo suficientemente graves como para que no funcione el programa 🙁

Tendré que buscar alguna solución para que los traductores puedan probar los ficheros antes de enviármelos. Así evitaremos este tipo de problemas en futuras versiones. El problema es que no quiero enviarles por correo el tocho completo de la nueva versión. A lo mejor a alguno no le hace gracia recibir un mastodonte de más de un mega por sorpresa.
A ver qué se me ocurre.

De dos en dos

Hoy he lanzado dos nuevas versiones de manera simultánea. La primera es la versión 1.3 de HTMLProc, el preprocesador de HTML que utilizo para generar mi página web. Se trata de un cambio casi sin importancia: ya no da un Warning al usar enlaces dentro de la misma página (los famosos a h ref=»#…)

Y para los que se pregunten el por qué de usar un preprocesador, la respuesta es que simplifica un montón de detalles. Por ejemplo, permite hacer #includes de otros ficheros, cosa que, sin él, obligaría a copiar y pegar un montón de código repetido en cada página (y posiblemente teniendo que modificarlo de manera diferente en cada una de ellas), o usar PHP incluso para páginas completamente estáticas. Otro detalle que simplifica es la gestión de las rutas de cada fichero. En efecto, convierte todas las rutas de absolutas a relativas, lo que permite usar el mismo archivo de menús para todas las páginas, aunque estén en directorios diferentes. Por último, añade los campos width y height a las imágenes, con lo que la carga es mucho más eficiente cuando se usan conexiones lentas (vale que hoy en día no es algo tan útil, pues todo el mundo tiene ADSL o cable, pero cuando lo creé sí tenía mucho sentido).

Pasando a DeVeDe, los cambios son realmente muchos. El más visible es, sin duda, el nuevo sistema de menús. En esta nueva versión eliminé el feo recuadro rosa alrededor del título e hice que sea éste el que se ilumine. La razón de no haberlo hecho así al principio era que la imagen con la parte seleccionada tiene que tener un máximo de cuatro colores, cosa que con Cairo no es posible hacer directamente. Sin embargo, Mohojolder me envió un parche en el que conseguía hacer ésto usando convert, una de las utilidades de ImageMagick. Además movió el menú al centro de la pantalla. Aunque la idea era buena, el código no me convencía, así que decidí reescribirlo y, además, permitir que el usuario pudiese escoger donde colocar el menú (arriba, centrado o abajo), y los colores tanto del fondo como de las letras.

El segundo cambio importante es que ahora puede ajustar automáticamente la tasa de bits de los vídeos, de manera que ya no será necesario ir probando valores hasta que consigamos unos que llenen bien el disco. Este cálculo no se hace a la ligera, sino que se tiene en cuenta la resolución final del vídeo (dándole más tasa a aquellos que tienen más resolución), la tasa de audio, el número de subtítulos, y si el vídeo se está recodificando o simplemente copiando. Gracias a esta opción, crear un DVD será tan sencillo como arrastrar los vídeos a la ventana en cada uno de los títulos deseados, pulsar dicho botón, y la estructura estará lista para grabarse.

Y ésto nos lleva al siguiente cambio importante: el soporte de hasta 32 subtítulos diferentes. Ahora ya se pueden tener en un mismo vídeo los subtítulos en castellano, inglés y bielorruso. Además también se puede especificar la lengua en la que están cada uno de ellos, de manera que el reproductor nos lo indicará en pantalla.

Otra novedad muy solicitada es el permitir escoger el flujo de audio que se usará, cuando el archivo original contiene varios audios. Aunque muchos usuarios me piden poder generar discos con varias pistas de sonido, actualmente no es posible porque Mencoder no lo soporta (a menos que alguien del público sepa como hacerlo, claro…).

También permite rotar e invertir los vídeos. Esta opción hará las delícias de los usuarios que quieran pasar a un CD o DVD los vídeos hechos con su móvil y se encuentren con que lo tenían girado. A ésto hay que sumar el permitir mezclar en un mismo disco contenido en formato panorámico y normal, además de permitir generar ficheros DivX en Alta Definición (útil para aquellos que quieran recodificar ficheros Matroska en HD).

También añadí soporte para CPUs de varios núcleos. Este activa el flag de Mencoder que permite que éste use X núcleos en paralelo. Por desgracia, la ganancia no parece ser del doble, sino que está en torno a un 50% más.
Por último, ahora se pueden añadir parámetros extra no sólo del grupo de parámetros independientes, sino también en lavcopts, lameopts y vf. De esta manera es más fácil cambiar la matriz de cuantización u otras acciones.

El resto son novedades menores. Espero que lo disfruteis.

Valencia

Hace unos días estuve en la Guademy. Necesitaba tomarme un par de días de descanso para quitarme de la cabeza el trabajo y las molestias de cuello, y nada mejor que Valencia, a casi mil kilómetros de distancia y con un clima mucho más benigno que el de Vigo para mis cervicales. Un viajecito en avión con escala en los Madriles y directo para la Universidad Politécnica. La verdad es que se nota la diferencia con la de Vigo, aunque sólo sea porque allí todo es llano 🙂 A ver cuando pasamos el Bulldozer por aquí…

Hubo varias charlas, aunque las que más me interesaron fueron, sin duda, tres:

  • La charla sobre GTK 3.0: en ella, Carlos Garnacho nos explicó los grandes problemas que la compatibilidad binaria está suponiendo de cara a añadir nuevas funcionalidades en la versión actual de GTK. El principal problema es que, en muchos casos, se accede directamente a los datos de las estructuras que definen un widget. Eso, unido al sistema que usa Gobject para implementar la herencia obliga a que el orden de los elementos y el tamaño de éstas permanezca invariable. La solución actual consiste en reservar varios punteros, que apuntarán (valga la redundancia) a los nuevos datos que se necesiten en el futuro, con todos los problemas que ésto acarrea. Para solucionarlo de manera definitiva han propuesto convertir en privadas absolutamente todas las propiedades de los objetos que forman los widgets, de manera que cualquier acceso que se quiera hacer «desde el exterior» sea a través de métodos. De esta manera los programas simplemente trabajarán con un puntero a la estructura, sin importarles lo que haya dentro. Han elaborado además un plan de transición que facilite la migración de las aplicaciones.
  • La charla sobre el futuro de QT y WebKit. Aunque adoro GTK, reconozco que el metacompilador de objetos de QT es impresionante. Holger Freyther nos hizo una demostración de como usarlo para ampliar WebKit, permitiéndole acceder a objetos QT desde JavaScript con unas pocas líneas de código. Pero lo que más me gustó y sorprendió fue, sin duda, las nuevas capacidades de concurrencia de QT4, por su elegancia y simplicidad. La idea es aprovechar más los múltiples núcleos de los procesadores actuales, simplificando la creación de procesos concurrentes en los casos más habituales. El sistema que mostró era muy sencillo, pues sólo permitía repetir una misma misma tarea X veces de manera concurrente, cada una con un conjunto de datos diferente (el ejemplo era redimensionar todas las fotografías de una carpeta). Aunque es cierto que no permite hacer cosas complejas, como dependencias (el proceso C sólo debe ponerse en marcha cuando el A y el B hayan terminado), es cierto que es un primer paso hacia el aprovechamiento de los nuevos procesadores en el escritorio.
  • Por último, me gustó mucho la charla de Will Stephenson sobre el Akonade PIM, un gestor de datos personales para KDE con una interfaz DBUS. El problema actual en KDE es que un componente gestiona las direcciones de correo, otro las citas, etc, con lo que el acceso a los datos puede volverse muy lento si lo que se pretende es cruzarlos entre ellos. Además, al ser procesos independientes, el consumo de memoria se dispara. La solución propuesta es Akonade, un pequeño gestor de bases de datos que aglutina toda esa información en un único servidor, y permite hacer búsquedas muy complejas. Lo interesante es que lo que ha «estandarizado» es la interfaz DBUS en lugar del servidor en sí, de manera que ésta se podría implementar en, por ejemplo, Evolution, y los programas de KDE podrían acceder a los datos de Gnome y viceversa de manera sencilla.

Por supuesto, la segunda parte buena fueron las estupendas charlas informales con el resto de la gente en los descansos, durante las comidas, en la cena del sábado y en la playa el domingo. ¡¡¡¡Un saludo a todos!!!!

El resultado es que vengo cargado de nuevas ideas y ganas de seguir programando. Ahora sólo me falta encontrar tiempo material para ponerme 🙂

Volviendo poco a poco

Los que sigan mi blog habitualmente (De ilusión también se vive ¿no? Dejadme que me crea que me lee alguien) habrán notado que he estado más de cuatro meses sin publicar nada; ni entradas ni nuevas versiones. La razón es que en diciembre tuve un golpe con el coche (el clásico «alcance por detrás») que me dejó con un esguince cervical bastante aparatoso. En este tiempo varios usuarios me han enviado una serie de parches para SuperShow y DeVeDe, así que he aprovechado que parece que (¡por fin!) empiezo a estar algo mejor (aunque no todo lo bien que me gustaría) para aplicarlos y lanzar dos pequeñas versiones «rápidas».

Pasando ya a describir los cambios, en SuperShow apliqué varios parches que me envió Pablo Rodríguez. Para empezar, cambió los botones originales, hechos con mapas de bits, por botones vectoriales, con lo que la apariencia de éstos ha mejorado muchísimo. Por otro lado, añadió dos botones extra que permiten saltar directamente a la siguiente diapositiva o a la anterior, complementando a los que permiten avanzar o retroceder la presentación cinco segundos. Por último, también retocó el icono del programa y lo añadió a la ventana de Acerca de y a la barra superior del resto de ventanas. Por mi parte, corregí un pequeño bug que había al volver a reproducir una presentación con el botón correspondiente: al pulsarlo saltaba a la segunda diapositiva en lugar de a la primera.

En el tintero se han quedado dos añadidos muy interesantes. El primero es un contador de tiempos y de diapositivas. Las razones para no ponerlo han sido dos:

  • Para empezar,  el texto aparece algo cortado por la parte superior; Pablo aún no sabe por qué.
  • Por otro lado, la versión actual de SWFC (el compilador de FLASH que usa SuperShow) no soporta añadir sólo un subconjunto de símbolos de una fuente de letras, sino que hay que meter absolutamente todos los que están disponibles en el fichero TrueType, con lo que el tamaño de las presentaciones se dispara. Esto está corregido en la versión de desarrollo, por lo que pronto deberíamos poder incluirlo.

El otro añadido es cambiar el código de renderizado de las diapositivas para que use LibPoppler. La principal razón de no haberlo hecho es que no he conseguido compilar PyPoppler en mi sistema. Cuando esté completamente recuperado me pondré con ello.

Un detalle bastante triste es que se ha perdido la compatibilidad con Gnash. Hicieron algún cambio en el código justo antes de sacar la actual versión estable, y el resultado es que los métodos getDuration y getPosition no funcionan cuando se usa Gstreamer como backend (sí funcionan si se usa SDL). Ya avisé del error y espero que lo corrijan pronto.

Respecto a DeVeDe, había un fallo en la traducción a catalán que hacía que no arrancase cuando se usa esa lengua en el sistema. El traductor me envió un nuevo fichero .po que lo corrige. También apliqué una serie de parches que me envió Peter Gill para la versión de Windows (en Linux funciona bien). Por otro lado, si se cerraba la ventana inicial (la que pregunta el tipo de disco que se quiere crear) ésta desaparecía, pero el programa no se cerraba porque me había olvidado de añadir un callback. Ahora pregunta si queremos salir. Por último, hice un par de cambios en el cálculo de la tasa mínima de vídeo (por sugerencia de otro usuario), de manera que el tamaño final de la imagen de CD/DVD se acerca más al estimado por DeVeDe en la ventana principal.

Nota: ésta entrada la escribí el 17 de abril, pero por despiste la mandé a borradores en lugar de publicarla.