22 – asciinema

Bienvenidos al episodio 22 de deployandome, el podcast de tecnología para sysadmins y devops. Soy Rodolfo Pilas y estoy grabando el 7 de noviembre de 2017.

Unas semanas atrás me invitaron a dar una charla interna en la empresa que trabajo, en esa oportunidad hablé de Docker Swarm, que es un tema que trataré seguramente en un próximo episodio de deployando.me, pero en este les voy a contar de mi experiencia con una herramienta que considero una hermosa pieza de software que utilicé en dicha presentación.

Resulta que la presentación requería hacer algunos demos y cualquiera que haya hecho una presentación con un demo que Murphy suele hacerse presente en esos momentos. Es decir hay altas probabilidades que la demo falle en medio de la presentación.

El mítico manual del presentador dice que se se deben evitar los demos en vivo durante las presentaciones. La solución que se sugiere son las famosas “capturas de pantalla”; pero, en los casos que no queda más remedio que hacer una presentación en vivo, el manual del presentador sugiere hacer algún chiste tipo disclaimer para preparar la audiencia para una eventual falla.

En fin, hay que reconocer que los demos en las presentaciones son un stress adicional para el presentador y para la audiencia si es que algo no fluye como se espera.

Entonces, como les decía, me proponía a hacer un demo en vivo como parte de mi presentación de Docker Swarm, pero además del stress del posible fallo, me enfrentaba a algunas tareas que insúmen un tiempo interesante.

Y ahí fue que me acordé de una herramienta hermosa que conocí hace relativamente poco tiempo y que terminó siendo impresionantemente útil para este propósito de hacer un demo en vivo: me refiero a asciinema.

Así que en este episodio de deployando.me me voy a tomar la libertad de desviarme del objetivo del podcast y en lugar de algo para sysadmin y devops voy a hablar de esta este software que es para todos en general.

Asciinema es una solución muy eficiente y liviana para capturar la sesión en la terminal. Permite grabar, tocar y compartir una grabación de la sesión de la terminal en formato JSON.

Notaran que la mayor ventaja sobre otras alternativas para grabar la sesión como Recordmydesktop o VokoScreen es que Asciinema guarda todo el input, output y error en un archivo de texto plano ASCII y agrega las secuencia de escape ANSI en caso de necesitar representar colores o movimientos del cursor.

Entonces el video de la captura de nuestra sesión es un archivo JSON minúsculo, que puede ser fácilmente compartido o guardado.

Pero ademas, en el sitio asciinema.org se puede tener una cuenta donde la captura se publica automáticamente (si no se le indica un archivo local) y se obtiene una URL donde queda disponible nuestra sesión. También desde asciinema.org se puede obtener el código para embeber el video con un player directamente en tu sitio web.

Esto a mi la primera vez que lo vi me provocó una exclamación de “pah”.

Así que para el demo en mi presentación recurrí a asciinema y grabé en archivos locales JSON cada uno de los demos que iba a realizar, pero obviamente cometí errores: siempre algun teclazo errado se escapa, y edité con `vim` el archivo JSON, localicé las lineas con errores y las eliminé.

Si, como lo has oido: edité el video con vim !

Y les comentaba que algunas partes del demo tomaban mucho tiempo ¿recuerdan? y también lo modifiqué: donde decía que el comando antes de ser mostrado esperaba 30 segundos, lo cambié por un valor menor según el feedback que quería provocar.

Pero además, algunas salidas de pantalla donde los procesos de creación de máquinas virtuales pasaban líneas y líneas de salida , dejé algunas y borré la mayoría, cambiándolas por algunas líneas con puntos suspensivos.

El resultado:

  • cero estrés en la presentación
  • cero error ¿es un video, no?
  • ajusté el tamaño de los caracteres de mi terminal y el demo fue presentado en la misma terminal manteniendo toda la configuración que tenía en ese momento
  • la presentación acompañó mi didáctica de presentación en tiempos y lo que se mostró exactamente.

Y al final compartí presentación, notas y videos (en archivos JSON) mediante un repositorio git, con quién lo quisiera clonar.

Quedé muy conforme y por eso, si no conoces asciinema te invito a instalarla y probarla pues es un software que se debe instalar, está disponible como paquete en la mayoría de las distribuciones GNU/Linux, en MacOS se instala con brew. Pero si quieres puedes clonarte su repo Githab y compilarlo tu mismo.

Con el comando `asciinema rec` se comienza a grabar y se finaliza con Ctrl-D. Como no le colocamos un nombre de archivo JSON para guardar, por defecto nos ofrecerá subirlo a asciinema.org.

Les decía que yo edité los tiempos a mano para dar un feedback parecido al real, pero acelerado. Si evitar los tiempos muertos, puedes grabar tu video con el parámetro `-w` y los segundos que deseas; entonces automáticamente puedes demorar lo que quieras entre comando y comando o tecla y tecla, que asciinema usará esos segundos como máximo de espera entre uno y otro. Creo que esto es ideal si damos comando pintando y pegando desde un editor en otra ventana.

Si tienes el video (en archivo local o publicado en asciinema.org) puedes correrlo con `asciinema play` seguido del nombre del archivo JSON o la URL de tu video, y lo verás en tu propia terminal, como cuando lo grabaste.

asciinema es un proyecto de software libre licenciado mediante GPL v3 y que comenzó a principios de 2011 por Marcin Kulik. El sitio web para compartir los videos abrió en Marzo de 2012 y actualmente tiene un desarrollo activo por una importante comunidad de desarrolladores.

asciinema es un conjunto de varios sub-proyectos:

  • el software de linea de comandos para grabar y reproducir videos
  • el sitio web donde los videos se comparten
  • el API por el cual los videos se publican
  • y el player javascript que se ve en el sitio y se puede embeber desde otros lugares de internet.

Soy Rodolfo Pilas, en twitter me siguen por @pilasguru y les dejo un saludo a todos, confiando en que este podcast les haya aportado para mejorar y, como siempre, espero sus inquietudes y sugerencias comentando en deployando.me

Hasta la próxima edición.

Referencias: