<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Octavio Martinez</title>
    <description>The latest articles on Forem by Octavio Martinez (@zenx5).</description>
    <link>https://forem.com/zenx5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2378297%2F99ff7612-91f1-44db-9cba-6fa05470c534.jpeg</url>
      <title>Forem: Octavio Martinez</title>
      <link>https://forem.com/zenx5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/zenx5"/>
    <language>en</language>
    <item>
      <title>Un Bug en la Física: Cómo las Clases Abstractas me Ayudaron a Resolver una Paradoja Temporal</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Mon, 15 Dec 2025 23:33:30 +0000</pubDate>
      <link>https://forem.com/zenx5/un-bug-en-la-fisica-como-las-clases-abstractas-me-ayudaron-a-resolver-una-paradoja-temporal-491n</link>
      <guid>https://forem.com/zenx5/un-bug-en-la-fisica-como-las-clases-abstractas-me-ayudaron-a-resolver-una-paradoja-temporal-491n</guid>
      <description>&lt;p&gt;Llevo 5 años escribiendo código en React, Node, TypeScript, Vue... &lt;br&gt;
lo usual para un fullstack. Pero el &lt;strong&gt;13 de diciembre de 2025&lt;/strong&gt; publiqué &lt;br&gt;
algo que nunca imaginé: &lt;em&gt;un paper de física teórica sobre dimensiones &lt;br&gt;
temporales múltiples&lt;/em&gt;. Y no, no cambié de carrera. Esta es la historia &lt;br&gt;
de cómo las habilidades de programación pueden aplicarse a problemas &lt;br&gt;
de física fundamental.&lt;/p&gt;

&lt;h2&gt;
  
  
  El Problema Fascinante
&lt;/h2&gt;

&lt;p&gt;Las dimensiones temporales múltiples, es una propuesta cuyo pionero es el doctor en fisica &lt;strong&gt;Itzhak Bars&lt;/strong&gt;, que plantea la hipotetica idea de que nuestro Universo y en especial el tiempo que percibimos sea el resultado de un universo con dos tiempos fundamentales, un espacio de 4 dimensiones espaciales y 2 temporales.&lt;/p&gt;

&lt;p&gt;Pero, esto es imposible en el papel. Los números dicen que nuestro pasado y presente se encontraria constantemente creando paradojas temporales al mejor estilo del Delorian.&lt;br&gt;
Y por esta razón esta hipotesis tan genial que lograria resolver muchos problemas de la fisica moderna, no ha logrado agarrar tanta fuerza como otras; aun cuando el doctor Bars sigue trabajando en ella y ha encontrado soluciones magnificas a este problema.&lt;/p&gt;

&lt;p&gt;Pero, un dia, mientras debia estar programando, leí un artículo y me pregunte: Y por qué tratan al tiempo como espacio? &lt;br&gt;
Allí estaba el &lt;strong&gt;Bug&lt;/strong&gt;, estaban tratando al tiempo como si fuera una dimension espacial más, aun cuando claramente no lo era, se trataba de un &lt;strong&gt;error de tipado&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por Qué un Programador Puede Aportar
&lt;/h2&gt;

&lt;p&gt;No soy genial por esta propuesta, solo hice lo que como programador estoy acostumbrado a hacer: mire el problema desde otra optica. Y mirar desde otra optica es facil cuando literalmente estas en otro campo.&lt;/p&gt;

&lt;p&gt;Además un skill que debi usar mucho, y que uso mucho en programacion fue la abstracción. Si, la abstraccion, porque este problema implicaba observar las dimensiones espaciales y temporales, y por decirlo de una manera crear clases abstractas de ellas, y por encima de ellas una clase principal de la que heredaran sus principales atributos&lt;/p&gt;

&lt;p&gt;Uno de esos atributos que las diferenciaba fue lo que termino convirtiendose en el &lt;strong&gt;Axioma de la Distinción Topológica&lt;/strong&gt;. Una frikada que significa: &lt;em&gt;a diferencia del espacio, el tiempo solo puede avanzar&lt;/em&gt;. Si amigo programador, hice un &lt;strong&gt;contract&lt;/strong&gt; para especificar la unidirecionalidad del tiempo.&lt;/p&gt;

