<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>notdefined.dev</title><description>Notas desde las trincheras: Ruby, JavaScript, arquitectura backend y experimentos con IA.</description><link>https://notdefined.dev/</link><item><title>rbush para geocercas: el atajo que me ahorró PostGIS</title><link>https://notdefined.dev/blog/rbush-para-geocercas-el-atajo-que-me-ahorro-postgis/</link><guid isPermaLink="true">https://notdefined.dev/blog/rbush-para-geocercas-el-atajo-que-me-ahorro-postgis/</guid><description>Cómo descarté PostGIS para detectar entrada y salida de geocercas poligonales en un sistema de rastreo vehicular, y por qué un R-tree en memoria con rbush + raycasting terminó siendo más simple, más rápido de leer y suficiente para mi caso real.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>Construí Mi Feria con Expo y el plan gratis me alcanzó</title><link>https://notdefined.dev/blog/construi-mi-feria-con-expo-y-el-plan-gratis-me-alcanzo/</link><guid isPermaLink="true">https://notdefined.dev/blog/construi-mi-feria-con-expo-y-el-plan-gratis-me-alcanzo/</guid><description>Llegué de idea a Development Build corriendo en mi celular sin tocar Android Studio, sin pagar suscripciones, y desde un devcontainer donde mi laptop sigue limpia. Esta es la historia de cómo Expo (con sus límites bien marcados) me alcanzó para construir Mi Feria, mi app de finanzas para el sistema mexicano.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Google Stitch — diseño de interfaces para devs que no son diseñadores</title><link>https://notdefined.dev/blog/google-stitch-diseno-para-devs-que-no-son-disenadores/</link><guid isPermaLink="true">https://notdefined.dev/blog/google-stitch-diseno-para-devs-que-no-son-disenadores/</guid><description>Desde Don&apos;t Make Me Think hasta generar UIs con AI. Cómo usar Google Stitch para prototipar, iterar y crear productos con diseño real sin ser diseñador.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Svelte 5 desde React: menos código, menos excusas</title><link>https://notdefined.dev/blog/svelte-5-desde-react-menos-codigo-menos-excusas/</link><guid isPermaLink="true">https://notdefined.dev/blog/svelte-5-desde-react-menos-codigo-menos-excusas/</guid><description>Construí el dashboard de Inboxed con Svelte 5 viniendo de años en React. Aquí lo que me sorprendió, lo que me atrapó, y por qué no lo cambiaría para este proyecto.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Ruby 4.0 y async: el event loop que le faltaba a Ruby</title><link>https://notdefined.dev/blog/ruby-40-async-el-event-loop-que-le-faltaba-a-ruby/</link><guid isPermaLink="true">https://notdefined.dev/blog/ruby-40-async-el-event-loop-que-le-faltaba-a-ruby/</guid><description>Ruby 4.0 (diciembre 2025) entregó lo que Ruby 3.x prometió: I/O concurrente real con Fibers, Ractor::Port para paralelismo sin drama, y ZJIT que optimiza workloads concurrentes. Te explico cómo funciona, cómo se compara con Node.js, y si puedes usarlo con tu app Rails hoy.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate></item><item><title>SolidJS: el sabor de React sin la amargura</title><link>https://notdefined.dev/blog/solidjs-el-sabor-de-react-sin-la-amargura/</link><guid isPermaLink="true">https://notdefined.dev/blog/solidjs-el-sabor-de-react-sin-la-amargura/</guid><description>SolidJS tiene la sintaxis de React, la performance de Svelte, y no tiene virtual DOM. Si ya sabes React, lo aprendes en un día — y probablemente no quieras volver.</description><pubDate>Sat, 07 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Kamal: deploy de Rails sin la complejidad de Kubernetes</title><link>https://notdefined.dev/blog/kamal-deploy-de-rails-sin-la-complejidad-de-kubernetes/</link><guid isPermaLink="true">https://notdefined.dev/blog/kamal-deploy-de-rails-sin-la-complejidad-de-kubernetes/</guid><description>Kamal (antes MRSK) llega por defecto con Rails 8 y usa Docker en cualquier VPS sin necesitar Kubernetes. Qué problema resuelve, cómo se compara con Heroku/Fly/Render, zero-downtime deploys, y cuándo todavía tiene sentido una plataforma managed.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Hotwire en 2026: ¿el sueño Rails sin JS sigue vivo?</title><link>https://notdefined.dev/blog/hotwire-en-2026-el-sueno-rails-sin-js-sigue-vivo/</link><guid isPermaLink="true">https://notdefined.dev/blog/hotwire-en-2026-el-sueno-rails-sin-js-sigue-vivo/</guid><description>Evaluación honesta después de construir features reales con Turbo y Stimulus. Dónde Hotwire genuinamente brilla, dónde empieza a pelearse contigo, y cuándo el tradeoff vale la pena vs &apos;solo usa React&apos;.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Cómo estructuro una app Rails en 2026</title><link>https://notdefined.dev/blog/como-estructuro-una-app-rails-en-2026/</link><guid isPermaLink="true">https://notdefined.dev/blog/como-estructuro-una-app-rails-en-2026/</guid><description>No es &apos;el Rails way&apos; y tampoco DDD desde cero. Un approach pragmático después de 10+ años: dónde va la lógica de negocio, cómo usar concerns sin crear un desastre, y cómo los nuevos defaults de Rails 8 cambian las decisiones de arquitectura.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Caching en Rails: de cache do a Redis y de vuelta</title><link>https://notdefined.dev/blog/caching-en-rails-de-cache-do-a-redis-y-de-vuelta/</link><guid isPermaLink="true">https://notdefined.dev/blog/caching-en-rails-de-cache-do-a-redis-y-de-vuelta/</guid><description>Rails 8 trae Solid Cache — un backend de caché respaldado por DB sin Redis. Cubrimos el stack completo: fragment caching, Rails.cache, HTTP caching con ETags, Russian doll caching, e invalidación.</description><pubDate>Tue, 16 Dec 2025 00:00:00 GMT</pubDate></item><item><title>GitHub Actions: CI/CD sin el drama</title><link>https://notdefined.dev/blog/github-actions-ci-cd-sin-el-drama/</link><guid isPermaLink="true">https://notdefined.dev/blog/github-actions-ci-cd-sin-el-drama/</guid><description>Una guía de supervivencia, no de referencia. Los conceptos que más tardan en clickear: jobs vs steps vs workflows, needs para ordering, matrix builds, caching correcto, y cómo debuggear sin hacer 40 commits.</description><pubDate>Tue, 02 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Service objects en Rails: cuándo ayudan y cuándo son solo indirection</title><link>https://notdefined.dev/blog/service-objects-en-rails-cuando-ayudan-y-cuando-son-solo-indirection/</link><guid isPermaLink="true">https://notdefined.dev/blog/service-objects-en-rails-cuando-ayudan-y-cuando-son-solo-indirection/</guid><description>La comunidad Rails lleva una década debatiendo sobre service objects y los dos lados tienen razón a veces. Qué problema resuelven realmente, las diferentes formas de implementarlos, y cuándo un módulo simple es suficiente.</description><pubDate>Tue, 25 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Background jobs en Ruby que no te vuelvan a perseguir</title><link>https://notdefined.dev/blog/background-jobs-en-ruby-que-no-te-vuelvan-a-perseguir/</link><guid isPermaLink="true">https://notdefined.dev/blog/background-jobs-en-ruby-que-no-te-vuelvan-a-perseguir/</guid><description>Todos saben usar Sidekiq básico. Lo que nadie te enseña: idempotencia, manejo de errores que no sea retry ciego, timeouts, cómo testear sin mockear todo, y patrones para jobs que llaman APIs externas.</description><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Rate limiting de APIs: más que solo contar requests</title><link>https://notdefined.dev/blog/rate-limiting-apis-mas-que-contar-requests/</link><guid isPermaLink="true">https://notdefined.dev/blog/rate-limiting-apis-mas-que-contar-requests/</guid><description>Fixed window, sliding window, token bucket — tradeoffs reales, no solo definiciones. Dónde enforcer (nginx, app layer, Redis), cómo manejar sistemas distribuidos, y rate limiting por complejidad de operación.</description><pubDate>Tue, 28 Oct 2025 00:00:00 GMT</pubDate></item><item><title>pgvector: usando PostgreSQL como vector store</title><link>https://notdefined.dev/blog/pgvector-postgresql-como-vector-store/</link><guid isPermaLink="true">https://notdefined.dev/blog/pgvector-postgresql-como-vector-store/</guid><description>pgvector lleva en producción desde 2023 y la mayoría de las apps no necesitan Pinecone ni Weaviate. Cómo instalar la extensión, guardar embeddings, buscar por similitud, y cuándo sí necesitas un vector DB dedicado.</description><pubDate>Tue, 07 Oct 2025 00:00:00 GMT</pubDate></item><item><title>El problema N+1 en ActiveRecord: tres formas de resolverlo, una de prevenirlo</title><link>https://notdefined.dev/blog/el-problema-n-mas-1-en-activerecord-tres-formas-de-resolverlo/</link><guid isPermaLink="true">https://notdefined.dev/blog/el-problema-n-mas-1-en-activerecord-tres-formas-de-resolverlo/</guid><description>Todos conocen includes. Pero hay diferencias reales entre includes, preload, y eager_load, y scopes que crean N+1 para quien los usa sin saberlo. Acá está el mapa completo.</description><pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate></item><item><title>Event-driven design: cuándo tu app debe dejar de hablarse a sí misma</title><link>https://notdefined.dev/blog/event-driven-design-cuando-tu-app-debe-dejar-de-hablarse-a-si-misma/</link><guid isPermaLink="true">https://notdefined.dev/blog/event-driven-design-cuando-tu-app-debe-dejar-de-hablarse-a-si-misma/</guid><description>Intro práctica a EDA desde un ángulo DDD. Cuándo las llamadas directas se vuelven un problema, qué son los domain events, y cómo implementarlos en Rails sin pasarte de Kafka cuando no lo necesitas.</description><pubDate>Tue, 09 Sep 2025 00:00:00 GMT</pubDate></item><item><title>API versioning: por qué el versionado en URL no está siempre mal</title><link>https://notdefined.dev/blog/api-versioning-por-que-el-versionado-en-url-no-esta-siempre-mal/</link><guid isPermaLink="true">https://notdefined.dev/blog/api-versioning-por-que-el-versionado-en-url-no-esta-siempre-mal/</guid><description>Header versioning es más correcto en teoría. URL versioning es lo que los equipos realmente shippen de forma confiable. Las cuatro estrategias, sus tradeoffs reales, y cómo manejar deprecación sin romper clientes.</description><pubDate>Tue, 19 Aug 2025 00:00:00 GMT</pubDate></item><item><title>LLM context windows: por qué tu feature de IA es más lento de lo que necesita ser</title><link>https://notdefined.dev/blog/llm-context-windows-por-que-tu-feature-de-ia-es-mas-lento-de-lo-que-necesita/</link><guid isPermaLink="true">https://notdefined.dev/blog/llm-context-windows-por-que-tu-feature-de-ia-es-mas-lento-de-lo-que-necesita/</guid><description>El tamaño del contexto afecta directamente latencia y costo. Cómo medir qué estás enviando realmente, cuándo chunking vs summarization vs retrieval, y por qué streaming cambia el UX aunque el tiempo total sea el mismo.</description><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate></item><item><title>GraphQL en producción: lo que los tutoriales no cubren</title><link>https://notdefined.dev/blog/graphql-en-produccion-lo-que-los-tutoriales-no-cubren/</link><guid isPermaLink="true">https://notdefined.dev/blog/graphql-en-produccion-lo-que-los-tutoriales-no-cubren/</guid><description>N+1 es el problema obvio. Pero hay toda una lista de cosas que te muerden tres meses después de lanzar: pagination, schema versioning, rate limiting por complejidad. Acá está el mapa.</description><pubDate>Tue, 22 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Rust ownership para devs que crecieron con garbage collectors</title><link>https://notdefined.dev/blog/rust-ownership-para-devs-que-crecieron-con-garbage-collectors/</link><guid isPermaLink="true">https://notdefined.dev/blog/rust-ownership-para-devs-que-crecieron-con-garbage-collectors/</guid><description>No es otro tutorial de Rust. Es el cambio de modelo mental para alguien que viene de Ruby o JavaScript: por qué el borrow checker existe, las tres reglas sin jerga de CS, y cuándo Rust es la herramienta correcta.</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate></item><item><title>El event loop de Node.js: el modelo mental que finalmente lo hace clickear</title><link>https://notdefined.dev/blog/el-event-loop-de-nodejs-el-modelo-mental-que-finalmente-lo-hace-clickear/</link><guid isPermaLink="true">https://notdefined.dev/blog/el-event-loop-de-nodejs-el-modelo-mental-que-finalmente-lo-hace-clickear/</guid><description>La mayoría de explicaciones del event loop son demasiado abstractas o demasiado de bajo nivel. Esta es la versión que conecta con problemas reales: por qué setTimeout(fn, 0) no es 0ms, qué es la microtask queue, y por qué el código síncrono bloquea todo.</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate></item><item><title>TypeScript `satisfies`: el operador que debí usar antes</title><link>https://notdefined.dev/blog/typescript-satisfies-el-operador-que-debi-usar-antes/</link><guid isPermaLink="true">https://notdefined.dev/blog/typescript-satisfies-el-operador-que-debi-usar-antes/</guid><description>satisfies llegó en TypeScript 4.9 y la mayoría de devs sigue usando as o anotaciones explícitas. La diferencia es sutil pero evita bugs silenciosos que as nunca va a atrapar.</description><pubDate>Tue, 03 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Solid Queue: background jobs sin Redis</title><link>https://notdefined.dev/blog/solid-queue-jobs-sin-redis/</link><guid isPermaLink="true">https://notdefined.dev/blog/solid-queue-jobs-sin-redis/</guid><description>Rails 8 llega con Solid Queue como backend por defecto para Active Job. Es un queue engine respaldado por tu base de datos. Veamos si es suficiente para tu app.</description><pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate></item><item><title>Docker multi-stage builds: el cambio que redujo el tamaño de nuestra imagen un 70%</title><link>https://notdefined.dev/blog/docker-multi-stage-builds/</link><guid isPermaLink="true">https://notdefined.dev/blog/docker-multi-stage-builds/</guid><description>Un Dockerfile naïve para una app Ruby o Node puede generar imágenes de 2GB. Con multi-stage builds, la misma app puede quedar en 200MB. Te muestro cómo.</description><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate></item><item><title>ActiveRecord scopes vs class methods: cuándo usar cada uno</title><link>https://notdefined.dev/blog/activerecord-scopes-vs-class-methods/</link><guid isPermaLink="true">https://notdefined.dev/blog/activerecord-scopes-vs-class-methods/</guid><description>Parecen intercambiables hasta que no lo son. La diferencia entre scope y class method no es solo de estilo — afecta cómo se comporta el encadenamiento y qué pasa cuando el resultado es nil.</description><pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate></item><item><title>PostgreSQL EXPLAIN ANALYZE: leyendo lo que tus queries realmente hacen</title><link>https://notdefined.dev/blog/postgresql-explain-analyze/</link><guid isPermaLink="true">https://notdefined.dev/blog/postgresql-explain-analyze/</guid><description>La mayoría de los devs corren queries sin leer un solo plan de ejecución. Acá te enseño a leer EXPLAIN ANALYZE sin necesitar conocimientos de DBA.</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Debugging memory leaks en Ruby sin perder la cabeza</title><link>https://notdefined.dev/blog/debugging-memory-leaks-en-ruby/</link><guid isPermaLink="true">https://notdefined.dev/blog/debugging-memory-leaks-en-ruby/</guid><description>El memory bloat en Rails llega despacio y de repente tus pods están reiniciándose cada hora. Acá está el toolkit práctico para encontrar y matar los leaks.</description><pubDate>Tue, 18 Mar 2025 00:00:00 GMT</pubDate></item><item><title>DeepSeek R1 y lo que el momento open-source en LLMs realmente significa</title><link>https://notdefined.dev/blog/deepseek-r1-el-momento-open-source-en-llms/</link><guid isPermaLink="true">https://notdefined.dev/blog/deepseek-r1-el-momento-open-source-en-llms/</guid><description>DeepSeek R1 llegó el 20 de enero de 2025 y rompió el supuesto de que los modelos de razonamiento frontier requieren clusters de $100M. Qué cambió, qué no, y qué significa para developers.</description><pubDate>Tue, 04 Mar 2025 00:00:00 GMT</pubDate></item><item><title>Ruby 3.4: las features que vale la pena conocer</title><link>https://notdefined.dev/blog/ruby-34-las-features-que-vale-la-pena-conocer/</link><guid isPermaLink="true">https://notdefined.dev/blog/ruby-34-las-features-que-vale-la-pena-conocer/</guid><description>Ruby 3.4 salió el 25 de diciembre de 2024. No todo el changelog merece tu atención — acá está lo que realmente cambia cómo escribes código.</description><pubDate>Tue, 25 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Docker: Rapido y Furioso</title><link>https://notdefined.dev/blog/docker-crash-course/</link><guid isPermaLink="true">https://notdefined.dev/blog/docker-crash-course/</guid><description>Si Docker fuera una pelicula, seria esa escena donde presionas el boton de NOS y te mueves a 300 km/hr. Ajusta el cinturon, porque este crash course va directo al grano para que containerices tu codigo como un verdadero Toretto.</description><pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Tailwind CSS v4: lo que realmente cambió y por qué importa</title><link>https://notdefined.dev/blog/tailwind-css-v4-lo-que-realmente-cambio/</link><guid isPermaLink="true">https://notdefined.dev/blog/tailwind-css-v4-lo-que-realmente-cambio/</guid><description>Tailwind v4 salió el 22 de enero de 2025 y rompió bastantes cosas. Te cuento qué cambió, por qué, y cómo migrar sin morir en el intento.</description><pubDate>Mon, 10 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Ruby, Concurrencia y Paralelismo: La Verdad</title><link>https://notdefined.dev/blog/ruby-parallelism-and-concurrency/</link><guid isPermaLink="true">https://notdefined.dev/blog/ruby-parallelism-and-concurrency/</guid><description>Si creias que los threads te darian paralelismo real en Ruby, oops. Hay formas de sacarle jugo a concurrencia y paralelismo con Fibers, Processes y Ractors.</description><pubDate>Thu, 23 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Blocks, Lambdas y Procs: Entendiendo la magia en Ruby</title><link>https://notdefined.dev/blog/ruby-blocks-lambdas-procs/</link><guid isPermaLink="true">https://notdefined.dev/blog/ruby-blocks-lambdas-procs/</guid><description>Si cada vez que te preguntan la diferencia entre blocks, procs y lambdas en Ruby te quedas dudando, este post es para ti. Vamos a ver que son, como funcionan y en que se diferencian, con ejemplos practicos y comparaciones para elegir bien en cada caso.</description><pubDate>Sat, 18 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Ruby Object Model: Un Recordatorio Rapido</title><link>https://notdefined.dev/blog/ruby-object-model/</link><guid isPermaLink="true">https://notdefined.dev/blog/ruby-object-model/</guid><description>Todo en Ruby es un objeto, incluidas las clases mismas. Exploremos como funciona su jerarquia, singleton classes, method lookup y metaprogramacion de forma practica para el dia a dia.</description><pubDate>Wed, 08 Jan 2025 00:00:00 GMT</pubDate></item></channel></rss>