
withTimeout no cancela Thread.sleep(): la trampa de la cancelación cooperativa en Kotlin
2026-10-24·2 tag(s)
Si metes una llamada bloqueante como Thread.sleep() dentro de withContext(Dispatchers.IO), withTimeout() no la cancela aunque salte el timeout. Por qué pasa y cómo arreglarlo con runInterruptible.

Modelos pequeños vs grandes: cuándo el pequeño gana
2026-10-15·3 tag(s)
No todas las tareas necesitan el modelo más grande disponible. Así decido cuándo un modelo pequeño rinde igual o mejor que el más potente.

Extensiones que sustituí por un agente de código
2026-10-13·3 tag(s)
Llevo un año quitando extensiones de mi editor a medida que un agente de código hace lo mismo mejor. Estas cayeron, y estas dos sobrevivieron.

Cómo pido a un agente que escriba tests, no solo código
2026-10-11·3 tag(s)
"Añade tests" suele producir tests que pasan pero no prueban nada útil. Así se lo pido a un agente para que de verdad sirvan de red de seguridad.

Costes reales de usar IA a diario: lo que nadie cuenta
2026-10-09·3 tag(s)
El coste de usar IA a diario no es solo la suscripción. Estos son los costes reales que cuento, y los que la mayoría ignora hasta que sorprenden.

Cómo configuro un agente de código para que no toque mi CI/CD
2026-10-07·3 tag(s)
Un agente con acceso de escritura a tu CI/CD puede romper algo que no se nota hasta el siguiente despliegue. Así delimito ese acceso sin perder autonomía en lo demás.

Cómo divido una tarea grande en pasos que un agente pueda ejecutar bien
2026-10-05·3 tag(s)
Pedir una tarea grande de una vez casi nunca sale bien. Así divido el trabajo en pasos que un agente de código puede ejecutar uno a uno sin perderse.

Por qué el benchmark de un modelo no te dice si te sirve
2026-10-03·3 tag(s)
Un modelo puede liderar todos los benchmarks públicos y rendir peor que otro en tu tarea concreta. Esto es lo que miro en vez de la tabla de puntuaciones.

MCP servers que uso a diario y cuáles descarté
2026-10-01·3 tag(s)
La mayoría de los servidores MCP que instalo acaban desinstalados en una semana. Estos son los pocos que se quedaron, y el filtro que uso para decidirlo.

Por qué un agente rápido no ahorra tiempo si el plan es malo
2026-09-27·3 tag(s)
Con un agente que escribe rápido, planificar parece un lujo que ya no hace falta. Es justo al revés: cuanto más rápido escribe, más caro sale no haber pensado antes.

Cómo estructuro un prompt para Cursor: tarea, límites y criterio de terminado
2026-09-25·3 tag(s)
Un prompt vago en Cursor produce un cambio que "funciona" pero no encaja. Esto es lo que incluyo siempre para que no tenga que adivinar nada importante.

Los tres puntos de control que no me salto al automatizar con IA
2026-09-22·3 tag(s)
Automatizar no es lo mismo que dejar de mirar. Estos son los puntos de control que mantengo en cualquier tarea que delego a un sistema automático.

Embeddings explicados para quien solo quiere usarlos
2026-09-20·3 tag(s)
Un embedding es solo un vector que representa significado. Te explico cómo funciona la búsqueda por similitud y los errores más comunes al usarlos.

Cómo monto un RAG sencillo sin caer en la sobreingeniería
2026-09-18·3 tag(s)
No necesitas una base de datos vectorial ni reranking para tu primer RAG. Este es el pipeline mínimo que necesitas para empezar en un proyecto pequeño.

RAG vs fine-tuning: cuándo tiene sentido cada uno
2026-09-16·3 tag(s)
RAG y fine-tuning no son alternativas intercambiables. Uno resuelve un problema de conocimiento, el otro de comportamiento. Aquí el criterio para elegir.