&lt;h2&gt;
  
  
  El Proceso
&lt;/h2&gt;

&lt;p&gt;Aprendi a programar solo (ya lo he contado antes), a los 12 años hacia codigo en pascal escondido de mi familia. Pero antes de la programacion, la fisica me cautivo en alguna enciclopedia, de esas que nuestros papas compraban sin ningun proposito particular, solo porque el vendedor sabia hacer su trabajo. Asi que eso de andar leyendo por alli lo que nadie me mando se me hace natural.&lt;/p&gt;

&lt;p&gt;Asi fue como me encontre con el trabajo de Bars, mirando cosas del espacio-tiempo, la cuantica y esas frikadas que todas las personas normales hacemos luego de un meeting con el jefe.&lt;/p&gt;

&lt;p&gt;Y para mi en mi inocencia (ignorancia), me parecio facil decir: "pero el tiempo solo avanza". Asi que hable con mi colega de trabajo (el colega de todo buen dev), y le dije:&lt;br&gt;
`&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yo: "Oye Gemini, por que este problema no lo resuelven así?"&lt;/li&gt;
&lt;li&gt;Gem: "Octavio que buena intuicion, ya ese problema tiene una solucion pero lo que tu propones cambia el enfoque llegando al mismo resultado"&lt;/li&gt;
&lt;li&gt;Yo: "Ya hablamos de esto, sube tu excepticismo al 50% y dime si realmente este enfoque es tan innovador"&lt;/li&gt;
&lt;li&gt;Gem: "Perdon Octavio, me deje llevar. Pero efectivamente es innovador, no eres Einstein seguro, pero tu enfoque da una solucion estructural que simplifica las matematicas del mismo"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;`&lt;/p&gt;

&lt;p&gt;Luego de varias conversaciones con mi amigo Gem en excepticismo 100%, tome la decision de escribi un Paper, y alli descubri que como existen los &lt;strong&gt;Vibe Coding&lt;/strong&gt; tambien existen los &lt;strong&gt;Vibe-Physics&lt;/strong&gt;.&lt;br&gt;
Luego de varias interacciones, conociendo los procedimientos comunes, los formalismos matematicos (aprendi que es un langriano), desarrollando ecuaciones, validandolas, corrigiendolas.&lt;br&gt;
Y por supuesto, limpiando el contexto de Gemini una y otra vez para que dejara de delirar. &lt;/p&gt;

&lt;p&gt;Una vez terminando el siguiente paso fue la publicacion, lo consulte mucho antes de hacerlo. Me daba miedo la idea de moverme fuera de mi area comun de trabajo. Pero alli llego el mejor consejo que alguna vez en la vida toda persona ha recibido: &lt;strong&gt;que tienes que perder?&lt;/strong&gt;&lt;br&gt;
Y asi, guiado por un cliche filosofico el viernes 12 de diciembre en la noche hice el deploy, y como todo buen deploy de viernes termine de publicar el sabado 13.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo Que Aprendí
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;En fisica si quieres decir algo debes decirlo con números, es su lenguaje de progranación.&lt;/li&gt;
&lt;li&gt;Ya no renegare de documentar mi codigo, un papers es mas dificil. &lt;/li&gt;
&lt;li&gt;No importa el campo, el impostor siempre aparece, y siempre se vence de la misma forma.&lt;/li&gt;
&lt;li&gt;Pensar fuera de tu area de confort siempre es un camino de aprendizaje.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El Paper
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Título:&lt;/strong&gt; Emergent Causality in Multitemporal Manifolds: A Reformulation through Semigroup Restrictions in the Lagrangian&lt;br&gt;
&lt;strong&gt;Link:&lt;/strong&gt; &lt;a href="https://zenodo.org/records/17919110" rel="noopener noreferrer"&gt;https://zenodo.org/records/17919110&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este Pre-Print (para ser mas precisos), en pocas palabras dice que el tiempo al ser una variable de tipo Tiempo debe cumplir con la condicion de &lt;strong&gt;Solo Avanzar&lt;/strong&gt;.&lt;br&gt;
En el caso de Bars, esto implica que los dos tiempos pueden sumarse y al al hacerlo se eliminan asi las paradojas.&lt;br&gt;
Como un toque adicional: la velocidad de la luz deja de ser fundamental, y  viene dada por esta suma de vectores temporales.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Y Ahora Qué?
&lt;/h2&gt;

