PENSAMIENTOS Y REFLEXIONES

Blog

Explorando el desarrollo de proyectos, aplicaciones y videojuegos. Reflexiones sobre diseño, productividad y la vida como desarrollador.

Artículos Recientes

Deep links que funcionan: el usuario que pulsa un enlace y no tiene la app

Deep links que funcionan: el usuario que pulsa un enlace y no tiene la app

Un enlace de un email abre la web en vez de la app, o abre la app en la pantalla de inicio y pierde el contexto. Cómo funcionan los universal links y los app links, por qué fallan en silencio y cómo no perder al usuario que todavía no tiene la app instalada.

Hades: cuando morir es avanzar

Hades: cuando morir es avanzar

En casi todos los roguelikes, morir significa perder. En Hades, morir hace avanzar la historia, abre conversaciones nuevas y fortalece al personaje. Cómo Supergiant convirtió la derrota en el motor del juego, y cómo implementar un sistema de eventos narrativos con prioridades.

Aleatorio no es lo mismo que justo: cuándo el juego tiene que hacer trampa con el azar

Aleatorio no es lo mismo que justo: cuándo el juego tiene que hacer trampa con el azar

Un 25 % de crítico puede fallar diez veces seguidas, y el jugador lo vivirá como un bug. Por qué los críticos necesitan pseudoaleatoriedad (PRD, shuffle bags, true hit) mientras que las cajas pueden seguir siendo puro azar.

Idempotencia en APIs: por qué reintentar una petición sin clave de idempotencia es peligroso

Idempotencia en APIs: por qué reintentar una petición sin clave de idempotencia es peligroso

Reintentar una petición HTTP suena inofensivo hasta que duplica un cobro o crea dos pedidos. Cómo funcionan las claves de idempotencia, dónde guardarlas y cómo implementarlas en TypeScript sin acoplarte a un proveedor concreto.

Por qué el escalado multiplicativo no rompe Balatro

Por qué el escalado multiplicativo no rompe Balatro

Balatro deja crecer la puntuación varios órdenes de magnitud en una sola partida y sigue siendo legible. No lo sostienen los jokers: lo sostiene que los requisitos de cada ante escalan igual de rápido.

Doze y el ciclo de vida del proceso

Doze y el ciclo de vida del proceso

El sistema decide cuándo tu app puede trabajar, y esa decisión no la controlas. Doze, los App Standby buckets y por qué programar una tarea no es lo mismo que ejecutarla.

Los permisos de Android cambian según la marca del móvil

Los permisos de Android cambian según la marca del móvil

Xiaomi, Samsung, Huawei... cada fabricante tiene su propio infierno de permisos. Por qué acabas escribiendo un gestor propio y cómo domar las peculiaridades por marca.

Marching Cubes: de voxels a mallas suaves

Marching Cubes: de voxels a mallas suaves

Los voxels cúbicos son fáciles; el terreno suave no. Cómo Marching Cubes convierte un campo de densidad en una malla de triángulos, por qué la interpolación es el truco entero y qué se rompe al meter chunks y LOD.

El viaje de un error: de un 500 del backend al mensaje que ve el usuario

El viaje de un error: de un 500 del backend al mensaje que ve el usuario

Un error atraviesa cuatro capas antes de llegar al usuario: el interceptor HTTP, el mapeo a errores de dominio, la política de comportamiento y la red de seguridad de render. Tres implementaciones (TypeScript, Kotlin y Swift) del mismo patrón.

El roster como recurso: la economía de escasez de Darkest Dungeon

El roster como recurso: la economía de escasez de Darkest Dungeon

En Darkest Dungeon los héroes son consumibles y el pueblo es el verdadero personaje. Un análisis de la gestión de plantilla, el coste de oportunidad y una economía diseñada para que nunca tengas suficiente.

Mostrando 1-10 de 26 artículos