Vibe coding: por qué la IA te hace sentir más rápido mientras te hace más lento
2026-09-15·3 tag(s)
Los datos dicen que la IA te hace sentir más rápido programando... mientras en realidad te hace un 19% más lento, y casi la mitad del código que genera trae un fallo de seguridad. Esto es lo que hacemos en MOFA Labs para que no nos explote.

Por qué la mayoría de los agentes de IA todavía no son agentes
2026-09-14·4 tag(s)
Casi todo lo que se etiqueta como agente de IA es una llamada a herramientas sin bucle de corrección. Aquí está la diferencia real, y por qué importa.

256 razones para celebrar: la historia real del Día del Programador
2026-09-13
Hoy, 13 de septiembre, es el Día del Programador. Lo sabemos porque en MOFA Labs lo hemos celebrado como se merece: con un capibara tomando mate frente a tres monitores y un commit llamado "fix definitivo (ahora sí)". Pero más allá del meme, esta fecha tiene una historia bastante más curiosa de lo que parece a simple vista — empezando por el hecho de que ni siquiera cae siempre el mismo día.
Nos hemos puesto a investigar de dónde sale esta celebración, por qué el número 256 es la clave de todo,

Few-shot vs zero-shot: cuándo dar ejemplos en el prompt
2026-09-13·3 tag(s)
Los ejemplos en un prompt no siempre ayudan y siempre cuestan tokens. Cuándo merece la pena el few-shot y cuándo el zero-shot es mejor opción.

Context window grande no es lo mismo que memoria
2026-09-11·3 tag(s)
Un context window más grande no significa que el modelo recuerde más. Explico la diferencia real entre ventana de contexto, atención y memoria persistente.

Cómo reducir alucinaciones sin volverte loco probando
2026-09-09·3 tag(s)
No existe un prompt que elimine las alucinaciones. Existe un proceso que las reduce: dar el dato en vez de pedirlo de memoria, verificar y evaluar de forma sistemática.

Cómo escribir un prompt de sistema que no se rompe
2026-09-07·3 tag(s)
Un prompt de sistema es código, y como todo código sin mantenimiento, se pudre. Cómo estructurarlo, versionarlo y evitar que se rompa con cada cambio de modelo.

Cómo reviso el código que genera un agente sin perder media hora en cada PR
2026-09-06·3 tag(s)
Revisar código de un agente como si lo hubiera escrito una persona es perder el tiempo. Esto es lo que reviso en su lugar, y en qué orden.

Qué agentes de código merece la pena dejar sueltos y cuáles no
2026-09-04·3 tag(s)
Dejar un agente trabajando sin supervisión suena a productividad. A veces lo es. A veces es limpiar un desastre al día siguiente.

Windsurf, Cursor, Claude Code: cómo pruebo un IDE de IA nuevo antes de migrarme
2026-09-02·3 tag(s)
Cada mes sale un IDE de IA nuevo que promete ser mejor. Esto es lo que pruebo antes de tocar un proyecto real con él.

Cómo montar un pipeline de revisión de código con IA sin perder el control
2026-08-31·3 tag(s)
Meter un bot de revisión en el pipeline es fácil. Que aporte de verdad y no genere ruido, no tanto. Así lo monto yo.

MCP explicado sin humo: qué resuelve y qué no
2026-08-30·3 tag(s)
MCP no es magia ni lo resuelve todo. Es un estándar para un problema muy concreto: cómo conecta un modelo con tus datos y herramientas sin reinventar la rueda cada vez.

Cómo estructuro un proyecto para que un agente no se pierda
2026-08-28·3 tag(s)
Un agente no falla porque sea tonto, falla porque el proyecto no le da suficiente contexto real. Así organizo los míos para evitarlo.

Zero data retention: por qué OpenAI y Anthropic ya no están de acuerdo
2026-08-26·2 tag(s)
OpenAI promete detectar abusos sin guardar tus prompts. Anthropic exige retenerlos 30 días en sus modelos más potentes, incluso con acuerdo de zero data retention. Qué significa para quien construye con estas APIs.