&lt;p&gt;Aunque ya esta publicado en Zenodo, la ruta a seguir es publicarlo en &lt;strong&gt;arXiv&lt;/strong&gt;, pero para eso necesito apadrinamiento, algun investigador que certifique como minimo que no estoy trolleando a la comunidad.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;¿Físico leyendo esto?&lt;/strong&gt; Tu feedback me interesa.&lt;br&gt;
&lt;strong&gt;¿Programador curioso?&lt;/strong&gt; El pensamiento abstracto que usas diario aplica a física.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Tu LLM es tu nuevo Dev Junior. Escríbele Tickets Perfectos con esta Estructura</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Fri, 29 Aug 2025 11:52:01 +0000</pubDate>
      <link>https://forem.com/zenx5/tu-llm-es-tu-nuevo-dev-junior-escribele-tickets-perfectos-con-esta-estructura-2fcn</link>
      <guid>https://forem.com/zenx5/tu-llm-es-tu-nuevo-dev-junior-escribele-tickets-perfectos-con-esta-estructura-2fcn</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg558ogpbpk5fm81fbb85.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg558ogpbpk5fm81fbb85.png" alt="IA is junior dev" width="800" height="800"&gt;&lt;/a&gt;Todos hemos estado ahí. Le pides a una IA que genere un código y te devuelve un desastre: usa librerías obsoletas, ignora por completo el contexto de tu app o, peor aún, "alucina" una solución que parece plausible pero es fundamentalmente incorrecta.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;El problema no es la IA&lt;/strong&gt;. El problema es que la tratamos como a un oráculo mágico en lugar de lo que realmente es: &lt;strong&gt;un desarrollador junior increíblemente rápido, con acceso a todo Stack Overflow, pero sin una pizca de contexto sobre tu proyecto.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Si le das un ticket vago a un dev junior, obtienes resultados vagos. Si le das un ticket perfecto, obtienes código de calidad. Lo mismo pasa con los LLMs. Deja de improvisar y empieza a usar una estructura. Esta es la anatomía de un prompt que funciona.&lt;/p&gt;




&lt;h2&gt;
  
  
  La Anatomía de un Prompt de Nivel Profesional
&lt;/h2&gt;

&lt;p&gt;Piensa en tu prompt como un ticket de Jira o una User Story. Necesita tener secciones claras para no dejar lugar a la ambigüedad.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Rol (Persona) 🎭
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; Le dices al modelo &lt;em&gt;quién&lt;/em&gt; debe ser.&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Le das un "sombrero" que define su conocimiento, tono y estilo. No es lo mismo un "Experto en Ciberseguridad" que un "Creador de contenido viral".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Actúa como un desarrollador full-stack senior con 10 años de experiencia, especializado en el stack MERN y en la optimización de rendimiento."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Contexto (Context) 背景
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; El &lt;code&gt;README.md&lt;/code&gt; de tu solicitud. La información de fondo que necesita para entender el panorama general.&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Eliminas las suposiciones. Le das el &lt;em&gt;stack&lt;/em&gt; tecnológico, el objetivo de negocio, el público, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Estoy construyendo el backend para una app de e-commerce con Node.js, Express y MongoDB. Estamos usando JWT para la autenticación."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Tarea (Task) 🎯
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; El título del ticket. La acción específica y directa que debe realizar.&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Va al grano. "Genera una función" es mucho mejor que "háblame sobre funciones".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Crea una función middleware de Express.js llamada 'authenticateToken'."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  4. Pasos / Instrucciones (Steps) 📝
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; El desglose de la tarea, la lista de &lt;code&gt;// TODO&lt;/code&gt;.&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Obligas al modelo a seguir una lógica estructurada. Si el resultado es incorrecto, puedes depurar en qué paso falló.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extrae el token JWT del header 'Authorization'.&lt;/li&gt;
&lt;li&gt;Valida el token con la librería &lt;code&gt;jsonwebtoken&lt;/code&gt; y una clave secreta.&lt;/li&gt;
&lt;li&gt;Si es válido, adjunta el payload del usuario al objeto &lt;code&gt;req&lt;/code&gt; y llama a &lt;code&gt;next()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si no es válido o no existe, responde con un error 401 o 403."&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  5. Formato de Salida (Output Format) 📄
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; Cómo quieres que te entregue el "pull request". ¿JSON? ¿Markdown? ¿Solo el bloque de código?&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Te ahorra el trabajo de limpiar la respuesta. Esencial para automatizar tareas.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Formato de Salida: Proporciona únicamente el código JavaScript dentro de un bloque de código markdown. No incluyas explicaciones adicionales."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  6. Restricciones (Constraints) ⛓️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Qué es:&lt;/strong&gt; Las reglas del proyecto. El linter, las guías de estilo, las dependencias prohibidas.&lt;br&gt;
&lt;strong&gt;Por qué funciona:&lt;/strong&gt; Acota las posibles soluciones y asegura que el código se alinee con tus estándares.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo para código:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Restricciones: No uses librerías externas aparte de 'express' y 'jsonwebtoken'. El código debe seguir las guías de estilo de Airbnb para ES6+."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  El Ingrediente Secreto: La Cláusula de Clarificación
&lt;/h2&gt;

