Archivo de la categoría: Nueva versión

Nuevas versiones de programas

DeVeDe 3.4

Ayer me tuve que quedar hasta las tantas corrigiendo un par de detalles que quedaban en DeVeDe, pero hoy, por fin, he podido lanzar la versión 3.4. Aparte de las pequeñas novedades (poder usar sonido 5.1 y generar DVDs con GOPs de 12 fotogramas para mejorar la compatibilidad) y errores corregidos (no se podía previsualizar la película si se convertía a DIVX, o no generaba bien las imágenes VCD), el principal cambio ha sido el código: por fin está limpito y ordenado, con lo que añadir nuevas cosas será una bicoca 🙂

Y la primera cosa que tengo que añadir en la próxima versión será el poder mezclar vídeos con diferentes relaciones de aspecto en el mismo disco. En efecto, a última hora de ayer descubrí que si se mete un vídeo con relación de aspecto clásica (4:3) en el mismo título que un vídeo WideScreen (16:9), ambos se verán con el mismo aspecto. Se trata de una limitación del estándar DVD. La solución consiste en meterlos en titlesets diferentes. Por desgracia, no es posible saltar directamente de un titleset a otro, por lo que implementarlo directamente en DeVeDe rompería la posibilidad de saltar de un título al siguiente, o al anterior, etc.

Una solución que probé fue añadir la opción jumppad en el XML de DVDAuthor. Esa opción añade automáticamente algo de código que permite saltar desde cualquier parte del DVD a cualquier parte, sin las limitaciones del estándar. Funcionaba bien, pero para asegurarme rebusqué en google y descubrí que, en ciertos casos, puede romper la compatibilidad con algunos reproductores. En la misma página se explicaban algunos métodos para conseguir lo mismo «manualmente» (básicamente, añadir un menú virtual con una función que salte al título que se le pase en un registro). Por desgracia es algo demasiado complejo como para implementar sin haberlo probado exhaustivamente, así que no irá hasta la próxima versión.

Otros cambios que quiero añadir son, por ejemplo, el soporte de matrices de codificación alternativas, permitir múltiples subtítulos, o poder elegir la pista de audio que se desee cuando el video original tiene varias.

No hay dos sin tres

Nueva versión de GtkPSproc. Algo pasa con Cups, que se empeña en dar error al usar lpadmin para crear una nueva impresora si se especifica un fichero PPD. Afortunadamente GtkPSproc funciona bien sin él, por lo que lo he eliminado, de manera que reciba el PostScript original directamente.

Otra cosa que he descubierto es que el PPD para impresora PostScript genérica creado por FooMatic no pasa la prueba de cupstestppd. Parece que no le gusta que se especifique un parámetro por defecto con el nombre default.

Y por último, parece que python-fam no funciona bien con Python 2.5 en algunos equipos, así que he decidido sustituirlo por python-gamin, que se supone que es lo que se usa hoy en día.

De todas maneras, el código actual de GtkPSproc está demasiado sucio, así que estoy considerando reescribirlo en condiciones (en python, por supuesto), igual que he hecho con DeVeDe. De momento estoy rehaciendo la interfaz con Glade-3, porque no se que ocurre que si cargo el fichero XML de la vieja interfaz (creado con Glade-2) y modifico cualquier cosa, dejan de funcionar los eventos en el programa, como si no ejecutase el signal_autoconnect(). Supongo que será alguna incompatibilidad rara, no se.

Y ya que hablo de DeVeDe, hay noticia: en cuanto reciba los tres ficheros de traducciones que faltan lanzaré la versión 3.4, con soporte completo de sonido 5.1, aunque la verdadera novedad de esta versión es que, por fin, terminé de refactorizar todo el código y ahora ya se puede mirar para él sin sentir verguenza ajena; y lo que es más importante: ahora es extremadamente fácil añadir nuevas opciones de codificación. Espero que en las nuevas versiones se empiece a notar ésto.

¡Tenemos un problema!

A veces los fallos se quedan muy, pero que muy escondidos. Así, la última versión de GtkPSproc tenía uno garrafal que impedía por completo su uso. ¿Y como se me pudo colar? Pues porque sólo aparecía cuando no había un fichero de configuración en la cuenta.

