<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Jose Carlos Moreno Alemán · Blog</title><description>Flutter, arquitectura offline-first, rendimiento y decisiones técnicas que salieron mal.</description><link>https://portafolio-joao-moreno.vercel.app/</link><language>es-PE</language><item><title>Perfilar rebuilds: por qué esa lista salta a 14 fps</title><link>https://portafolio-joao-moreno.vercel.app/blog/perfilar-rebuilds-devtools/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/perfilar-rebuilds-devtools/</guid><description>Cómo encontrar el widget que se reconstruye de más con el Rebuild Stats de DevTools, y las tres causas que explican el 90% de los jank en listas de Flutter.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><category>flutter</category><category>rendimiento</category><category>devtools</category></item><item><title>Remote Config como interruptor de emergencia, no solo para A/B</title><link>https://portafolio-joao-moreno.vercel.app/blog/remote-config-feature-flags/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/remote-config-feature-flags/</guid><description>Firebase Remote Config sirve para apagar una feature rota en producción sin pasar por la revisión de la store. El patrón kill switch y sus trampas.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate><category>flutter</category><category>firebase</category><category>remote-config</category></item><item><title>Cola de sincronización offline: que la app sirva en un ascensor</title><link>https://portafolio-joao-moreno.vercel.app/blog/cola-sincronizacion-offline/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/cola-sincronizacion-offline/</guid><description>El patrón outbox aplicado a Flutter con SQLite: encolar la mutación local, marcarla como pendiente y drenar la cola al reconectar. Sin perder datos.</description><pubDate>Wed, 22 Jul 2026 00:00:00 GMT</pubDate><category>flutter</category><category>sqlite</category><category>offline</category><category>arquitectura</category></item><item><title>Estados de UI con sealed: el compilador te obliga a no olvidar ninguno</title><link>https://portafolio-joao-moreno.vercel.app/blog/sealed-estados-ui/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/sealed-estados-ui/</guid><description>Modelar loading, error y datos con clases sealed y switch exhaustivo. Si añades un estado y olvidas pintarlo, el build falla en vez de la pantalla en blanco.</description><pubDate>Wed, 15 Jul 2026 00:00:00 GMT</pubDate><category>dart</category><category>dart-3</category><category>flutter</category><category>estado</category></item><item><title>Sincronizar SQLite con una API REST sin perder datos</title><link>https://portafolio-joao-moreno.vercel.app/blog/sincronizar-sqlite-api-rest/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/sincronizar-sqlite-api-rest/</guid><description>La cola de escrituras pendientes es la parte que nadie explica en los tutoriales de offline-first. Así la implemento en Flutter.</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><category>arquitectura</category><category>sqlite</category><category>flutter</category></item><item><title>Records de Dart 3: devolver dos valores sin crear una clase</title><link>https://portafolio-joao-moreno.vercel.app/blog/records-retornos-multiples/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/records-retornos-multiples/</guid><description>Cuándo un record reemplaza a una clase de una sola vez y cuándo sigue haciendo falta el tipo con nombre. La regla es la duración de vida del dato.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><category>dart</category><category>dart-3</category><category>records</category></item><item><title>BLoC o Cubit: cómo decido en cada pantalla</title><link>https://portafolio-joao-moreno.vercel.app/blog/bloc-o-cubit/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/bloc-o-cubit/</guid><description>Una regla simple basada en cuántos eventos distintos tiene el flujo, en lugar de decidir por costumbre o por preferencia del equipo.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><category>estado</category><category>flutter</category><category>bloc</category></item><item><title>Encontré el rebuild que me costaba 14 fps</title><link>https://portafolio-joao-moreno.vercel.app/blog/rebuild-14-fps/</link><guid isPermaLink="true">https://portafolio-joao-moreno.vercel.app/blog/rebuild-14-fps/</guid><description>Cómo uso Flutter DevTools para localizar widgets que se reconstruyen sin motivo, con el proceso exacto que sigo paso a paso.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate><category>rendimiento</category><category>flutter</category><category>devtools</category></item></channel></rss>