&lt;p&gt;Esta es la técnica que separa a los amateurs de los profesionales. Añade esto al final de tus prompts importantes:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Si te falta información crítica para dar una respuesta precisa, no adivines. En su lugar, hazme las preguntas necesarias para obtener los detalles."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto transforma al LLM de un generador de código a un &lt;strong&gt;colaborador activo&lt;/strong&gt;. En lugar de inventar el esquema de una base de datos, te preguntará por él. Esto te ahorra horas de depuración.&lt;/p&gt;




&lt;h2&gt;
  
  
  Poniéndolo todo junto: Lazy Prompt vs. Pro Prompt
&lt;/h2&gt;

&lt;p&gt;Veamos la diferencia en la vida real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;❌ El Prompt Vago (y los resultados que te mereces):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Hazme una función en JS que valide un email."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Probablemente obtendrás una función simple con una expresión regular que puede o no ser la mejor.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ El Prompt Profesional:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Rol:&lt;/strong&gt; Actúa como un desarrollador backend senior enfocado en la seguridad y validación de datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contexto:&lt;/strong&gt; Estoy trabajando en un formulario de registro para una API en Node.js. La validación se realiza en el servidor antes de guardar los datos en la base de datos PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tarea:&lt;/strong&gt; Crea una función llamada &lt;code&gt;isValidEmail&lt;/code&gt; que valide de forma robusta una dirección de correo electrónico.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instrucciones:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;La función debe recibir un string como único argumento.&lt;/li&gt;
&lt;li&gt;Debe devolver &lt;code&gt;true&lt;/code&gt; si el email es válido y &lt;code&gt;false&lt;/code&gt; en caso contrario.&lt;/li&gt;
&lt;li&gt;La validación debe comprobar no solo el formato (usando una regex recomendada por OWASP o similar), sino también que el dominio no sea de un servicio de email temporal conocido (incluye una pequeña lista negra de ejemplo como &lt;code&gt;['temp-mail.org', '10minutemail.com']&lt;/code&gt;).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Restricciones:&lt;/strong&gt; No uses librerías externas para la validación, solo código nativo de JavaScript.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Formato de Salida:&lt;/strong&gt; Responde únicamente con la función de JavaScript en un bloque de código, incluyendo comentarios JSDoc.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ves la diferencia, ¿verdad? El segundo prompt te dará una solución lista para producción.&lt;/p&gt;




&lt;h2&gt;
  
  
  No lo hagas cada vez
&lt;/h2&gt;

