Archivo por años: 2011

RSS para WebTV

Acabo de sacar una nueva versión de Transmission para WebTV. La novedad es que ahora incorpora un cliente RSS, que permite bajar de manera automática los ficheros que queramos tan pronto estén disponibles.

Aunque ya hay varios clientes de este tipo, todos los que encontré estaban escritos en lenguajes de alto nivel, por lo que necesitan bastante memoria. Para evitarlo, he escrito un pequeño demonio directamente en C, de manera que reduzco el consumo de memoria y procesador al mínimo.

De momento hay que configurarlo modificando un fichero de texto, pero en el futuro espero poder hacer que se pueda configurar desde el propio webtv.

Como siempre, está disponible en mi web, en la sección de Transmission para WebTV.

BitTorrent azul

Actualizado. Hace unos meses me compré un cacharrito de BluSens llamado WebTV. Es un aparato bastante interesante, con acceso a una API HTML que permite escribir pequeños módulos para él, como por ejemplo para ver series desde Internet, o leer noticias de feeds RSS…

Sin embargo, a mayores incorpora una interfaz chroot que permite ejecutar binarios nativos, así que, tan pronto salió la última actualización del firmware (el cual corregía un pequeño fallo en este entorno que hacía que sólo funcionase desde pinchos flash, pero no desde discos duros USB), me lancé y porté Transmission BitTorrent.

Esta es una versión muy preliminar, pues aunque Transmission funciona perfectamente, la interfaz para el WebTV aún es muy espartana: simplemente muestra la interfaz web del demonio bittorrent para ver como van las descargas, pero no permite interactuar con ella. Las dos únicas maneras de añadir un torrent son, bien copiándolo a la carpeta /bg_apps/BITTORRENT/autostart, bien desde un PC utilizando la interfaz web (aunque también se puede utilizar la extensión de Firefox add to transmission).

Para versiones posteriores quiero añadir, para empezar, un sistema de descargas a partir de RSS. Ya existen algunos, pero en general están escritos en lenguajes interpretados, lo que añade mucho peso, así que estoy evaluando escribir yo uno en C, usando la biblioteca libevent, que ya trae funciones http de alto nivel. Además, dicha biblioteca también la usa transmission, así que reaprovecharía código y memoria, al ser compartida entre ambos programas.

Se puede descargar desde aquí. En breve le haré su propia página.

Actualización: Acabo de lanzar la versión 1.1, y hecho su propia sección en mi web.

Devede 3.20.0

Acabo de lanzar una nueva versión de Devede. Los cambios son, fundamentalmente, más soporte de opciones de FFMpeg. En concreto, si ahora un vídeo tiene varias pistas de audio, se copiarán todas en el DVD final (al contrario que con Mencoder, que sólo podía ir una). También permite cambiar el volumen (cosa que antes sólo se podía hacer con Mencoder).

En otro orden de cosas, también permite ajustar los márgenes del menú del DVD, para así poder limitar la superficie ocupada por éste y ajustarla a cada imagen concreta.

A mayores hay varias pequeñas correcciones, algunas de ellas enviadas por usuarios hace tiempo, y que se habían quedado descolgadas.

También aprovecho para explicar que la razón de haber añadido soporte de FFMpeg es que hace tiempo que Mencoder ya no está soportado por el equipo de Mplayer, lo que explica la cantidad de problemas que estaba dando últimamente.

FBZX, ahora con ULAPlus

No, no es una coña en plan anuncio, sino que, efectivamente, la versión 2.6.0 de FBZX incluye, como novedad principal, soporte de ULAPlus. Se trata de un curioso diseño (disponible, de momento, sólo en emuladores, aunque están trabajando en un desarrollo «físico» mediante una FPGA) que permite disponer, en un Spectrum, de hasta 64 colores simultáneos en pantalla, de una paleta de 256 colores. Además, se ha diseñado de tal manera que sea fácil recolorear juegos antiguos. Personalmente, los resultados me parecen muy interesantes.

Por otro lado, he subido una nueva versión del paquete .deb de Devede 3.19.0. La razón es que entre las dependencias no estaba python-dbus, por lo que, si no estaba instalado, no funcionaba. No hay ninguna novedad en el código, por lo que el número de versión no cambia.

Cronopete remoto

Nueva versión de Cronopete, esta vez la 2.3.0. Cambios pequeños, pero útiles. El primero ha sido un control remoto mediante D-Bus, que permite controlar Cronopete desde la línea de comandos o desde otros programas. Pero lo más interesante es que también permite controlarlo desde el menú de aplicaciones, lo que es útil si utilizamos un escritorio que no tenga notification area (como Gnome 3), o que lo tenga capado (como Unity).

El otro cambio es una caché de iconos para la interfaz de restaurar archivos. Esta caché permite acelerar notablemente el pintado de los iconos.

A disfrutarla con salud.

 

Devede ha vuelto

¡Y con energía! La primera gran novedad es algo que llevaba tiempo queriendo meter: soporte para FFMpeg. La razón es que no paran de aparecer problemas con Mencoder: que si el codificador AC3 está roto, que si la versión de desarrollo no tira bien, etc. Por eso, ahora, se puede escoger entre ambos, para utilizar el que mejor se adapte.

Otra opción nueva, que me han pedido mucho, es poder escoger que el ordenador se apague cuando termine de generar un disco: de esa manera se puede dejar por la noche trabajando sin que el ordenador se quede luego consumiendo inútilmente tras acabar. Por último, he corregido un par de bugs menores.

Como de costumbre, está disponible en la página de Devede.

