Resaltando cosas en pantalla

Esta historia es un caso de éxito del modelo de código abierto.

Para unos videos que al final no se terminaron, necesitaba una herramienta que me permitiese "resaltar" determinadas cosas en la pantalla. Parecido a lo que hace un puntero durante una presentación, y justamente muchas herramientas para armar presentaciones tienen algo similar a la hora de mostrar esas presentaciones.

Pero yo necesitaba que también sucediera en la pantalla, sobre cualquier programa, para poder resaltar algo en un navegador, en la terminal, en un editor, etc.

Busqué varias alternativas, y no encontré nada. Lo más cercano que encontré es Gromit-MPX, una herramienta que permite realizar anotaciones directamente sobre cualquier escritorio (tanto X11 como Wayland).

Lo probé y efectivamente me dejaba dibujar y escribir sobre la pantalla, pero no tenía esa capacidad de "resaltar" con el puntero del mouse, que es lo que yo quería. Ahí me di cuenta que si yo pudiese reemplazar el puntero del mouse que ponía al estar activa la herramienta (una cruz de tamaño mediano) con un círculo pintado de amarillo con determinada transparencia, eso iba a ser suficiente para mis necesidades.

Y acá está la magia del open source. Yo tenía acceso al código fuente de esa herramienta (hecha en C, usando el framework Gtk/Gdk), entonces sólo ("sólo") era necesario entender cómo funcionaba y luego toquetearlo hasta lograr lo que quería. ¡Todo un desafío!

Hice un fork de ese proyecto. Estudié un poco el código, encontré donde cargaba el "puntero cruz", un archivo en formato XPM; ya fue divertido estudiar ese formato, entenderlo, y ver si me servía para dibujar un círculo amarillo con transparencia. No, no se puede. Ok, metamos una imagen posta, un PNG. Pero ahí ya tuvo que tocar el código en sí para cambiar el archivo de referencia (incluso cuando el proyecto se instala) y especialmente al momento de cargar el cursor en sí:

GError *error = NULL;
GdkPixbuf* paint_cursor_pixbuf = gdk_pixbuf_new_from_file("/usr/local/share/paint_cursor.png", &error);
data->paint_cursor = gdk_cursor_new_from_pixbuf(data->display, paint_cursor_pixbuf, 64, 64);

El resultado fue muy satisfactorio:

El resaltado en acción

Si lo quieren probar, clonan mi repo y luego siguen las instrucciones del README para compilar/instalar:

mkdir build
cd build
cmake ..
make
make install

Después lo ejecutan:

gromit-mpx

Y les va a aparecer una ventanita con un par de pantallas de información e instrucciones. Con F9 (o desde el ícono en la barrita de íconos) lo activan y desactivan.

¡Cuenten si lo usan!

Comentarios Imprimir

Bailando por un subtítulo