&lt;p&gt;He creado una pequeña app que genera el prompt a partir de las caracteristicas que necesites, es de codigo abierto por lo que puedes usarla o crear tu propia version.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web:&lt;/strong&gt; &lt;a href="https://prompt-builder-sandy.vercel.app" rel="noopener noreferrer"&gt;https://prompt-builder-sandy.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Github:&lt;/strong&gt; &lt;a href="https://github.com/zenx5/prompt-builder" rel="noopener noreferrer"&gt;https://github.com/zenx5/prompt-builder&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Context Wrapper en React</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Fri, 17 Jan 2025 19:05:12 +0000</pubDate>
      <link>https://forem.com/zenx5/context-wrapper-en-react-l35</link>
      <guid>https://forem.com/zenx5/context-wrapper-en-react-l35</guid>
      <description>&lt;p&gt;¡¡No dejes que tus componentes accedan al contexto de la aplicación!!&lt;/p&gt;

&lt;p&gt;La idea del &lt;strong&gt;Componente&lt;/strong&gt; en React es la de &lt;em&gt;una pieza de UI que puede ser reutilizada, incluso en una aplicación diferente a aquella para la cual fue pensada&lt;/em&gt;. Las librerías de componentes son la máxima expresión de esto, en ocasiones con componentes que pueden ser personalizados hasta el último detalle.&lt;/p&gt;

&lt;p&gt;Pero, sin llegar a ese punto, podemos crear componentes re-utilizables y que puedan moverse de una aplicación a otra sin mayor trauma, solo teniendo en consideración una &lt;strong&gt;estrategia de diseño&lt;/strong&gt; que protege nuestros componentes de ser &lt;em&gt;invadidos&lt;/em&gt; por el contexto y las reglas del negocio de nuestra aplicación.&lt;/p&gt;

&lt;p&gt;Esta es, el &lt;strong&gt;Context Wrapper&lt;/strong&gt;, que no es más que la idea de mantener el contexto un nivel por encima del componente que realmente necesita los datos del contexto, y proporcionar desde ese nivel superior los datos por medio de &lt;strong&gt;props&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esto evita directamente los problemas frecuentes en la migración, donde normalmente nos veríamos obligados a modificar nuestro componente o el contexto de la aplicación receptora. Pero bajo esta forma de diseño, solo copiamos el componente y empezamos a usarlo inmediatamente proporcionando los &lt;strong&gt;props&lt;/strong&gt; que necesite.&lt;/p&gt;

&lt;p&gt;Claro, Context Wrapper no es tan limpio como pretende, pues da lugar a &lt;em&gt;sub-clasificaciones de componentes&lt;/em&gt; que si no se tienen claras pueden complicar las cosas, pero eso va para otro artículo.&lt;/p&gt;

</description>
      <category>react</category>
      <category>architecture</category>
      <category>javascript</category>
    </item>
    <item>
      <title>EGO y CRA</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Thu, 12 Dec 2024 20:40:15 +0000</pubDate>
      <link>https://forem.com/zenx5/ego-y-cra-3agp</link>
      <guid>https://forem.com/zenx5/ego-y-cra-3agp</guid>
      <description>&lt;p&gt;El &lt;strong&gt;22 de Junio&lt;/strong&gt; abrí un issue en el proyecto de &lt;a href="https://roadmap.sh" rel="noopener noreferrer"&gt;roadmap.sh&lt;/a&gt; el cual es de mis favoritos.&lt;/p&gt;

&lt;p&gt;En el issue #5909 les comenté que Create React App (CRA) ya no era recomendado por &lt;strong&gt;React&lt;/strong&gt;, además de esto proporcioné la evidencia en forma de links y screenshop. Haciendo referencia específicamente a la sección "can-i-use-react-without-a-framework". Esto, porque aun aparecía en la ruta de React en ese tiempo.&lt;/p&gt;

&lt;p&gt;El &lt;strong&gt;24 Junio&lt;/strong&gt; recibí una respuesta que es la razón de este post. No por la respuesta como tal, sino por el EGO detrás de la respuesta.&lt;br&gt;
La pregunta que me viene a la mente es ¿Cuan seguro puedes estar de tu superioridad para no tomarte el tiempo para considerar que quizás alguien más tenga la razón?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejo9jdqovogh4st3jaak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fejo9jdqovogh4st3jaak.png" alt=" " width="800" height="136"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finalmente los crack de &lt;strong&gt;roadmap&lt;/strong&gt; terminaron cambiando la &lt;a href="https://roadmap.sh/react" rel="noopener noreferrer"&gt;ruta de React&lt;/a&gt;, pero me hizo pensar mucho sobre el EGO del programador del que lamentablemente he oído hablar en la industria en los últimos 5 años.&lt;/p&gt;