GitHub Copilot CLI: qué hace bien y dónde se queda corto
2026-08-26·3 tag(s)
Copilot CLI ya no es un autocompletado de comandos. Es un agente de terminal con GitHub metido en el ADN, para bien y para mal.

Claude Code vs Cursor: cómo elijo entre los dos según el proyecto
2026-08-24·3 tag(s)
Uso los dos casi a diario y no son intercambiables. Aquí está el criterio que me hace abrir uno u otro según lo que tengo entre manos.

Cómo decido el siguiente paso de un proyecto personal
2026-08-10·3 tag(s)
Sin un jefe de producto ni un roadmap impuesto, decidir qué tocar a continuación en un proyecto personal es más difícil de lo que parece. Así lo resuelvo.

Lo que ocurre cuando mezclas pesca y programación
2026-08-10·2 tag(s)
Pescar y programar tienen más en común de lo que parece: paciencia, prueba y error, y aceptar que no todo depende de haberlo hecho bien.

Construir en público sin vender humo
2026-08-10·3 tag(s)
Contar avances de un proyecto en público es útil si se cuentan también los límites. Sin eso, construir en público se convierte en marketing disfrazado.

Rutas GPS en primer plano: qué problema intentan resolver
2026-08-09·3 tag(s)
Grabar una ruta GPS en Android en primer plano no es un capricho técnico: es la respuesta a un problema real de batería, permisos y fiabilidad.

Cómo proteger los puntos de pesca en un mapa público
2026-08-09·2 tag(s)
Proteger un punto de pesca en un mapa público no es solo esconderlo: es decidir qué nivel de detalle tiene sentido compartir y con quién.

Qué le falta a muchas aplicaciones de pesca
2026-08-09·2 tag(s)
He probado bastantes apps de pesca y casi todas cojean en lo mismo: utilidad real, privacidad, comunidad, puntos, rutas o moderación. Repaso cada carencia.

Por qué planificar antes de programar no es perder el tiempo
2026-08-08·3 tag(s)
Sentarme a planificar antes de escribir código parece frenar el ritmo, pero casi siempre ahorra más tiempo del que consume. Cuento cómo lo hago.

Qué debe incluir un buen prompt para Cursor IDE
2026-08-08·4 tag(s)
Un buen prompt para Cursor no es una frase ingeniosa, es contexto concreto: qué archivo, qué límite y qué resultado se considera válido.

Automatizar tareas sin perder el control del resultado
2026-08-08·4 tag(s)
Automatizar una tarea repetitiva ahorra tiempo, pero también puede ejecutar un error cien veces antes de que nadie lo note. Así lo tengo en cuenta.

Qué significa trabajar con una regla de no regresión
2026-08-07·3 tag(s)
Una regla de no regresión no es solo «no rompas nada»: es un compromiso concreto sobre qué comportamientos no pueden empeorar sin que alguien lo note.

Cómo documento las limitaciones reales de un proyecto
2026-08-07·3 tag(s)
Documentar lo que un proyecto todavía no hace bien es tan útil como documentar lo que ya funciona. Así organizo esa lista y por qué la mantengo viva.

Qué pruebas hago antes de tocar datos sensibles
2026-08-07·3 tag(s)
Antes de tocar coordenadas, cuentas o cualquier dato sensible reviso una lista concreta de pruebas. Aquí explico cuáles y por qué no me las salto.

Cómo separar una coordenada privada de su representación pública
2026-08-06·3 tag(s)
Guardar la coordenada exacta y mostrar otra cosa distinta al público: así abordo el problema técnico de proteger puntos de pesca sensibles.

Por qué la privacidad cambia por completo una app de pesca con mapa
2026-08-06·2 tag(s)
En una app de pesca con mapa, cada coordenada es información sensible. La privacidad no es un añadido: condiciona el diseño desde el primer día.

Lo que me ha enseñado crear un pequeño quiz Android
2026-08-06·3 tag(s)
Construir FishMind, un quiz pequeño para Android, me ha enseñado más sobre bancos de preguntas y estados de interfaz que sobre pesca.

