Sesión 12 — Demo day y extensiones

Objetivo: consolidar todo lo aprendido, que cada alumno enseñe su variante del sistema funcionando, y abrir caminos para seguir aprendiendo (y para guiar el curso el año que viene). Duración: ~90 min. Qué se ve funcionando al final: una mini-feria de demos. Cada uno arranca su servidor (a estas alturas, en contenedor), enciende el LED real por turnos en la Raspberry de la sala, enseña la pieza de la que está orgulloso (su panel, su tiempo real, su seguridad) y cuenta una extensión que le gustaría hacer.

Requisitos previos

  • Sesiones 1–11 hechas: tienes el sistema completo — servidor FastAPI con GET/POST /led, telemetría, panel web, SQLite, WebSockets, API key con .env, cliente resiliente y todo empaquetado en Docker (11-empaquetar-con-docker).
  • Tu servidor arranca (con uvicorn o docker run) y la Pi puede apuntarle.
  • Una idea, aunque sea vaga, de qué te gustaría seguir construyendo.

Hoy no se escribe código nuevo. Es la sesión de cierre: repasar, enseñar y proyectar.

Recorrido del curso

De localhost a un contenedor portable, una rebanada vertical por semana. Cada sesión añadió algo visible y un fundamento de redes/software:

#SesiónQué quedó funcionandoEl fundamento que entró
000_setup-entorno-y-repoentorno, repo y ./bin/sesion.shterminal, venv, git básico
101-vision-del-proyecto-y-primer-servidordemo final + tu GET /ping en localcliente/servidor, localhost, puerto
202-curl-y-los-verbos-httpenciendes el LedFalso con curlHTTP, GET/POST, headers, body
303-json-y-validacion-pydanticel server recibe y valida JSONJSON, Pydantic, códigos de estado
404-salir-del-localhost-la-red-localun compañero te llama por tu IPIP, LAN, 0.0.0.0, TCP/IP, firewall
505-la-raspberry-como-cliente-y-el-led-realel LED físico obedece al servidorGPIO, SSH, polling, la interfaz Led
606-panel-web-en-el-navegadoruna web con botones controla el LEDfrontend, navegador como cliente, fetch
707-persistencia-con-sqliteel histórico sobrevive a reiniciarbases de datos, SQL, estado durable
808-tiempo-real-con-websocketsel LED reacciona al instantepolling vs push, WebSockets, latencia
909-seguridad-y-secretossolo quien tiene la clave mandaautenticación, secretos, .env, .gitignore
1010-resiliencia-y-manejo-de-erroresse recupera solo cuando algo fallatimeouts, reintentos, logging
1111-empaquetar-con-dockerarranca igual en cualquier máquinacontenedores, imágenes, reproducibilidad

Mira la tabla en perspectiva: empezaste con un servidor que solo se hablaba a sí mismo y has terminado con un sistema cliente-servidor en red, seguro, en tiempo real, persistente, resiliente y portable, que enciende un LED de verdad. Eso es un proyecto real.

Ideas de extensión

Caminos para quien quiera seguir. Cada uno reusa un fundamento del curso y añade uno nuevo:

ExtensiónQué fundamento del curso tocaQué añade de nuevo
Varios LEDs y brillo (PWM)la interfaz Led (Sesión 5), POST /ledPWM, control analógico de un pin, modelar varios actuadores
Leer un sensor real y graficarlotelemetría + panel web (Sesiones 3, 6)un GET /sensor, leer hardware de entrada, graficar en el navegador
Mover un servola interfaz Led → interfaz Actuador, POST (Sesión 5)control de ángulo/posición, generalizar el patrón a otro actuador
Varios nodos Raspberryel cliente de polling (Sesiones 5, 10)varios clientes a la vez, identificar cada nodo, coordinarlos
Autenticación de usuarios de verdadla API key y .env (Sesión 9)login con usuario/contraseña, sesiones/tokens, roles
Sacar el sistema fuera de la LAN (con cuidado)0.0.0.0 y red (Sesión 4), Docker (Sesión 11)registry, despliegue, HTTPS, mucha atención a la seguridad → MOC_GCP
Tests automáticos del servidortoda la API (Sesiones 2–9)pytest, testear endpoints, no romper lo que ya funciona → MOC_Desarrollo_Software