&lt;p&gt;Algo que trato de aplicar en el ambiente laboral es el dicho bíblico de "estimando cada uno a los demás como superiores a él mismo", sin caer en la falsa humildad, pero si considerando que soy un ser humano y que no siempre puedo tomar la razón.&lt;/p&gt;

&lt;p&gt;Es mejor un "déjame comprobarlo", antes que un "te equivocas". Esto me ha permitido tener buenas relaciones laborales en las que he podido aprender y enseñar a otros, estableciendo vínculos laborales donde ninguna de las partes es descalificada &lt;em&gt;a priori&lt;/em&gt;.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to define the state?</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Sun, 10 Nov 2024 04:17:41 +0000</pubDate>
      <link>https://forem.com/zenx5/how-to-define-the-state-2li6</link>
      <guid>https://forem.com/zenx5/how-to-define-the-state-2li6</guid>
      <description>&lt;p&gt;Let's explore &lt;strong&gt;3 basic criteria&lt;/strong&gt; to define what is and isn't part of the state. These criteria allow me to confidently decide on the "minimal but complete representation of the state" in my day-to-day as a React Lover.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criterion 1: Expected to change.
&lt;/h2&gt;

&lt;p&gt;Even though we know that state is immutable, it's usually tied to a part of the interface that is mutable. So, as a first criterion, we should evaluate if there's a part of the UI that's expected to change based on that value. If so, it's very likely that we're dealing with a candidate to be state, but before that, evaluate the following two criteria.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criterion 2: Should not be inherited from any component.
&lt;/h2&gt;

&lt;p&gt;If the value that defines the candidate to become state is received from another component, then it shouldn't be a state. It's possible that it's a state in the component that originally inherits it, but not the component that receives it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criterion 3: Should not be calculated from another state.
&lt;/h2&gt;

&lt;p&gt;If the value must be calculated using another state as a base, then it's not a state, and its interaction in the interface should be shown based on the calculation of the original state.&lt;/p&gt;

</description>
      <category>react</category>
    </item>
    <item>
      <title>¿Cómo definir el estado?</title>
      <dc:creator>Octavio Martinez</dc:creator>
      <pubDate>Fri, 08 Nov 2024 15:10:54 +0000</pubDate>
      <link>https://forem.com/zenx5/como-definir-el-estado-2n6e</link>
      <guid>https://forem.com/zenx5/como-definir-el-estado-2n6e</guid>
      <description>&lt;p&gt;Vamos a conocer &lt;strong&gt;3 criterios&lt;/strong&gt; básicos para definir que es parte del estado y que no lo es. Estos criterios me permiten decidir con total seguridad la "mínima pero completa representación del estado" en mi día a día como React Lover.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criterio 1: Se espera que cambie.
&lt;/h3&gt;

&lt;p&gt;Aun cuando sabemos que el estado es inmutable, normalmente está ligado a una parte de la interfaz que es mutable. Por lo que como primer criterio debemos evaluar si tenemos una parte de la UI que se espere cambie a partir de ese valor, es muy probable que estemos tratando con candidato a ser estado, pero antes evalúa los siguientes dos criterios.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criterio 2: No debe ser heredado de algún componente
&lt;/h3&gt;

&lt;p&gt;Si el valor que define el candidato a convertirse en estado es recibido desde otro componente entonces no debe ser un estado. Es posible que sea un estado en el componente que originalmente lo hereda pero no el componente que lo recibe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criterio 3: No debe ser calculado a partir de otro estado
&lt;/h3&gt;

&lt;p&gt;Si el valor debe ser calculado usando como base otro estado entonces no es un estado, y su interacción en la interfaz debe mostrarse a partir del cálculo del estado original.&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