Lo increible es que no me lo comunicaron hasta ayer, cuando esa versión tiene casi un año…

Escribiendo con PyGTK como $DEITY manda

Hoy he lanzado una nueva versión de Z88Transfer. Los cambios observables por los usuarios son más bien pequeños: ahora muestra una barra de progreso durante la transferencia, permite transferir varios archivos de una sola tacada, comprueba más exhaustivamente si un archivo nuevo sobreescribe a uno viejo, y, sobre todo, simplifica muchísimo su uso en windows.

Sin embargo, por dentro los cambios son mucho más radicales, pues prácticamente he reescrito la aplicación. Las razones han sido tres:

  • Por un lado, varias partes del código estaban muy sucias y eran muy poco modulares.
  • Por otra, quería internacionalizar la aplicación, para poder traducirla a otros idiomas (aunque en esta versión todavía no hay traducciones).
  • Por último, quería organizar en condiciones el código de las ventanas poniendo los manejadores de eventos de cada una en su propia clase (haciéndolo así más modular mantenible), además de simplificarlo usando diálogos para los distintos mensajes que pueden aparecer, en lugar de ventanas modales.

La última razón es especialmente importante. En el caso de SuperShow, el código era ya bastante bueno pues es la última aplicación que he escrito hasta la fecha, pero en el caso de Z88Transfer el código era realmente sucio, pues fue la primera aplicación que hice con PyGTK. Sin embargo, gracias a que es una aplicación relativamente sencilla, el código aún era razonable (la transferencia de ficheros y la conversión de formatos van en sendas clases separadas, lo que simplificó la reescritura).

¿Y a qué viene ésto? Pues viene porque también estoy reescribiendo el código de DeVeDe. Cuando comencé a escribir con PyGTK no sabía como generar una única ventana ni como conectar los eventos de ésta con métodos de una clase, pues la documentación del módulo PyGlade era escasa, por no decir nula. El resultado fue que la única manera que tenía de programar era generando una instancia de absolutamente todas las ventanas disponibles en el archivo de Glade, y metiendo todas las funciones de eventos directamente en un único fichero, lo que dio lugar a un código… bueno, llamémoslo caótico (por ser benévolo conmigo mismo), y muy poco mantenible.

Ahora lo veo en retrospectiva y me parece increible que haya sido capaz de escalar el código original de DeVeDe hasta el nivel actual, aunque siendo yo el programador supongo que no tiene mucho mérito. El que sí que tiene mérito es, sin duda, Peter Gill, que lo revisó y modificó para que funcionase también en windows. Un código que fue escrito originalmente como una solución chapucera y rápida para hacerle con comodidad a mi madre una pequeña colección de DVDs con los programas de Arguiñano que bajaba de la mula.

En estos momentos ya he reescrito toda la parte de conversión de vídeos y de generación de la imagen de DVD usando una orientación a objetos bastante razonable, y posiblemente lance una versión sólo con esas modificaciones, pues el nuevo código debería ser mucho más resistente a fallos tontos (el propio Peter, cuando lo revisó para asegurarse de que funcionase en Windows, comentó que sería una tarea muchísimo más sencilla gracias a la nueva arquitectura). El siguiente paso será cambiar a una clase independiente todo el código de la ventana de propiedades de los vídeos, para permitir añadir con más facilidad nuevas opciones de codificación. Por último, meteré en su propia clase la ventana principal y pondré la ventana de selección de tipo de disco como un diálogo. Entonces podré dar por terminada la refactorización del código y seguir añadiendo cosas nuevas.

SuperShow

Finalmente he sacado la versión 2.0 de SuperShow. En ella he pulido la interfaz y he limpiado algo más el código. Entre las novedades está un código Flash muy mejorado, que ahora permite pausar la presentación, retroceder y avanzar, y reproducirla de nuevo cuando termina.

Otra importante novedad es que ahora permite grabar y volver a cargar las temporizaciones. Esto es especialmente interesante porque así es posible generar de nuevo una presentación con una versión posterior de SuperShow, aprovechando las ventajas que traiga (por ejemplo, nuevos controles de la presentación, corrección de bugs en el código Flash…).

