Archivo de la categoría: Nueva versión

Nuevas versiones de programas

Cronopete, WebTV y Gnome Shell

Desde mi última entrada hasta hoy he hecho unas cuantas cositas, pero no las comenté por aquí por falta de tiempo. Y dado que al final no se ha acabado el mundo, vamos a retomar las buenas costumbres.

En primer lugar, lancé una nueva versión de Cronopete, la 3.6.0, que justo hoy actualicé a la 3.8.1. El principal cambio ha sido un lifting de la interfaz de restauración de ficheros, además de incluir paquetes .deb con las versiones GTK2 y GTK3.

Por otro lado, lancé una nueva versión de Transmission para WebTV, la 5.0. En ella, además de incluir la última versión de Transmission, he recompilado todas las bibliotecas desde cero para tener las más recientes y he sustituido el viejo periscope por mi versión modificada de submarine. Ahora, por fin, vuelven a funcionar los subtítulos. Por desgracia, el autor aún no ha mezclado mis cambios con su rama, así que le he escrito y estoy esperando su respuesta.

Por último, he vuelto a Gnome Shell desde Elementary. El motivo es que necesito tener iconos en el escritorio, y de la forma que trabaja Gala (el gestor de ventanas de Elementary) no es nada cómodo hacerlo: cada vez que un escritorio virtual se queda sin ventanas abiertas, se mueve al anterior automáticamente. Aunque en Gnome Shell ocurre algo parecido (cambia a modo Actividades u Overview) tiene la ventaja de que se pueden añadir extensiones de manera relativamente sencilla. Pero a la vez echaba de menos algunas características de Elementary, así que me lié la manta a la cabeza y escribí dos:

  • Slingshot: se trata de un clon para Gnome Shell del menú lanzador de aplicaciones de Elementary.
  • AvoidOverview: elimina, precisamente, el molesto cambio de modo cuando se cierran todas las ventanas de un escritorio, pero permitiendo que se siga accediendo mediante los hotspots, el botón de Actividades, o la tecla windows.

Reconozco que la elección de JavaScript para crear Gnome Shell me resultaba curiosa al principio, pero ahora que he escrito estas dos extensiones puedo entender los motivos: gracias a la técnica de Monkey Patch, es posible cambiar el funcionamiento de cualquier parte del escritorio sin necesidad de modificar los fuentes originales, porque JavaScript permite modificar en caliente los métodos de un objeto. Esto no es necesario cuando simplemente se quiere hacer un módulo sencillo que incluya un menú, un icono, un botón, etc. pues para ello existe una API muy bien definida. Este es el caso de Slingshot, que no necesita ninguna de estas técnicas.

Sin embargo, para cambiar la forma en que responde el escritorio en funciones muy internas, como hace AvoidOverview, no queda más remedio que usarlas. Y aunque reconozco la potencia y versatilidad que ofrecen, tengo que decir que no me gustan demasiado, porque no puedo evitar ver el resultado como sucio. La apariencia no es la de un módulo que se enchufa en un punto específico mediante una interfaz bien definida, sino la de un parche aplicado con cinta aislante, cortando pistas del circuito impreso, y sujetando todo con una brida.

Pese a todo, en conjunto creo que el resultado ha sido acertado, porque de limitarnos exclusivamente a una API para módulos, probablemente no se podría jamás incorporar un cambio en algo tan profundo como esto. No olvidemos la postura de Gnome de reducir al mínimo las opciones de configuración del escritorio: no creo que aceptasen ni cambiar en la rama oficial el funcionamiento del modo Overview, ni incluir la opción de configurarlo.

Esto le da un nuevo sentido a un comentario que leí sobre Gala, el gestor de ventanas de Elementary OS, que también está basado en la tecnología de Gnome 3 (y que, por desgracia, no recuerdo donde la leí). Venía a decir que lo importante no es tanto el escritorio en sí, sino la tecnología que hay debajo, con mutter y demás, porque con ella se pueden hacer nuevos escritorios con facilidad, como es el caso de Gala o Cinnamon. Y así es: no hace falta que en la rama principal se añadan todas las opciones imaginables, porque es perfectamente posible modificar el funcionamiento interno con bastante facilidad, y simplemente añadiendo unas cuantas extensiones se puede cambiar de arriba a abajo la forma de trabajar del sistema.

