Cliente OBS en Go y aplicaciones JXA con extras de Dock

Aquí hay una actualización rápida de lo que hice hoy en Banco de trabajo donde transmito mi trabajo de innovación de código abierto.

Quería crear un cliente de Go para interactuar OBS, la herramienta preferida para la mayoría de las transmisiones. Hay un complemento que le da a OBS un servidor websocket para realizar solicitudes y obtener eventos con mensajes JSON simples. El proyecto del complemento también proporciona un esquema JSON para todas las solicitudes y mensajes de eventos, por lo que pensé que sería útil para generar tipos en Go. Sin embargo, antes de generar nada quería hacer un cliente básico que funcionara con mapas.

Se necesitaron 45 minutos para ejecutar una instancia de OBS con el complemento. Hasta que comenzó mi transmisión no me di cuenta de que probablemente tendría que reiniciar OBS, lo que mataría la transmisión. Pude ejecutar una segunda instancia pero no cargó el complemento, por lo que Josh, un espectador habitual, sugirió ejecutarlo en otra máquina. Y tenía una máquina con Windows aquí, así que la instalé allí y accedí a ella a través de Escritorio remoto. Casi sigo el camino de ejecutarlo en Docker y acceder a él a través de X11. Esto fue mucho más fácil.

Pasé algún tiempo con un cliente Python existente para asegurarme de que el complemento websocket funcionaba. También tomó un poco de tiempo hacerlo funcionar porque la biblioteca era un poco complicada. Pero funcionó, así que seguí adelante.

Luego comencé con un script de demostración de Go que hizo una conexión e hice su desafío de autenticación lo suficientemente complicado como para ser molesto, todo manualmente. Luego hice la misma solicitud que probé en Python. Funcionó, así que refactoricé el código en un cliente real. El cliente rastrea los ID de los mensajes y enruta los mensajes a los canales de respuesta en espera o al canal de eventos. También maneja la autenticación si el servidor lo requiere.

Esto me permitió limpiar el script de demostración original y aunque no tenemos
tipos de mensajes aún, esta ya es una biblioteca bastante útil.

Obviamente, el siguiente paso es generar tipos, pero podría esperar hasta más tarde porque prefiero comenzar a usar el cliente. Veremos para qué lo estoy usando en la próxima semana.

Otra cosa totalmente no relacionada en la que pasé mucho tiempo al principio del día fue comprender los paquetes de aplicaciones, complementos y formas de empaquetar complementos de MacOS con paquetes de scripts JXA. Los complementos se utilizan para todo tipo de cosas para integrarse con MacOS. Si crea un paquete de aplicaciones con osacompilar, no cargará complementos. Intenté jugar con una extensión para configurar la insignia y el menú de una aplicación en el Dock antes de que se ejecute. Aparentemente, Dock carga dinámicamente extensiones en un proceso que proporciona funciones adicionales de Dock para una aplicación incluso cuando no se está ejecutando. Es por eso que no podré implementar la extensión en JXA, pero al menos logré que funcione en una aplicación que es JXA.

También obtuve una aplicación de ejemplo para construir todas las piezas y trucos sin usar XCode. También usaré esto para un proyecto futuro.