SEO técnico básico para un blog pequeño
2026-08-04·3 tag(s)
Lo esencial de SEO técnico que reviso en un blog personal pequeño, sin herramientas complicadas ni promesas de resultados que no puedo controlar.

Ghost headless con Next.js: ventajas y complicaciones reales
2026-08-04·3 tag(s)
Por qué elegí Ghost como backend headless y Next.js como frontend para caprini.dev, y los problemas concretos que esa combinación me ha dado.

Qué reviso antes de publicar una herramienta web gratuita
2026-08-03·3 tag(s)
La lista de comprobaciones que aplico antes de dejar pública una herramienta web pequeña: rendimiento, privacidad, errores y casos límite.

Qué convierte una pequeña herramienta web en algo útil
2026-08-03·3 tag(s)
No es la cantidad de funciones lo que hace útil una herramienta web pequeña, sino lo bien que resuelve el único problema que promete resolver.

Cómo construí un generador de códigos QR gratuito
2026-08-03·3 tag(s)
Las decisiones detrás de una herramienta pequeña y gratuita: qué formatos soporta, qué no hace a propósito y por qué la sigo manteniendo.

Lo que estoy aprendiendo al construir Chocheando
2026-08-02·3 tag(s)
Un balance honesto de lo que va bien y lo que no en Chocheando, mi foro propio en construcción, incluida la parte incómoda de la automatización.

Crear un foro de nicho desde cero: las primeras decisiones
2026-08-02·3 tag(s)
Las decisiones técnicas y de estructura que tomé al montar Chocheando, un foro propio todavía en construcción, antes de pensar en tener actividad.

Cómo publicar avances de un proyecto sin convertirlo en spam
2026-08-02·3 tag(s)
La diferencia entre compartir el progreso real de un proyecto y saturar un foro con publicaciones que nadie pidió leer, aunque parezcan lo mismo.

Capturas, icono y gráfico destacado para Google Play
2026-08-01·3 tag(s)
Cómo estoy planteando los recursos gráficos de la ficha de Google Play para Caladero sin maquillar una app que todavía está en desarrollo.

Errores que intento detectar antes de enviar una app a Google Play
2026-08-01·3 tag(s)
La lista de comprobaciones que hago antes de enviar una versión a revisión: no evita todos los rechazos, pero elimina los más tontos.

Checklist para preparar una build release de Android
2026-08-01·4 tag(s)
La lista que reviso antes de generar una build release de Android para no descubrir un fallo de firma o de ofuscación cuando ya es tarde.

Eliminación de cuenta: una función que no conviene dejar para el final
2026-07-31·3 tag(s)
Diseñar la eliminación de cuenta desde el principio evita rediseñar medio backend más tarde. Explico por qué la planteo pronto y qué implica hacerla bien.

Cómo preparo Data Safety sin esperar al final del desarrollo
2026-07-31·3 tag(s)
Rellenar la sección Data Safety a última hora obliga a reconstruir de memoria qué datos toca la app. Explico por qué la llevo actualizada desde el primer commit.

Qué debe explicar la política de privacidad de una app Android
2026-07-31·3 tag(s)
Una política de privacidad copiada de una plantilla no sirve de nada si no refleja lo que la app hace de verdad. Explico qué debe cubrir y cómo la redacto.

Para qué sirve PostGIS en una aplicación con datos geográficos
2026-07-30·3 tag(s)
PostGIS convierte PostgreSQL en una base de datos capaz de responder preguntas espaciales de verdad. Explico para qué lo uso y cuándo no hace falta todavía.

MapLibre o Google Maps: cómo planteo la decisión
2026-07-30·3 tag(s)
Elegir entre MapLibre y Google Maps en Android no es solo una cuestión de coste. Explico los criterios técnicos y de producto que uso para decidir en cada caso.

Una app con mapa no es solamente una app de mapas
2026-07-30·4 tag(s)
Meter un mapa en una app es fácil. Lo difícil es diseñar qué información se guarda, cómo se organiza y qué necesita el usuario más allá de ver puntos en pantalla.

