Resumen
En esta segunda parte sobre Ragnarok Online, Mati cuenta cómo llevó a producción, en la nube, un modelo para detectar oportunidades de compra barata en el mercado del juego (comprar barato y vender caro con la moneda virtual "seni"). La estrategia "naive" calcula un promedio móvil y una desviación estándar de los últimos días, y marca como oportunidad los precios por debajo de la banda. Añade un criterio de liquidez y "ganancia diaria". El modelo detecta anomalías, pero en la práctica no genera ganancias: la página scrapeada no se actualiza en tiempo real, hay mucha oferta, hay competencia y alguien ya compró la carta. La mayor parte del episodio describe los obstáculos de ponerlo en producción: IPs de Amazon bloqueadas (se resuelve con proxies gratuitos), límites de Lambda, EC2, IP elástica, roles de IAM, cron, Parquet, S3, Athena y SNS para enviar un correo. Las conclusiones: los proyectos personales de punta a punta enseñan mucho y sirven de portafolio, las ideas que funcionan en papel chocan con la realidad, y conviene hacer preguntas de implementación antes de empezar un proyecto en el trabajo.
Capítulos
- 00:00Intro, ausencia de Rodo y crusero de juegos de mesaRodo está de vacaciones en un crucero de juegos de mesa, al que ya fue el año anterior. Comentan que es muy metódico explicando reglas y que no se lo imaginan disfrutando de la piscina.
- 01:43Videos sobre "suerte" versus "éxito"Mati recomienda un video de un canal sobre si el éxito depende de la suerte o del trabajo duro; opina que mucho éxito depende de la suerte. Otro participante cree que los ejemplos tienen cherry picking, aunque reconoce que ciertos sesgos son lógicos y que no se puede medir cuánto pesa la suerte.
- 04:40Introducción a RO y el problema de negocioPresenta Ragnarok Online, un MMORPG con tiendas de jugadores donde los precios están en "seni". La idea, surgida con un amigo, es hacer un forecast de precios o detectar ítems baratos para comprar y revender, y practicar la implementación productiva.
- 08:13Explorando el mercado de ROSubraya el valor de los proyectos personales para el portafolio. Muestra una página pública con precio de lista y precio transado (por ejemplo, una carta a unos 2,5 millones). Estima que gana unos 300k seni por hora, así que esa carta equivaldría a unas 8 horas de juego.
- 13:11Estrategia "naive" y problema de detección de outliersSe detectan precios outliers por error o urgencia de venta. Calcula el promedio móvil y la desviación estándar de los últimos días (quitando los extremos) y marca como oportunidad lo que cae bajo la banda, con coeficientes ajustables. También usa liquidez y "ganancia diaria".
- 20:19Problemas de las manualidades e idea de automatizar alertasRevisar todas las tiendas a mano es inviable, así que scrapea la página y recibe un aviso. Luego compra y deja vendiendo en el juego, con unos 5 minutos de trabajo manual.
- 23:30Necesidad de usar herramientas cloud y base de datos en AthenaNo puede dejar su PC encendido todos los días, así que usa servicios en la nube de Amazon. Habla de lo enredado que es entender el pricing y de las reglas de billing que configuró. Muestra la tabla en Athena con 6 oportunidades del día, entre ellas la Mantis Card, y compra una carta a 600k para venderla en 700k.
- 33:18Factores que impactan en los proyectos de datosLos factores que hacen fallar el modelo son la liquidez, la competencia, la oferta y la actualización de la página (entre 6 y 24 horas). Recomienda hacer muchas preguntas de implementación antes de iniciar un proyecto en el trabajo, porque descartar a tiempo una idea inviable ahorra esfuerzo.
- 36:58MemesPreguntan en el Discord cuánto cuestan al año las máquinas virtuales y comentan que el pricing de la nube es muy complejo. Mencionan FinOps, los costos inesperados de la nube y memes sobre código desordenado.
- 40:52Explicación del código, algunas decisiones y problemasExplica el script: carga las cartas, itera con scraping, detecta oportunidades y guarda un dataframe en Parquet particionado por fecha de extracción. Cuenta los problemas de formato de columnas, las credenciales mal manejadas y explica los beneficios de Parquet (compresión, almacenamiento columnar, compatibilidad con Athena).
- 45:40Implementación en AWS y problemas de seguridadEl script funciona en local pero no en Amazon, porque la página bloquea las IPs de proveedores cloud. Usa una lista de proxies gratuitos con reintentos, timeouts y una pausa de 2 segundos. La ejecución pasa de 30–40 minutos a 2–3 horas.
- 51:11AWS Lambda para automatización y ejecución de scriptsLambda tiene un límite de 15 minutos y no logra iterar sobre 90 cartas, así que usa una instancia EC2 que Lambda enciende. Necesita una IP elástica para conectar VS Code y roles de IAM con full access. Programa un trigger con cron a las 9 de la mañana, usa un crontab con `@reboot` y un script batch con rutas absolutas y logs, y apaga la instancia al terminar.
- 01:07:19AWS S3 y Athena para almacenar los resultadosLos resultados deben guardarse en una base consultable. S3 guarda los archivos y Athena los consulta con SQL de forma serverless.
- 01:09:10Creación y manejo de archivos ParquetEl script escribe un `tmp.parquet` en la instancia y lo sube a S3 con la fecha en el nombre. La carpeta usa el formato `extracted_day=fecha` para la partición.
- 01:10:26Configuración de tablas en AthenaCrea la tabla desde S3 con partición y tipos de columna que coinciden con los del dataframe, y usa ChatGPT para corregir errores. Usa -1 para indicar dato no encontrado, añade columnas de timestamp y nombre de carta, y recrea la tabla unas 15–20 veces. Reflexiona sobre la programación iterativa frente a planificar de más.
- 01:19:05Implementación de Notificaciones con SNSUsa SNS con un topic y una suscripción por correo. Estima el costo en unos 2 USD por 100.000 notificaciones y lo eligió para aprender, no por ser la opción óptima frente a un bot de Telegram.
- 01:23:10Proceso en Lambda, junto con envío de e-mail.Una segunda Lambda ejecuta la consulta en Athena, obtiene los resultados con el ID de la consulta y publica el mensaje por SNS. Un `return` olvidado le cortó el código, y el correo llega aún sin formato. Probó SMS, pero lo descartó por costo (unos 50 pesos chilenos por mensaje) y por la suscripción de iOS developer. Faltan el trigger y el `ADD PARTITION`.
- 01:29:53RecapitulaciónEl producto final es un correo que solo dice "compra". Explica que hacer el proyecto personal sirve de portafolio y que pierde el miedo a usar la nube. Se anima a todos a lanzarse en AWS, aprender y proponer Terraform como desafío. La parte tres será solo de modelo.
- 01:35:55BillingMuestra el billing de AWS y sus reglas de alerta por presupuesto, con unos 5,81 USD estimados al mes. Gastó unos 5 USD en cada uno de los dos meses anteriores. Habla de bots, de su detección y de las sanciones.
- 01:38:17CierreDespedida y anécdotas sobre bots, sistemas anti-hack, teleport y chat en Ragnarok de hace 20 años. Se responde que el flujo es reutilizable para ejecutar código diariamente. Mati lleva unas 200 horas de juego y verán más adelante cada cuánto se vende la carta comprada.