Para aquellos que quieran saber cual ha sido mi elección, comentar que, además de AvoidOverview y Slingshot, tengo las siguientes extensiones:

  • Coverflow Alt-tab: cambia el funcionamiento de las teclas Alt+Tab por un cambiador al estilo cover-flow, además de mostrar sólo las ventanas del escritorio actual.
  • Hide Dash: elimina el dash (barra de aplicaciones situada a la izquierda). Lo tengo porque prefiero tener plank en la parte baja de la pantalla.
  • No top-left hot corner: desactiva el hotspot de arriba a la izquierda, que permite entrar en el modo Overview. Necesario porque, si no, es muy fácil que se active cuando se intenta lanzar una aplicación desde Slingshot.
  • Remove Accesibility: elimina el icono de configuración de la accesibilidad. Cabe señalar que es la extensión más descargada para Gnome Shell… por algo será 😉

A mayores también tengo System-Monitor y Workspace navigator, pero esas ya son por gusto propio. Con estas extensiones, y activando Nautilus para que gestione los iconos del escritorio, he podido darle la vuelta por completo a la forma de trabajar de Gnome Shell, ajustándolo exactamente a como yo lo quiero.

Subtitulando

Estos días estoy liado buscando alternativas a periscope para bajar subtítulos de manera automática. El motivo es que no es un proyecto que esté siendo mantenido de manera razonable.

De casualidad encontré subliminal, un programa similar pero con más fuentes de subtítulos, y decidí echarle un ojo. La verdad es que funciona muy bien, pero tiene el inconveniente de que, al igual que periscope, está escrito en python, lo que significa que hay que meter una máquina virtual completa en mi WebTV.

Pero de casualidad encontré submarine, otro programa similar pero escrito en Vala, lo que significa que puedo compilarlo en un ejecutable y ahorrarme todo el interprete de python. Por desgracia, este sólo soporta búsquedas en OpenSubtitles.org y en Podnapisi.net. Sin embargo, su modelo interno es tan sumamente sencillo que he conseguido añadir soporte para SubDB (el cual ya está subido a mi repositorio GIT personal y solicitado un commit al oficial).

Extraoficialmente también he conseguido implementar soporte para BierDopje, pero ese código todavía no lo puedo subir porque sigo a la espera de que me concedan una clave específica para la API (en estos momentos estoy usando prestada la de subliminal, pero cada aplicación tiene que usar la suya propia).

El uso de este portal tiene su complicación, en buena medida porque mientras que SubDB utiliza un hash del archivo para buscar subtítulos, BierDopje pide el nombre de la serie, la temporada y el capítulo. En subliminal se utiliza la impresionante biblioteca guessit, que, a partir del nombre del fichero, y mediante una serie de heurísticos, extrae toda la información posible sobre un fichero. Obviamente dicha biblioteca está escrita en python, así que tuve que hacer una versión de andar por casa en Vala. El concepto básico es el mismo (de hecho, fusilé todo lo que pude), pero, al estar hecha en una noche, no es tan precisa. Obviamente acepto parches para mejorarla.

Para jugar bien

En la entrada anterior explicaba el problema que supone jugar cuando se utiliza un gestor de ventanas por composición. Este problema se describe con más detalle en los artículos The Cost Of Running CompizMutter Can Cause A Gaming/OpenGL Performance Hit Too. El principal motivo es que los programas no pintan directamente sobre la pantalla, sino sobre un buffer oculto, y es el gestor de ventanas el que, de manera periódica, copia dicho buffer a la zona visible.

