La semana del slider y de git

Bueno. Pues el lunes comencé con el slider, el punto #3 de la entrada anterior (el punto #1 lo hice durante el fin de semana, y el #2 prefiero guardármelo para más tarde).

Todo iba bien, no parecía complicado en exceso. En el lado del motor de reproducción (basado en GStreamer), una llamada a gst_element_seek_simple() en su método set_position(). En el lado de la interfaz, hay que conectarse a las señales sliderPressed(), sliderMoved() y sliderReleased() del slider. Cuando llega esta última, hay que invocar al método set_position() del motor; en sliderMoved() hay que actualizar el texto de las etiquetas en la barra de estado (para que haya indicación visual de la posición a la que se está cambiando).

Pero, no podía ser de otra manera, surgió un problema: gst_element_seek_simple() es asíncrono, es decir, retorna inmediatamente, antes incluso de que la búsqueda se haya realizado. Esto produce que, una vez el usuario suelta el slider, éste vuelva durante un instante a su posición original, para seguir con la nueva a continuación. La solución: conectarse al bus GStreamer para recibir notificación de cuándo se ha realizado de verdad la búsqueda, y no permitir al slider actualizar su posición hasta entonces. Es más código, claro, pero se hace y punto. ;-)

Pero, de nuevo, problemas: si hacía esto, el QTimerWithPause que utilizaba para actualizar segundo a segundo la barra de estado (y que pausaba hasta que se realizaba la búsqueda) parecía quedarse congelado tras reiniciarlo, o sus señales no llegaban a la barra, o qué sé yo. Estuve todo el lunes peleándome con esto, y no conseguí llegar a ningún sitio. Y me bloqueé. Y cuando me bloqueo no soy capaz de ser creativo y buscar otras soluciones, así que me puse a hacer otras cosas (ver abajo). Ayer, por fin, me sentí desbloqueado, y con fuerzas para atacar de nuevo el problema. Y encontré una solución (conectar y desconectar la señal del timer, en lugar de pausarlo). Tarea 559 terminada. \o/


El martes encontré otras tareas con las que desbloquearme. Por un artículo que leí, me decidí a probar Git, el sistema de control de versiones creado por Linus Torvalds. Explico mis experiencias en esta entrada de mi blog (en inglés).

Para seguir probándolo un poco más extensivamente, quise convertir algunos de mis repositorios privados de Bazaar a Git. Para ello, la manera más rápida es usar git-fast-import y un frontend para Bazaar. Como dicho frontend no existía, lo escribí.

¿Mi impresión sobre git? Lo que dicen en este comentario:

Aprender git es como aprender vi: supone un paradigma radicalmente diferente del de cualquier otro sistema de control de versiones o editor que puedas conocer. Pero una vez que superas ese problema, no querrás volver a los anteriores. Nunca.

Y uno es usuario de vim desde hace 7 años...


Ahora, a portar la barra de estado a KDE4!