Como compartir tu código en tiempo real con livecode y ngrok
Una de las cosas que aprendí de The Carpentries que más me gustan es codear en vivo. Además de obligarme a ir más despacio y permitir que mis estudiantes vean mis errores, simplemente me resulta mucho más divertido que leer diapositivas o ir siguiendo un script ya escrito.
Pero en cuanto empecé a hacer codeo en vivo me encontré con algunos problemas. Durante las clases era muy común que algune estudiante parara la clase para decir que el código no le funcionaba. Entonces tenía que pedirle que copiara el código en el chat para verlo y encontrar el error de tipeo que inevitablemente le estaba dando problemas. Paréntesis no cerrados y nombre de variables mal escritos eran errores comunes que rompían el flujo de la clase y agregaban carga cognitiva y frustración extra sin sumar mucho pedagógicamente.
Para solucionar estos problemas, empecé a compartir el archivo en tiempo real utilizando el paquete livecode de Colin Rundel y el servicio ngrok.
Uso livecode::serve_file("archivo.Rmd", upgrade_content_security_policy = TRUE)
en una terminal corriendo R.
El paquete livecode va a iniciar un servidor que publica el archivo en una IP local y se mantiene actualizado.
Luego en otra terminal uso ngrok http <ip>
para crear una URL pública que comparto a les estudiantes y así pueden ver una versión del archivo que estoy modificando de la cual puede seleccionar el texto.
Instalar y setear ngrok
Una vez que te create una cuenta en ngrok, andá al dashboard y seguí las instrucciones de instalacion según tu sistema operativo.
Luego de la instalación, hay que autenticarse buscando la contaseña (el Authtoken) en la siguiente sección
Lo más fácil es correr la línea de código que muestra ahí en la terminal. Por ejemplo:
ngrok config add-authtoken 1jHXu6CoMQRfdRvLqN9exqUwETs_6kAJC9v7ELubcDk5QHkE5
Y tiene que devolver algo como
Authtoken saved to configuration file: /home/elio/.ngrok2/ngrok.yml
Instalar livecode
Para poder usar livecode con ngrok hay que instalar este fork, que agrega el argumento upgrade_content_security_policy
:
remotes::install_github("nareal/livecode")
Una vez instalado, probá creando un archivo cualquiera en RStudio y corriendo
livecode::serve_file(upgrade_content_security_policy = TRUE)
En la consola de R.
(El argumento upgrade_content_security_policy
es necesario para usar ngrok).
Vas a ver un mensaje como este
#> ✔ Started sharing '2023-10-28-livecode-ngrok-R.Rmd' at 'http://192.168.100.7:32868'.
#> ✖ The current ip address ('192.168.100.7') for the server is private, only users on the same local network are likely to be able to connect.
#> Error: 'markdownExtensions' is not an exported object from 'namespace:markdown'
Y se te va a abrir una ventana de explorador. Nos dice que estamos compartiendo el archivo en http://192.168.100.7:32868/ y nos advierte de que esta dirección es privada y sólo accesible a dispositivos conectados a la misma red local. Esto es lo que vamos a arreglar con ngrok.
Copiá la dirección y abrí una terminal y corré
ngrok http http://192.168.100.7:32868/
(Usando la dirección que te dio livecode).
Te va a aparecer algo así en la terminal:
Lo importante ahí es la dirección que está en la línea que dice “Forrwarding”. Esa es la URL pública que le vas a compartir a tus estudiantes. Si entrás, vas a ver que es una página web con una versión del documento que está en RStudio que se puede seleccionar y copiar.
Consejos
No recomiendo correr livecode::serve_file()
en la misma sesión de R donde se está enseñando.
En vez de eso, abrí una terminal extra, corré R y usá livecode::serve_file("ruta al archivo", upgrade_content_security_policy = TRUE)
.
Las ventajas de esto es que el proceso que publica el archivo es independiente del proceso de R que usamos para enseñar, de modo que no se pierde todo si la sesión de R se cuelga o la reiniciás por alguna razón.
Tené en cuenta que tus estudiantes van a acceder a la versión en disco del archivo, por lo que no van a ver cualquier cambio que no guardes. Podés usar esto para evitar que les estudiantes copien y peguen sin pensarlo. Guardá el archivo al final de secciones donde se terminó de explicar algún concepto y evitá guardar el archivo si estás haciendo algún ejercicio formativo en el que escribís código en pantalla y preguntás cuál va a ser el resultado.
Espero que esta combinación de livecode y ngrok te sea útil para limar las asperezas del codeo en vivo.
Grabé una charla mostrando cómo funciona para CarpentryCon2022 que podés ver acá: https://www.youtube.com/watch?v=idFpvvH1JyI&t=1s