La solución que proponía era aumentar la prioridad del gestor de ventanas y del servidor X, pero dado que es una operación algo liosa para alguien que no tenga unos mínimos conocimientos, decidí hacer un pequeño programa que lo automatizase. Ese programa se llama GAMEd. La esencia es muy sencilla: tenemos una lista de ejecutables almacenada en /etc/gamed.conf. Cada vez que se lanza el gestor de ventanas y el entorno de escritorio, se llama mediante DBus al demonio GAMEd (y si no estaba lanzado, el propio DBus lo lanza como root). Este demonio recorre la lista de procesos actuales, y cambia su prioridad a cada uno que coincida con alguno de la lista. De esta manera es posible asignar prioridades altas desde el espacio de usuario sin abrir un agujero de seguridad, porque sólo se cambiarán aquellos programas autorizados.

El sistema está diseñado para ser completamente transparente: por defecto asigna prioridad -15, pero se puede utilizar el comando renice_gamed para escoger cualquier otra (podría llegarse hasta -20, pero en el código de un programa similar, AutoNICEd, recomienda no hacerlo, así que GAMEd simplemente redondea a -15 si se pone una prioridad mayor). Dicha prioridad se almacena y se utiliza todas las veces que se llame al demonio, hasta que el usuario la vuelva a cambiar si quiere.

Por otro lado se añade un pequeño script en el arranque del escritorio, que llama al demonio. Esto hace que cada vez que se arranque el ordenador y se entre en la sesión, se ajustará de nuevo automáticamente la prioridad de las X y del gestor de ventanas.

Yo lo he probado en Gala y en Compiz y se nota la diferencia, pero no he podido probarlo en Gnome-Shell por ciertos problemas de compatibilidad de paquetes entre éste y Elementary OS.

Así pues, si jugáis regularmente en vuestro equipo Linux y notáis pérdida de rendimiento y de FPS en vuestros juegos, probad a instalar GAMEd y contadme qué tal os ha ido.

PPAs

Tras arduos intentos, por fin he conseguido crear un repositorio PPA para Cronopete. Gracias a él, los usuarios de Debian, Ubuntu y Elementary OS tendrán mucho más fácil instalarlo. También gracias a esto he conseguido pulir algunos problemillas en los scripts de CMake, para que funcione al 100% la instalación en directorios no estándar.

En cronopete en sí casi no hay cambios, salvo haber añadido soporte de D-Bus activation, para que si no está lanzado, y el usuario hace click en el icono de configuración o de restauración de archivos, se lance automáticamente.

Lo que no he conseguido aún es que, tras instalar el paquete, el sistema pida al usuario reiniciar (y que así se lance Cronopete en el siguiente arranque).

¡A disfrutarla!

Lavado de cara

Después de unos cuantos años con la misma apariencia, y varios comentarios de otra gente, me decidí a cambiar un poco el diseño de mi web. No es que sea un cambio radical, pero al menos está más limpio.

Por otro lado acabo de lanzar la versión 3.4.0 de Cronopete (sí, he decidido usar números de sub-versión impares para las versiones de desarrollo), con varias novedades internas. La principal es que ahora utilizo CMake para compilarlo, por lo que será más fácil que terceros hagan paquetes DEB o RPM. Por otro lado, he simplificado los mensajes y retocado los gráficos, además de portarlo a appindicator. Todo esto con el objetivo de que sea incorporado a Elementary OS en un futuro cercano (o lo que es lo mismo: en la versión siguiente a Luna).

Que la disfrutéis con salud.

FBZX y WebTV

Después de la vorágine de la tesis por fin tengo tiempo libre, así que acabo de subir dos nuevas versiones, una de FBZX y otra de Transmission para WebTV.

En el primer caso hemos corregido algunas instrucciones que todavía no estaban del todo bien. Pero el gran cambio es, sin duda, la completa reescritura de la emulación del AY-3-8912, el chip de sonido polifónico del Spectrum 128. Mi emulación era bastante inexacta, y aunque funcionaba razonablemente bien con código estándar, no lo hacía bien con programas que utilizasen trucos, tales como reproducir sonido PCM variando el volumen de salida. El nuevo código, realizado íntegramente por Fabio Olimpieri, sigue minuciosamente la documentación oficial del chip, y consigue unos resultados excelentes.