Aviso sobre “sacar el sistema fuera de la LAN”: durante todo el curso vivimos a propósito en red local (192.168.1.x, sin internet) porque es más simple y más seguro. Abrir un servidor a internet sin saber lo que haces es peligroso; es un proyecto serio en sí mismo, no un “añadir una línea”. Hazlo con cabeza y revisando seguridad primero.

Cómo seguir aprendiendo

Según lo que te haya enganchado del curso, por dónde profundizar:

  • Te gustó la parte de redes / HTTP / cómo viajan los datos → fundamentos de redes y sistemas en MOC_CS_Fundamentos.
  • Te gustó programar el servidor / Python / la API → más backend y patrones en MOC_Programacion; cómo trabajar en equipo y por entregables en MOC_Desarrollo_Software.
  • Te picó la curiosidad la API key, los secretos y “¿y si alguien ataca esto?” → seguridad en MOC_Ciberseguridad.
  • Te gustó manejar la Pi, los procesos, los logs → terminal y sistema en MOC_Linux.

No hace falta seguirlos todos. Elige el que te haya dado más curiosidad y tira de ese hilo.

El relevo

El mejor sitio para consolidar lo que sabes es enseñárselo a alguien. Quien ha hecho el curso este año puede guiar a los nuevos el año que viene, y no es un favor altruista: se aprende enseñando. Explicar por qué 0.0.0.0 y no 127.0.0.1, o por qué un timeout salva al cliente, te obliga a entenderlo de verdad — descubres los huecos justo cuando intentas contarlo.

Además, este proyecto es la base del siguiente bloque del itinerario de la asociación: un sistema cliente-servidor en red, con un actuador físico, seguro y empaquetado, es el cimiento sobre el que montar cosas más ambiciosas (más sensores, más nodos, robots de verdad). Los veteranos no solo guían: arrancan ese siguiente bloque con ventaja.

El modelo del curso lo facilita: roles que se rotan entre cuatrimestres (quien guía, quien gestiona las Raspberry, quien apunta dudas). El demo day de hoy es, de hecho, la audición natural para los guías del año que viene.

Guion del demo day

Tiempos orientativos (~90 min). La clave: demos cortas y que el LED real pase por las manos de todos.

BloqueTiempoQué pasa
Montaje0–15cada uno arranca su servidor (uvicorn/Docker), prepara las Raspberry y se anuncian las IPs en el canal de la sala
Rondas de demos15–60turnos de 3–5 min por persona: enseña tu sistema y la pieza de la que estás orgulloso (tu panel, tu tiempo real, tu seguridad)
Turnos del LED real(durante las demos)por turnos, la Pi apunta a TU servidor y enciendes el LED físico delante de todos — 2 min por persona
Foto de grupo60–70con las Pi y los LEDs encendidos; cierre del bloque
Retro70–90qué funcionó, qué mejorar, quién quiere guiar el año que viene

La retro del final, breve y honesta, recoge: ¿qué sesión costó más? ¿qué muro fue el más satisfactorio de superar? ¿qué cambiarías del curso? ¿quién se anima a guiar? Apunta las respuestas: son el material para mejorar el bloque y para arrancar el relevo.

Consejos para que el demo day salga bien

  • Demos cortas. 3–5 min y al siguiente. Mejor que todos enseñen algo a que dos se eternicen.
  • Todo en red local. Igual que siempre: 192.168.1.x, sin internet, sin sorpresas de conectividad el día clave.
  • Prepara las Pi por turnos y con orden. Una sola Pi pasando por todos cunde si hay una lista de turnos clara; no improvises el reparto del hardware sobre la marcha.
  • Ten lista la red de seguridad. Si a alguien no le arranca su servidor en el momento, ./bin/sesion.sh 11 --solucion y a enseñar igualmente: el objetivo es que cada uno presente, no dejar a nadie fuera por un fallo de última hora.
  • Que el LED real lo encienda cada persona. Es la recompensa de todo el curso: un programa tuyo cambia algo en el mundo físico. Que nadie se vaya sin ese momento.

Conexiones