Ubicación aproximada o precisa: cómo decidirlo en Android
2026-07-29·3 tag(s)
Android permite pedir ubicación aproximada o precisa por separado desde hace varias versiones. Explico cómo decido cuál pedir según cada funcionalidad real.

Android Photo Picker: elegir imágenes sin pedir acceso a toda la galería
2026-07-29·4 tag(s)
El selector de fotos del sistema permite elegir una imagen sin que la app pida permiso sobre toda la galería. Explico cómo lo integré y qué límites tiene.

Permisos Android: pedir solo lo necesario y en el momento adecuado
2026-07-29·3 tag(s)
Pedir todos los permisos al abrir la app por primera vez es la forma más rápida de que el usuario desconfíe. Explico cómo decido qué pedir y cuándo pedirlo.

Qué significa desarrollar una aplicación local-first
2026-07-28·3 tag(s)
Local-first significa que la app funciona sin conexión por diseño, no como excepción. Explico el concepto, cómo lo aplico y qué complejidad añade de verdad.

Cómo probar una app Android en un móvil físico con ADB
2026-07-28·3 tag(s)
El emulador no siempre reproduce los mismos bugs que un móvil real. Explico cómo conecto y depuro con ADB en dispositivo físico, con comandos y errores típicos.

Jetpack Compose o XML: qué elegir en una app Android nueva
2026-07-28·3 tag(s)
Elegí Jetpack Compose para mis proyectos nuevos, pero no es una decisión sin matices. Explico los criterios que uso y cuándo todavía tendría sentido usar XML.

Cómo organizo un proyecto Android para no perder el contexto
2026-07-27·3 tag(s)
Con módulos, capas y convenciones claras es mucho más fácil retomar un proyecto Android tras varias semanas sin tocarlo. Cuento la estructura que uso y por qué.

Qué es un ADR y por qué lo uso incluso en proyectos pequeños
2026-07-27·3 tag(s)
Un ADR es un documento corto que registra por qué tomaste una decisión técnica. Explico cómo los uso en proyectos pequeños y por qué me han ahorrado tiempo más de una vez.

Cómo uso Cursor IDE sin perder el control del código
2026-07-27·3 tag(s)
Uso Cursor a diario en mis proyectos, pero reviso cada cambio línea a línea. Cuento el flujo de trabajo que me permite ir rápido sin perder de vista qué hace mi propio código.

FishMind: un pequeño test para descubrir qué tipo de pescador eres
2026-07-21·3 tag(s)
FishMind es un quiz de pesca ya publicado: pruébalo gratis y lee cómo lo construí en Android.

Estoy creando una app de pesca y todavía no sé cómo llamarla
2026-07-14·4 tag(s)
Un mapa para guardar lugares y capturas sin publicar la ubicación exacta por defecto. La aplicación ya funciona en desarrollo y la votación del nombre sigue abierta.

Montar bajos de línea en serie para carpfishing: 8 hair rigs para no improvisar en la orilla
2026-06-08·3 tag(s)
Ocho bajos de carpfishing en serie: hair rig, nudo sin nudo y medidas para caña grande y Resifight 2,20 m — sin improvisar en la orilla.

Primera salida a Siurana: boyas, basses y una visita de los forestales
2026-06-03·1 tag(s)
Primera salida a Siurana (29–31 mayo 2026): coup, cucharilla, fondo fallido y lecciones de puesto, equipo y normativa antes de volver.

Cómo crear un agente IA que coordina tu equipo (sin humo): guía práctica
2026-05-08·1 tag(s)
Guía práctica para diseñar un agente IA que coordine tu equipo con seguridad, métricas y adopción real.

Radar IA (2026-05-07): conectores + MCP + gobernanza, y el fin de la gratuidad de workspace agents
2026-05-07·6 tag(s)
Conectores y MCP convierten a los agentes en operativos. GitHub y xAI empujan gobernanza. OpenAI cambia el coste: workspace agents pasan a créditos.