Hace muchos años que me nutro de Liberarte (guiño a les que escuchamos Algo Prestado para ver películas y series, más conocido como "me bajo lo que quiero ver de donde puedo".

Cuando Argenteam estaba vivo y tenía justo lo que necesitábamos estaba buenísimo porque coincidía el video/audio con el subtítulo que ofrecían. ¿Pero en el resto de los casos? subdivx es un gran recurso y casi siempre se encuentra lo que se necesita.

Pero no siempre.

A veces hay que hacerle ajustes a los subtítulos que uno baja para ver la peli o serie que descargó. E incluso en los casos donde la sincronía es correcta, hay algún spam, algún subtítulo en particular puede tener error de tiempos, y varios detalles más.

Fuí lidiando con eso primero a mano, luego medio automatizando algunas cosas, y finalmente me creció una herramienta.

Esta que encontré en Bilbao no lleva subtítulos

En estos días finalmente liberé esa herramienta cuyo propósito final es ayudar a procesar subtítulos. Pueden instalarla y usarla con pip o cualquiera de sus similares. Yo uso fades:

$ fades -d substool -x substool -h
Usage:
    substool [help] <command>
...

Tiene varios comandos. El más usado es el check, que realiza un montón de laburo sobre el (los) archivo(s) que indiquemos:

  • si es un .rar o un .zip lo va a descomprimir y extraer su contenido, y luego lo procesa

  • si es directamente un subtítulo (srt, ssa, vtt, tt, sub, o xml), procesa eso

  • lo carga, corrigiendo cualquier encoding bizarro que tenga a UTF-8, si es necesario

  • corrige los tiempos de cada frase si están claramente mal (por ejemplo si arranca y termina al mismo tiempo, o si los tiempos están invertidos)

  • separa en partes lineas que sean extremadamente largas, o frases que tengan demasiadas lineas

  • saca algo de spam

Este comando check es lo primero y básico que le corro al subtítulo que bajo. Siempre.

Los otros comandos ya son más específicos, para cuando la sincronía está mal y hay que ajustarla:

  • shift: para cuando los tiempos están sólo desfasados y hay que subirlos o bajarlos una cantidad de segundos

  • rescale-params: si además hay una diferencia de velocidad, con este comando se pueden especificar un delta de posición y un delta de velocidad

  • rescale-points: también re-escala, pero indicando en qué momento deberían mostrarse dos puntos del subtítulo, y el sistema calcula todo (también muestra como resultado el delta de posición y velocidad que se obtuvo, con lo cual se puede usar el comando anterior sobre otros subtítulos similares)

  • rescale-mimic: si tenemos un subtítulo que calza perfecto pero en otro idioma, este comando nos permite re-escalar usando ese subtítulo correcto como fuente de verdad

  • adjust: para ajustar cada uno de los tiempos si tenemos el subtítulo correcto en el mismo idioma pero en otro formato

Si usan esto me cuentan :)

Comentarios Imprimir

Catando vinos

Para mi último cumpleaños Moni me regaló una cata de vinos.

Fue en el Mercado Gourmet Amparo, sucursal de la zona de Cañitas, donde tienen un primer piso hermoso para tal fin.

La presentación para cada persona

La cata fue comandada por Claudia Piedrabuena, docente de la Escuela Argentina de Vinos y de la Escuela Argentina Sommeliers, y para este caso puntual embajadora de marca de Pernord Ricard, empresa internacional que compró hace unos 20 años a Etchart, marca/bodega argentina bastante conocida.

Etchart es una bodega fundada a mitad del siglo XIX, en Cafayate (Salta), a más de 1600 metros de altura sobre el nivel del mar. Esa altura es clave para lograr los vinos que logran, y aunque no es algo tan tradicional como "Mendoza", bien los valen.

Disclaimer: no voy a "evaluar" los vinos (no soy quién) más que agregar algún detalle puntual, todos eran muy muy ricos (y muy muy caros para el nivel de vinos que manejo).

La cata arrancó con los blancos. El primero era un torrontés (del que cuento más abajo), el otro un Viognier 2022. Los tintos fueron tres, un Cabernet Franc 2022, un Etchart Arnaldo B. Gran Reserva 2020 (blend) y un Assemblage 2022 (Malbec Malbec).

Los vinos, en orden

Vuelvo al primer vino porque resultó que tiene toda una anécdota atrás. Resultó de un hallazgo fortuito, un vino que encontraron en unos depósitos de cemento de antes de que Pernord Ricard comprara la bodega a sus dueños originales. O sea, dijeron "che, qué les parece si aprovechamos esos depósitos de cemento que están ahí desde que compramos esto", fueron, y resultó que uno tenía contenido. ¡Y el vino estaba bueno! Es más, luego de embotellarlo y esperarlo un poco más, mejor. Y es así que terminé probando un torrontés de 32 años. Increíble la consistencia que tenía, era más denso que un vino común... se movía como un whisky bueno en la copa, supongo que es el añejamiento.

En fin, una experiencia muy interesante, da para repetir :)

Comentarios Imprimir