Cronopete 2.1.0: pensando en todos

Acabo de lanzar la versión 2.1.0 de Cronopete, que añade una pequeña modificación en el efecto zoom para intentar que vaya mejor en ordenadores lentos.

Para entender el problema, lo primero es explicar como realicé el efecto de zoom. Al principio quería usar clutter, porque se supone que permite hacer cosas como que una ventana se mueva en tres dimensiones y demás, que es justo lo que pretendía. Por desgracia, para poder meter dentro de un actor de clutter un elemento de GTK (en este caso el navegador de ficheros), tenía que trabajar con GTK3, porque en GTK2 no está soportado.

Probé a usar ventanas auténticas, pero el cambio de tamaño para hacer el efecto era lentísimo, por lo que no resultaba. Después de muchas pruebas, me lié la manta a la cabeza e intenté hacerlo de una forma radicalmente diferente. La solución que encontré era tan «simple» como usar la función gdk_pixbuf_get_from_drawable para hacer una captura de la ventana, y usar el pixmap resultante para hacer el efecto de scroll mediante Cairo. Al ser una imagen estática en lugar de un conjunto de widgets, el redimensionado debería ser rápido, incluso haciéndolo por software.

Pero las cosas, por desgracia, no son tan sencillas en la práctica. Cada vez que hacía una captura, me salía un pixmap negro, o con la ventana tal y como estaba antes de cualquier cambio que quisiese reflejar. El motivo es que el redibujado de una ventana en GTK es asíncrono: yo puedo dar la orden de mostrar algo, de cambiar un texto, o de añadir más elementos a una lista, pero hasta que no retorne al bucle principal de GTK, no se llevará a cabo esa acción.

La primera solución que encontré fue aprovechar el temporizador que uso para las animaciones para sacar la captura: así, tras dar la orden de cambiar de carpeta, por ejemplo, marcaba un flag que indicaba que había que hacer una nueva captura, activaba el temporizador y salía del callback, volviendo al bucle principal. En ese momento GTK repintaba toda la ventana, que quedaba lista para ser capturada en cuanto venciese el temporizador.

Esto funcionaba en mi ordenador sin problemas, así que publiqué la versión 2.0.0; pero más tarde, al tener la oportunidad de probarlo en un equipo lento, me encontré con que no iba bien, pues capturaba antes de tiempo. Era obvio que GTK le daba más prioridad a los temporizadores que al redibujado de ventanas, por lo que, en ese equipo, no le daba tiempo a repintar todo.

Pregunté en los foros si GTK emitía alguna señal cuando terminaba de redibujar una ventana, pero nadie respondió, así que decidí probar yo mismo todas las señales que emite un widget, a ver cual me podía ser útil. Probé con damage-event, composited-changed, expose-event, realize, screen-changed y show, antes de encontrar la que parecía la solución a mis problemas: map-event. Pero aunque en el código de ejemplo que hice funcionaba, cuando la probé en el código de cronópete también falló.

Hasta que, al final, revisando otras funciones, encontré la solución en las funciones idle. Estas se ejecutan cuando no queda ninguna tarea por hacer en el bucle principal, así que la solución fue tan sencilla como añadir una función idle que haga la captura: ésta no será llamada hasta que la cola esté vacía, lo que será cuando se hayan procesado todos los eventos de repintado de widgets dentro de la ventana que queremos capturar, o sea, cuando ésta ya esté completamente lista.

Cronopete 2.0, now in glorious 3D!

Ya ha llegado, por fin, la versión 2.0.0 de Cronopete. Sólo tiene una novedad… ¡pero qué novedad! Y es que por fin incorpora una interfaz para restaurar archivos. Hela aquí:

Interfaz de restauracion de archivos de cronopete

Tal y como cabe esperar, las ventanas se mueven adelante y atrás, aunque el efecto no está tan bien conseguido como en el Mac. La razón es que tuve que limitarme a usar Cairo en lugar de Clutter, porque esta última biblioteca sólo permite embeber un widget si se utiliza junto con Gtk3, y cronopete, de momento, utiliza GTK2. Pese a todo, el resultado es bastante resultón (valga la redendoncia).

Con ésto ya se puede considerar a cronopete un programa completo. Para la próxima versión tengo la intención de portarlo a GTK3 (aunque conservando también la versión GTK2). Otra característica que me gustaría meterle es la capacidad de usar un disco remoto para hacer los backups. Pero eso será más adelante.

Y antes de que se me olvide, unas lineas de agradecimiento a Miguel Bouzada por su paciencia como betatester y sus valiosísimas sugerencias.

Barras clásicas

No me convencen las nuevas barras de desplazamiento de Ubuntu. Sin duda son geniales cuando tienes una pantalla pequeña, y de hecho pienso conservarlas en mi portátil, pero en un monitor de 24 pulgadas no tienen tanto sentido, y la verdad es que a veces es molesto no acertar para hacer scroll.

Afortunadamente, encontré en el blog de Andrés Gomez una entrada explicando como volver a las barras clásicas, truco que voy a publicar levemente modificado porque tal y como aparece ahí no funciona.

Abrimos un terminal y tecleamos (pulsando Enter después de cada línea, y teniendo en cuenta que nos pedirá la clave):

sudo su
echo "export LIBOVERLAY_SCROLLBAR=0" > /etc/X11/Xsession.d/80overlayscrollbars
exit

Reiniciamos, y listo, ya tenemos nuestras barras clásicas.

Aunque, como comenta Germán Poo en los comentarios, otra opción consiste en desinstalar el paquete overlay-scrollbar.