Resumen
El episodio 131 es la quinta sesión de la serie sobre productivización. Explica para qué sirve el archivo `.env`: guardar credenciales y rutas que cambian según el usuario o la máquina, y que no se suben al repositorio. Muestra cómo cargarlo en Python con `python-dotenv` y en R con una librería equivalente. Luego revisa un Dockerfile ampliado (Ubuntu 22.04, R, RStudio, Java) con `ENTRYPOINT` y `CMD`, de modo que el contenedor ejecute el pipeline apenas se enciende. Se discute la diferencia entre imagen y contenedor, el uso de `docker commit` y el trabajo con Dev Containers, con reservas sobre la reproducibilidad. Tras una sección de memes sobre código generado con IA, se presenta Great Expectations (GX Core) para validar la calidad de datos, y se muestra su Setup. Conclusiones: usar variables de ambiente para datos sensibles y rutas, fijar el ejecutable en `ENTRYPOINT` y los parámetros en `CMD`, y adoptar GX con una plantilla de Setup reutilizable.
Capítulos
- 00:00IntroPresenta la quinta sesión de productivización con tres temas: el archivo `.env`, `ENTRYPOINT`/`CMD` en el Dockerfile y Great Expectations, una herramienta para analizar la calidad de los datos y lanzar alertas.
- 01:01Importancia del archivo .env y qué incluir en ésteEl `.env` guarda variables de ambiente como contraseñas, usuarios, credenciales y rutas (por ejemplo `DATA_PATH`), y va en el `.gitignore`. Se comentan medidas de seguridad como encriptar el disco y bloquear credenciales si roban el equipo. También se habla de la huella digital y el reconocimiento facial. Las rutas permiten que el código funcione igual en local y en un servidor, y se puede guardar la ruta a una llave `.pem` en vez de la llave.
- 08:21Recordatorio de proyecto de ejemploRepasa el proyecto, que viene de un notebook separado en carpetas de preproceso y modelos, cada una con inputs y outputs. Tiene un pipeline de ejecución con logs y argumentos por línea de comando, como el periodo de datos. Se discute si el `.env` podría ser un archivo de config y se aclara que el `.env` es para valores que dependen del usuario o la máquina, o que no deben comitearse.
- 11:16Creación y uso de un .envInsiste en no poner usuario, contraseña, llaves ni tokens (por ejemplo de ChatGPT) en el código, aunque el repositorio sea privado. Un credencial borrado sigue en el historial de git. Muestra `load_dotenv()` (devuelve `True` si encuentra el archivo) y `os.getenv` para leer variables como usuario, contraseña y ruta del archivo de configuración. Recomienda ponerlo en la carpeta raíz del proyecto, y en R se usa la librería `dotenv`.
- 16:41Creación y uso de DockerfileRepasa el Dockerfile simple basado en Python (carpeta de trabajo, ambiente virtual, instalación de `requirements`, `COPY`). La versión ampliada parte de Ubuntu 22.04 e instala Docker, Nano, R, RStudio y paquetes de Java para usar Python y R en la misma sesión. Advierte sobre exponer puertos (una vez le reventaron el presupuesto de una máquina virtual) y recomienda una VPN o red privada y controlar el tráfico inbound y outbound.
- 21:05Entrypoint y CMD en DockerEl `ENTRYPOINT` apunta a un script de shell que hace `echo` de los parámetros (`$@`) y ejecuta con Python el pipeline p01. El pipeline aplica el modelo ya entrenado con datos de un periodo. Responde una pregunta del chat sobre usar Docker como terminal en un hosting. Se comparan `subprocess` y `os.system` para encadenar scripts.
- 28:47Docker buildConstruye la imagen con `docker build -t`, que reutiliza capas ya construidas y por eso tarda poco. Durante la sección hay problemas de conexión de Discord y comentarios sobre el PC del streamer.
- 30:48Docker run con Entrypoint y CMDAl hacer `docker run` se ejecuta el script directamente, pero el pipeline falla porque falta `python-dotenv` en el `requirements`. Lo agrega y reconstruye. Explica que `ENTRYPOINT` y `CMD` permiten automatizar ejecuciones periódicas, por ejemplo mensuales. El `ENTRYPOINT` queda fijo y el `CMD` aporta los parámetros, como la fecha, que se pueden cambiar con `docker run`.
- 34:39Docker commit y desarrollo dentro de un dockerUna pregunta sobre cómo conservar los cambios hechos en un contenedor lleva a explicar imagen y contenedores. Los cambios persisten mientras no se borre el contenedor, y `docker commit` crea una imagen nueva. Se menciona la extensión Dev Container y un regalo de suscripción de Coco. Se advierte que una imagen comiteada no es reproducible y que solo sirve para emergencias. Una alternativa reproducible es trabajar en Dev Container y comitear al repositorio de git. También se mencionan Codespaces, GitHub Actions y Bitbucket Pipelines.
- 45:12Anuncio de oportunidad de trabajoSe busca a alguien con cerca de un año de experiencia construyendo aplicaciones de IA generativa (LangChain, API de OpenAI). Valoran sobre todo un portafolio propio, no copiado de internet. Es en Santiago de Chile, con presencialidad una vez a la semana. Se pide contactar a Cris por Discord o LinkedIn.
- 48:34MemesRecuerda el canal de Twitch (martes de 7 a 9 pm, hora de Chile) y el Discord. Sostiene que el `.env` no es a prueba de todo pero es mejor que poner credenciales en el código, y recomienda usar un gestor de contraseñas (menciona Bitwarden con su CLI). Hay una charla sobre automatizar solo lo que vale la pena y sobre que producción suele correr en contenedores (Docker o Kubernetes). En los memes se debate que ChatGPT acelera a quien sabe y que hay que entender el código generado, y se menciona el "vibe coding".
- 58:32Overview de Great ExpectationsPresenta GX Core (open source) y GX Cloud (de pago). Describe sus partes: Data Context, Data Sources, Data Assets, Batch Definitions y Batch. Las Expectations se agrupan en Expectations Suite y se ejecutan con un Validator. Los resultados quedan en JSON, los Checkpoints disparan validaciones, las Actions envían alertas y los Data Docs documentan los datos. Responde preguntas sobre quién define los umbrales (el negocio, apoyado por lo técnico), la diferencia con gobernanza de datos y el uso en varias etapas del pipeline. Es agnóstica del lenguaje y comenta que la versión actual ya no tiene la generación automática de suites.
- 01:12:53Set up de Great ExpectationsMuestra un script que crea el Data Context, lo convierte en archivo (`file_context`) en la carpeta `gx`, agrega un Data Source de pandas y un Data Asset de contratos, y define una Batch Definition de todo el dataframe. Crea una expectation con `expect_column_values_to_be_between` y la valida sobre el batch. Sobre volumen de datos, propone dividir en batches por día, hora o minuto, y la próxima sesión mostrará la ejecución. También responde preguntas sobre la dificultad y los roles que lo implementan.
- 01:22:58CierreResume que hay que usar variables de ambiente para datos sensibles, que el `ENTRYPOINT` va fijo y el `CMD` lleva los parámetros, y que GX es útil para calidad de datos, aunque su Setup es trabajoso. Invita a suscribirse y a unirse al Discord.