Además, ahora la temporización es precisa, y no como en la versión anterior, en que las diapositivas cambiaban aproximadamente en el punto deseado.

Por último, ahora las presentaciones son compatibles con Gnash, el reproductor de Flash libre de GNU. Esto significa que, aún usando un formato propietario, mantengo la libertad de los usuarios. Más que en el código Flash, los cambios para ésto estuvieron en el propio Gnash, y precisamente tengo que reconocer que el equipo del proyecto se ha portado increiblemente bien: no solo resolvieron en un tiempo record los bugs más complicados que notifiqué, sino que admitieron todos los parches que envié para corregir otros bugs que sí eran lo suficientemente evidentes como para que pudiese arreglarlos yo. El resultado es que las presentaciones del nuevo SuperShow funcionarán casi al 100% en la próxima versión estable de Gnash.

Y digo «casi» porque, de momento, el avance, retroceso y pausa no funcionan correctamente debido a un bug en el método que activa un sonido. Sin embargo, están trabajando en ello y seguro que en breve estará implementado. Otro fallo es que, cuando simplemente se especifica un color de fondo en lugar de usar una primitiva o una imagen, Gnash lo pinta de negro (en las presentaciones hechas con Impress, si no se pone ingún fondo, debería ser blanco). Este bug es, por lo que comentan en el Bugzilla, bastante complejo, por lo que, como solución temporal, es recomendable utilizar un fondo hecho con un rectángulo de color que ocupe toda la diapositiva.

Version 4.9 de GAG

Hace un par de días tuve que sacar una nueva versión de GAG, la 4.9. La razón fue que, al cambiar toda la parte de configuración al principio del código, cometí un pequeño fallo: la posición de memoria en donde se almacena el tipo de teclado también quedó desplazada, pero el código de GAG seguía leyendo de la antigua. Para colmo, el instalador metía el valor del teclado en la posición antigua, con lo que el resultado era que, al arrancar GAG desde el instalador, el teclado funcionaba perfectamente, pero en cuanto se instalaba en disco duro y se reiniciaba, pasaba a usar un teclado aleatorio. En mi caso, por puro azar fue siempre QWERTY, por lo que no advertí el error; pero a varios usuarios les tocó el teclado ruso, con lo que se encontrarón con que, una vez instalado, no era posible modificar la configuración (sí podían arrancar los sistemas operativos previamente configurados, porque los números están en las mismas teclas en todas las lenguas).

Nueva versión de GAG

A menos de 15 horas de irme de viaje a Bilbao (¡merecidas vacaciones, proclamo!) acabo de subir la versión 4.8 de GAG.

La verdad es que ha sido una sesión maratoniana para terminar el trabajo de casi tres semanas, durante las cuales hice algunas cosas que tenía que haber hecho hace mucho, mucho tiempo.

Para empezar he escrito una excelente documentación de instalación y uso en HTML (y con multitud de capturas de pantalla), por lo que ahora es mucho más fácil entender como se instala y configura GAG.

También actualicé la FAQ, añadiendo entre otras cosas que también se puede usar GRUB, así como la manera de recuperar el arranque de Linux si se instala GAG antes de meter LILO o GRUB en el superblock de la partición raiz, y algunos detalles más.

Otra sección de la documentación es la de detalles técnicos. Ahí explico el formato de los datos de configuración, así como el formato de los iconos, fuentes de letra, etc. La idea es que otros puedan crear iconos y fuentes de letra para GAG (por ejemplo, para añadir soporte realmente nativo a lenguas como el japonés o el griego).

Respecto a la configuración, la he cambiado de sitio y ahora está siempre al principio del segundo sector del disco duro. Esto significa que ya es posible escribir programas de configuración externos (para, por ejemplo, cambiar la configuración directamente desde un instalador de Linux).

Otra gran novedad es el instalador nativo desde Linux: un simple gag-install /dev/sda instalará GAG en la primera unidad (haciendo las comprobaciones pertinentes para evitar pisar una partición que empiece en donde no deba, claro). También se puede especificar desde la línea de comandos la lengua y el tipo de teclado a instalar.

Y ya por último corregí un par de detalles en los ficheros de lenguas Bable y Turco.