Respecto a la nueva versión de Transmission para el WebTV, los cambios son relativamente pequeños: para empezar, actualicé transmission a la versión 2.61, la más reciente; por otro lado ahora se puede navegar por carpetas para descomprimir ficheros, buscar subtítulos y reparar vídeos AVI. Por último, eliminé la generación de depuración en aMule, a ver si así se solucionan los problemas que han reportado algunos usuarios.

De vuelta

Después de unos meses hasta las cejas de trabajo redactando la tesis, por fin tengo algo de tiempo para actualizar cosas, así que acabo de lanzar la versión 3.4 de BitTorrent para WebTV, que, aparte de actualizar a la versión 2.51 de transmission, permite descomprimir de manera fácil ficheros ZIP y RAR. Y también acabo de sacar la versión 2.8.0 de FBZX, que, entre otras cosas, corrige un bug en unas instrucciones poco usadas, pero fundamentales para algunos efectos gráficos de 256 colores. La gran mayoría de correcciones han sido gracias a Fabio Olimpieri. Desde aquí, muchas gracias.

Y por último, he renombrado mi cuenta de GITHUB para poder crear repositorios no sólo para Devede, sino también para FBZX y Cronopete. Así es más sencillo colaborar para todos.

TTOS ya no se cuelga

Acabo de lanzar la versión 1.3.0 de TTOS, el sistema de ventanas ligero para TomTom basado en OpenTom. Esta versión corrige un fallo que hacía que el navegador se reiniciase al imprimir una etiqueta con una línea en blanco (por ejemplo, si se reproducía una canción a la que le faltase información en los tags ID3). El segundo fallo que corrige es que ahora ya funciona correctamente la pausa al reproducir música. Por último, ahora el orden de reproducción de las canciones al seleccionar reproducción aleatoria ya es realmente aleatorio. A mayores incluí una canción de muestra (con licencia libre) para que se pueda probar el sistema rápidamente.

Con estos cambios esta versión ya es 100% funcional, y no queda ningún bug que yo conozca.

Subtitulos automaticos

Acabo de lanzar la versión 3.0 de BitTorrent para WebTV. La gran novedad es que he integrado Periscope, una aplicación para buscar automáticamente subtítulos. Así, si tenemos una serie en versión original sin subtítulos, sólo hay que escoger «Buscar subtítulos», seleccionar el fichero, indicar la lengua en que se quieren, y él solito buscará en varias páginas los subtítulos para ese fichero, basándose en el nombre, tamaño, duración, e incluso HASH.

Esta versión se puede considerar ya como «la definitiva», por lo que, salvo idea feliz, sólo sacaré nuevas versiones cuando se actualice Periscope, Transmission o bFTPd, o para corregir bugs.

Como de costumbre, se puede bajar de la página de BitTorrent para WebTV.

WebTV, ahora con FTP

Ayer saqué la versión 2.1 del cliente BitTorrent y hoy he tenido que sacar deprisa y corriendo la versión 2.2 por un fallito tonto pero que hacía que no funcionase.

Los cambios de ambas versiones son:

  • Permite configurar desde el WebTV la lista de series a bajar por RSS: se acabó editar a mano ficheros de texto crípticos desde tu teclado QWERTY; ahora puedes hacerlo cómodamente desde el sofá de tu casa, con esa delicia de teclado-tipo-móvil del mando a distancia 😛
  • Servidor FTP incorporado: ya puedes acceder con más comodidad desde tu ordenador al disco externo. Eso sí, sólo para lo que esté dentro de la carpeta bg_apps (paranoias de los chicos de azul…). OJO, que está en el puerto 2121.
  • Incluye el código fuente de la aplicación de RSS (distribuida bajo licencia GPL).

Como de costumbre, se puede bajar desde la sección de Transmission para WebTV de mi página web.