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.

Captura de pantalla de la pantalla de Setup e instalación de ngrok. Muestra un título grande que dice "Download ngrok" y un botón que dice "Download for linux". A la derecha, un listado de distintos sistemas operativos.

Luego de la instalación, hay que autenticarse buscando la contaseña (el Authtoken) en la siguiente sección

Captura de pantalla de la sección "Your Authtoken" de ngrok. Debajo del título hay una serie de caracteres aparentemente aleatorios. Más abajo, hay un título que dice "Command line" y el código "ngrok config add-authtoken" seguido de la misma seire de caracteres.

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:

Captura de pantalla de una terminal. Hay un servicio corriendo y dice "Session Status                online" así como una serie de otras entradas. Una dice "Forwarding" y tiene una dirección web larg que temrina con ngrok-free.app

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.

Captura de pantalla de una ventana de Firefox con un documento de RMarkdown de ese mismo post.

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