Ahora sólo queda que se me pase el miedo que siempre acompaña a cualquier lanzamiento de GAG: miedo a haber metido la gamba con cualquier tontería y destrozar los datos de medio planeta… O:-)

Nueva versión de DeVeDe

DeVeDe 2.9 está en la calle por fin. La gran novedad es que ahora se puede ejecutar también en Windows, aunque hacen falta unas cuantas dependencias: además de Mplayer, Mencoder, DVDAuthor, VCDImager y MKisoFS para windows es necesario Python, PyGTK, GTK, Pyglade y LibGlade para windows. Ahí es nada. Por supuesto tengo que agradecer a Peter Gill el trabajo realizado, pues ha sido todo obra suya.

Otro cambio ha sido el detectar cuando se produce un error en MKISOFS. En efecto, aunque el código estaba ahí, faltaba poner a TRUE una variable, por lo que si MKISOFS fallaba por cualquier razón, DeVeDe devolvía un mensaje de éxito en lugar de error.

También añadí un aviso sobre el uso de particiones FAT32/VFAT para el directorio de destino: los DVDs de vídeo tienen una estructura de directorios con sus nombres en mayúsculas. Desgraciadamente las particiones FAT32/VFAT no distinguen entre ambas y MKISOFS se hace un lío y falla miserablemente (cinco céntimos de euro a quien adivine qué relación tiene este bug con el anterior 🙂

Por último, y aparte de un fallito tonto en el Drag&Drop, también corregí un problema con ciertos vídeos provenientes de capturadoras de vídeo. Estos vídeos provocan una avalancha de líneas ID cuando se usa la opción -identify de MPlayer, necesaria para conocer la longitud, resolución, etc. del vídeo. En el código original esperaba a que terminase la ejecución de MPlayer y sólo entonces leía el buffer de STDOUT para ver los valores ID, con lo que si había demasiados de éstos el buffer se llenaba y no seguía la ejecución. Ahora voy leyendo las líneas a la vez que se ejecuta, por lo que ya no falla.

Más problemas con los espacios en blanco en DeVeDe

He tenido que sacar la versión 2.5 de DeVeDe rápidamente para corregir un nuevo error con ficheros o directorios que contienen espacios en blanco. Cuando se marcaba un fichero con la opción «Este fichero ya está en un formato MPEG-PS adecuado para discos DVD/xCD», no añadía comillas en el path al crear el enlace o al intentar borrar ficheros viejos con el mismo nombre, por lo que fallaba si había algún espacio en medio.

También corregí otro problema al borrar ficheros temporales: hacía un rm -rf «path/nombre_??_??.mpg» para borrar todos los ficheros temporales de películas, con comillas para que funcione también si hay espacios en el path o el nombre de fichero. Desgraciadamente no tuve en cuenta que, por culpa de las comillas, bash lo toma de manera literal y no expande los comodines, con lo que intenta borrar el fichero nombre_??_??.mpg en lugar de «todos los ficheros que cumplan esa regla».

¡¡¡¡¡Pena de muerte para los que usan espacios en los nombres de fichero!!!!!

Nueva versión de DeVeDe

Inauguraré este blog con el anuncio de la nueva versión 2.4 de DeVeDe. Entre las principales novedades está el poder especificar que un fichero de vídeo ya está en formato MPEG-PS, con lo que DeVeDe no lo volverá a comprimir, sino que lo meterá tal cual en el disco. Esto es especialmente útil cuando capturas algo directamente de la televisión, pues no pierdes calidad.

Otra novedad es que ahora se puede escoger el algoritmo de MBD (MacroBlock Decission), con lo que se puede escoger entre mayor velocidad de conversión o mayor calidad final. También activa el Trellis por defecto (aunque se puede eliminar). Además permite aplicar algoritmos de desentrelazado; especialmente útil para cuando metemos un vídeo que tiene los campos invertidos (aunque en la próxima versión espero añadir una opción para invertir los campos).

Por último, he refactorizado el código para dejarlo un poco más limpio y facilitar el mantenimiento. Por supuesto aún falta mucho por hacer en ese aspecto, pero por algo hay que empezar…

Por cierto: acepto parches para el código 😉