<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[pridev]]></title><description><![CDATA[pridev]]></description><link>https://pridevtuna.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Thu, 12 Nov 2026 08:56:11 GMT</lastBuildDate><atom:link href="https://pridevtuna.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Por qué tus textos grandes se ven mal en móviles (y cómo solucionarlo)]]></title><description><![CDATA[En el día a día laboral, solemos encontrarnos con detalles visuales que parecen inofensivos o simples, pero que acaban consumiendo bastante tiempo y…]]></description><link>https://pridevtuna.hashnode.dev/por-qu-tus-textos-grandes-se-ven-mal-en-m-viles-y-c-mo-solucionarlo</link><guid isPermaLink="true">https://pridevtuna.hashnode.dev/por-qu-tus-textos-grandes-se-ven-mal-en-m-viles-y-c-mo-solucionarlo</guid><dc:creator><![CDATA[Edgar Eduardo Vega Ruiz]]></dc:creator><pubDate>Sat, 11 Apr 2026 05:58:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/67e4205acb510eea06095d21/88a7b44e-3487-4a94-a769-d8f9c8eeec70.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Un pequeño viaje técnico desde el engaño de las DevTools hasta el renderizado en dispositivos reales.</h2>
<p>En el día a día laboral, solemos encontrarnos con detalles visuales que parecen inofensivos o simples, pero que acaban consumiendo bastante tiempo y energía. Recientemente, mientras revisaba algunas secciones de mi portafolio directamente desde mi teléfono, noté que los textos grandes tenían "bordes raros" o parecían sobreponerse. </p>
<p>Lo más curioso de la situación no era el fallo en sí, sino cuándo ocurría: durante la animación inicial del elemento (usando la librería Framer Motion), la fuente se veía increíble, limpia y sin bordes. Pero una vez que la animación terminaba y el texto llegaba a su posición final estática, los bordes dentados y "sucios" volvían a aparecer.</p>
<h3>El origen del problema</h3>
<p>La mayoría de estos fallos no surgen porque el lenguaje ni el framework estén mal, sino porque a veces olvidamos cómo la combinación de reglas CSS puede chocar bajo la lupa de motores de renderizado en diferentes dispositivos.</p>
<p>El verdadero culpable de que mis fuentes se vieran así eran estas dos líneas escondidas en mi <code>&lt;body /&gt;</code> global:</p>
<pre><code class="language-css">-webkit-text-stroke: 0.3px var(--text-stroke);
text-shadow: 0px 0px 1px var(--text-stroke);
</code></pre>
<p>En navegadores de escritorio, esta combinación ayuda a darle una presencia definida a la tipografía. Sin embargo, en las pantallas de alta densidad de píxeles de los teléfonos móviles (High-DPI / Retina), las cosas cambian. Si a esto le sumas una variante pesada en la fuente (<code>font-weight: 800</code>), un tamaño de texto bastante grande (<code>clamp(3rem, 8vw, 5rem)</code>) y un <code>letter-spacing</code> negativo, le estás poniendo una prueba dificilísima al motor de renderizado de Safari o Chrome.</p>
<p>El <em>subpixel rendering</em> colapsa por la falta de espacio, provocando problemas de <em>anti-aliasing</em>. Básicamente, el navegador intenta procesar sub-píxeles sobre un trazo muy delgado produciendo el indeseable efecto de doble borde o solapamiento rasgado.</p>
<p><strong>¿Y por qué con Framer Motion nunca sucedía esto durante las transiciones?</strong> 
La explicación es puramente técnica: al mover, escalar o cambiar opacidades durante una animaciós, el navegador toma el texto y lo mueve temporalmente a una "capa de composición asistida por la GPU" (Hardware Acceleration). En ese momento, en lugar de calcular vectores complejos y trazos continuos, procesa todo el elemento como si fuera una simple imagen plana 2D. Una vez que la animación concluía y la capa especial desaparecía, el DOM retomaba el renderizado estándar y el problema salía a la luz.</p>
<h3>La solución</h3>
<p>Mi primer instinto fue poner un "parche" directamente en la sección en donde lo encontré, modificando solamente el Título que estaba generando el error. Sin embargo, el objetivo como desarrolladores debe ser siempre mirar más allá: resolver el problema de raíz para que no vuelva a suceder nunca en ninguna otra página de la plataforma, no solamente parchar el presente.</p>
<p>La solución más sana e idónea fue regresar a las bases: anular estos estilos conflictivos para dispositivos móviles de manera global para dejar que el texto respirara por su cuenta. </p>
<p>Añadí esto directamente en la hoja o archivo global de estilos (<code>GlobalStyles.ts</code>):</p>
<pre><code class="language-typescript">@media (max-width: 768px) {
  body {
    -webkit-text-stroke: 0;
    text-shadow: none;
  }
}
</code></pre>
<p>Así de simple. Por la propia naturaleza de cascada que tiene CSS, todo el texto (títulos, subtítulos, tarjetas de proyectos y barras de navegación) dentro del <code>body</code> en celulares perderá la regla de <code>-webkit-text-stroke</code>, evitando el problema para siempre de forma unificada.</p>
<h3>El engaño de las DevTools y la verdadera prueba</h3>
<p>Algo que hizo que este bug fuera aún más escurridizo fue que, al intentar replicarlo en mi computadora utilizando las herramientas de desarrollador (DevTools) y simulando la pantalla de un celular, el texto se veía perfectamente bien. No había rastro de bordes superpuestos ni fallos de ningún tipo. </p>
<p>Esto es un engaño visual muy común del que rara vez se habla. El simulador de dispositivos móviles integrado en los navegadores de escritorio es una herramienta excelente para reajustar el tamaño de pantalla (el <em>viewport</em>), simular cambios en el <em>User-Agent</em> o emular respuestas táctiles. Sin embargo, <strong>no emula ni el hardware físico, ni la densidad real de píxeles, ni el motor interno de renderizado de un teléfono.</strong> Mi computadora continuaba dibujando la fuente con su propio y potente procesador gráfico y su método de alisado (<em>anti-aliasing</em>), ocultando el problema real que sufrían las pantallas de menor tamaño y mayor densidad en celulares.</p>
<p>Esta aventura reafirma una de las reglas de oro del desarrollo Frontend: <strong>hay que probar el software en su entorno real de uso</strong>. </p>
<p>No importa cuán fiable parezca ser el emulador en tu monitor; la única forma de garantizar que tu tipografía, tus interacciones y la estética del sitio sean verdaderamente impecables en todos lados es abriendo tu sitio web en un dispositivo físico real. Prestar atención a estos pequeños detalles técnicos y darse el tiempo de confirmar tu trabajo y salir del ecosistema perfectamente simulado de tu escritorio, es exactamente lo que separa a una interfaz de ser promedio a ser verdaderamente profesional.</p>
]]></content:encoded></item><item><title><![CDATA[Nadie usa el stack correcto]]></title><description><![CDATA[La mayoría de los proyectos fallan antes de escribir la primera línea de código.No por el lenguaje ni por el framework, sino porque nunca se entendió…]]></description><link>https://pridevtuna.hashnode.dev/nadie-usa-el-stack-correcto</link><guid isPermaLink="true">https://pridevtuna.hashnode.dev/nadie-usa-el-stack-correcto</guid><dc:creator><![CDATA[Edgar Eduardo Vega Ruiz]]></dc:creator><pubDate>Wed, 08 Apr 2026 07:51:46 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/67e4205acb510eea06095d21/7ff617d7-9e07-4006-b090-4a0f2be4387b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>La mayoría de los proyectos fallan antes de escribir la primera línea de código.<br />No por el lenguaje ni por el framework, sino porque nunca se entendió correctamente el problema.</p>
<p>Aun así, muchos desarrolladores comienzan un proyecto decidiendo el stack tecnológico: React, Node, PostgreSQL…</p>
<p>Y casi nadie define algo más importante: el <strong>stack de documentación</strong>.</p>
<hr />
<h2>¿Qué es el stack de documentación?</h2>
<p>El <strong>stack de documentación</strong> es el conjunto de artefactos que utilizamos para responder tres preguntas críticas:</p>
<ol>
<li><p>¿Qué problema estamos resolviendo?</p>
</li>
<li><p>¿Qué debe hacer el sistema?</p>
</li>
<li><p>¿Cómo debe comportarse?</p>
</li>
</ol>
<p>Ejemplos concretos de este stack:</p>
<ul>
<li><p>Visión de producto</p>
</li>
<li><p>Catálogo de eventos</p>
</li>
<li><p>Diagramas de estado</p>
</li>
<li><p>Contratos de API</p>
</li>
</ul>
<p>Esto abre preguntas inevitables:</p>
<ul>
<li><p>¿Qué opciones existen para documentar?</p>
</li>
<li><p>¿Existen niveles?</p>
</li>
<li><p>¿Es necesario documentar todo?</p>
</li>
</ul>
<hr />
<h2>Niveles de documentación</h2>
<h3>Documentación de negocio</h3>
<p>Define el <strong>por qué</strong> y el <strong>qué</strong> del sistema. Su objetivo es entender el contexto del negocio, su alcance y sus límites.</p>
<p>Elementos clave:</p>
<ul>
<li><p>Visión del producto</p>
</li>
<li><p>Objetivos</p>
</li>
<li><p>Stakeholders</p>
</li>
<li><p>Problema a resolver</p>
</li>
</ul>
<hr />
<h3>Ingeniería de requisitos</h3>
<p>Aquí se profundiza en lo que el sistema <strong>debe hacer</strong>. Existen múltiples formas de modelarlo:</p>
<table>
<thead>
<tr>
<th>Tipo</th>
<th>Cuándo usar</th>
<th>Ejemplo</th>
</tr>
</thead>
<tbody><tr>
<td>Casos de uso</td>
<td>Flujos claros actor → sistema</td>
<td>Login</td>
</tr>
<tr>
<td>Historias de usuario</td>
<td>Entornos ágiles</td>
<td>“Como admin quiero…”</td>
</tr>
<tr>
<td>Catálogo de eventos</td>
<td>Sistemas orientados a procesos o estados</td>
<td>Pago recibido</td>
</tr>
<tr>
<td>Requisitos funcionales</td>
<td>Especificaciones formales</td>
<td>“El sistema debe…”</td>
</tr>
<tr>
<td>Requisitos no funcionales</td>
<td>Calidad del sistema</td>
<td>Performance, seguridad</td>
</tr>
</tbody></table>
<p>No todos son igual de útiles: la elección depende del tipo de sistema y su complejidad.</p>
<hr />
<h3>Modelado del sistema</h3>
<p>Es el puente entre los requisitos y el diseño técnico. Aquí se representan comportamientos y estructuras mediante herramientas como UML.</p>
<p>Artefactos comunes:</p>
<ul>
<li><p>Diagramas de secuencia</p>
</li>
<li><p>Diagramas de estado</p>
</li>
<li><p>Diagramas de actividad</p>
</li>
<li><p>Diagramas de clases</p>
</li>
</ul>
<hr />
<h3>Diseño técnico</h3>
<p>Define cómo se construirá el sistema.</p>
<p>Incluye decisiones como:</p>
<ul>
<li><p>Arquitectura (MVC, microservicios, serverless, etc.)</p>
</li>
<li><p>Decisiones técnicas clave</p>
</li>
<li><p>Diseño de APIs</p>
</li>
<li><p>Modelo de datos</p>
</li>
</ul>
<hr />
<h3>Documentación operativa</h3>
<p>Describe cómo el sistema se despliega, monitorea y utiliza en la práctica.</p>
<p>Ejemplos:</p>
<ul>
<li><p>Deploy</p>
</li>
<li><p>Monitoreo</p>
</li>
<li><p>Manuales de uso</p>
</li>
</ul>
<hr />
<h2>No todos los artefactos son igual de útiles</h2>
<p>Uno de los errores más comunes es asumir que todos los enfoques de documentación funcionan igual.</p>
<p>Por ejemplo: los <strong>casos de uso</strong> funcionan bien en sistemas simples pero escalan mal en sistemas con estados complejos</p>
<p>En estos casos, un <strong>catálogo de eventos</strong> es más cercano a la realidad del negocio, ya que modela lo que realmente ocurre: eventos, transiciones y respuestas del sistema.</p>
<hr />
<h2>¿Qué debería usar realmente?</h2>
<p>No necesitas todo.</p>
<p>Una combinación práctica para la mayoría de sistemas de negocio:</p>
<ul>
<li><p>Catálogo de eventos → comportamiento del dominio</p>
</li>
<li><p>Diagramas de estado → lógica compleja</p>
</li>
<li><p>Diagramas de secuencia → flujos críticos</p>
</li>
<li><p>Modelo de datos → persistencia</p>
</li>
</ul>
<p>Guía rápida:</p>
<ul>
<li><p>Si tu sistema es CRUD simple:<br />→ Casos de uso + modelo de datos</p>
</li>
<li><p>Si tu sistema tiene estados, pagos o procesos:<br />Catálogo de eventos</p>
</li>
</ul>
<hr />
<h2>La documentación como herramienta de pensamiento</h2>
<p>El objetivo de la documentación no es generar artefactos, sino <strong>reducir ambigüedad</strong>.</p>
<p>Un sistema mal documentado no falla por código incorrecto, sino por interpretaciones incorrectas.</p>
<p>La documentación no es un entregable, es una herramienta para pensar mejor.</p>
<p>Elegir mal el stack tecnológico te cuesta tiempo.<br />Elegir mal el stack de documentación te cuesta entender el problema.</p>
<p>Y si no entiendes el problema, da igual qué tan bueno sea tu código.</p>
]]></content:encoded></item><item><title><![CDATA[La importancia de automatizar procesos en el trabajo]]></title><description><![CDATA[En el día a día laboral solemos encontrarnos con tareas repetitivas que parecen simples, pero que consumen bastante tiempo y energia. La automatización…]]></description><link>https://pridevtuna.hashnode.dev/la-importancia-de-automatizar-procesos-en-el-trabajo</link><guid isPermaLink="true">https://pridevtuna.hashnode.dev/la-importancia-de-automatizar-procesos-en-el-trabajo</guid><dc:creator><![CDATA[Edgar Eduardo Vega Ruiz]]></dc:creator><pubDate>Thu, 18 Sep 2025 18:29:15 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758220135125/d647dc93-2ca5-4f19-bf51-e2549a2ac874.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>En el día a día laboral solemos encontrarnos con tareas repetitivas que parecen simples, pero que consumen bastante tiempo y energia. La automatización surge como una solución clave: permite dedicar la atención a lo que realmente importa en lugar de estar atado a procesos manuales poco productivos.</p>
<p>En mi experiencia personal, desarrollé dos proyectos en mi tiempo extra-laboral que me ayudaron a optimizar mi flujo de trabajo y a entregar resultados más rápido y con mayor calidad.</p>
<hr />
<h2 id="heading-docutalk">📝 DocuTalk</h2>
<p><strong>Docutalk</strong> es una aplicación de escritorio multiplataforma hecha con <em>Python</em>. Su propósito es transformar un audio en documentación organizada. Para esto utiliza el modelo de AI <strong>Whisper</strong>, encargado de convertir el audio en texto, y luego emplea <strong>Gemini</strong> para generar la documentación final.</p>
<p>El proceso se muestra gráficamente y, antes de guardar, es posible editar el documento a conveniencia. El archivo resultante se almacena en una carpeta definida dentro de la configuración. Esta herramienta me ha ahorrado horas de transcripción y organización de notas.</p>
<p>⚙️<a target="_blank" href="https://github.com/PricedTuna/docuTalk">repositorio github de DocuTalk</a></p>
<hr />
<h2 id="heading-evidenceprocessor">🎧 evidence_processor</h2>
<p>Otro reto que enfrentaba era la calidad del audio en mis evidencias de trabajo, ya que mi micrófono no es el mejor. Para solucionarlo creé <strong>evidence-processor</strong>, un script en Linux que automatiza el tratamiento de un video: separa el audio y permite limpiarlo de manera automática o manual.</p>
<p>En mi caso, combino este proceso con <strong>Adobe Podcast</strong>, lo que me permite entregar audios más claros y profesionales como evidencia. Gracias a esto, ahora ofrezco un servicio más sólido y ahorro tiempo en tareas manuales.</p>
<p>⚙️<a target="_blank" href="https://github.com/PricedTuna/evidence_processor">repositorio</a> <a target="_blank" href="https://github.com/PricedTuna/docuTalk">github</a> <a target="_blank" href="https://github.com/PricedTuna/evidence_processor">de evidence_processor</a></p>
<hr />
<h2 id="heading-conclusion">🔑 Conclusión</h2>
<p>Automatizar no es solo una habilidad técnica, sino también una forma de pensar. La pregunta clave es: ¿qué tareas me estan quitando tiempo que podría invertir en actividades de mayor impacto o creatividad?</p>
<p>Cada automatización, por pequeña que sea, se convierte en un aliado silencioso que trabaja en segundo plano. Aunque al principio pueda requerir un esfuerzo extra, los beneficios se multiplican con el tiempo.</p>
]]></content:encoded></item><item><title><![CDATA[El comienzo del desarrollo]]></title><description><![CDATA[Como proyecto escolar semestral en mi materia de Programación Web II, necesitamos escoger un proyecto y seguir una serie de pasos para documentar la…]]></description><link>https://pridevtuna.hashnode.dev/el-comienzo-del-desarrollo</link><guid isPermaLink="true">https://pridevtuna.hashnode.dev/el-comienzo-del-desarrollo</guid><dc:creator><![CDATA[Edgar Eduardo Vega Ruiz]]></dc:creator><pubDate>Tue, 16 Sep 2025 19:22:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1758050497514/b0c3c070-b5dc-46ed-bde2-0688076a887b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Como proyecto escolar semestral en mi materia de <em>Programación Web II</em>, necesitamos escoger un proyecto y seguir una serie de pasos para documentar la solución, acercándonos un poco más a la <strong>ingeniería de software</strong> y no solamente a ser programadores, ya que seguimos una serie ordenada y estructurada de pasos para identificar, documentar, implementar y entregar una solución de software.</p>
<p>Al comienzo reboté entre diferentes ideas, ya que algunas me parecían muy quemadas, poco originales o poco definidas, pero sirviendo como borradores para llegar a un proyecto final. Los proyectos fueron:</p>
<h3 id="heading-pms">PMS</h3>
<p>Sistema PMS orientado a SCRUM con el diferenciador de que los clientes pueden tener un rol y ver en todo momento quién está haciendo qué y cómo va el avance del proyecto, con una serie de artefactos como las evidencias de cada tarea y diferentes gráficos.<br /><strong>Desechado por:</strong> Sentir que es un Trello con pasos extra, muy cerrado y sin gran diferenciación de otros PMS tipo Kanban.</p>
<h3 id="heading-machina">Machina</h3>
<p>Sistema de automatización de procesos en bases de datos con una interfaz de bloques, tipo <em>Scratch</em>, donde se pueden acumular pasos básicos y generar simulaciones de procesos reales de un sistema con el propósito de ser utilizado para hacer y automatizar pruebas. Esto facilitaría la realización de tareas al omitir pasos extra (simulados por el script) y permitiría que el desarrollador se enfocara en resolver el problema o agregar el incremento deseado.<br /><strong>Desechado por:</strong> No estar tan orientado a <em>Programación Web II</em>, además de tener muchos huecos y vacíos en el cómo implementarlo. Necesito sacar los requisitos funcionales y la implementación rápido.</p>
<h3 id="heading-oratio">Oratio</h3>
<p>Sistema de apoyo al aprendizaje de inglés con dos módulos principales: una IA para traducir y conversar en el idioma, recibiendo retroalimentación y correcciones instantáneamente; y un módulo de aprendizaje con repetición espaciada mediante mazos de tarjetas, similar a <em>Anki</em>, con la facilidad de agregar tarjetas directamente desde las conversaciones con la IA. De esta manera se facilita tanto la práctica como la memorización del idioma.<br /><strong>Desechado por:</strong> Este proyecto no fue exactamente desechado, sino que, platicándolo y buscando retroalimentación con compañeros y profesores, decidimos darle otra orientación para que naciera <em>Leairn</em>.</p>
<h3 id="heading-leairn">Leairn</h3>
<p>Última y definitiva idea de proyecto, orientada a un SaaS. Es un sistema de apoyo para el aprendizaje general de cualquier tema. Consta de tres módulos principales:</p>
<ol>
<li><p><strong>Inteligencia artificial:</strong> una IA con la que puedes conversar y resolver dudas sobre el o los temas de interés.</p>
</li>
<li><p><strong>Aprendizaje:</strong> aprendizaje con repetición espaciada utilizando mazos de tarjetas, como <em>Anki</em>.</p>
</li>
<li><p><strong>Mercado:</strong> un espacio donde algunas personas (autores) pueden publicar sus productos, los cuales constan de una configuración para la IA y un mazo. De esta manera, se pueden crear productos por temas de aprendizaje. Por ejemplo, si ya tengo una configuración para aprender sobre biología marina, puedo publicarlo y ponerle un precio (que puede ser gratuito) para que alguien más pueda adquirirlo desde el mercado.</p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusión</h2>
<p>La idea de ir definiendo proyectos hasta llegar a uno que realmente me apasione me parece increíble, porque cada uno sirve de borrador para otro, ayudando a definir mejor la diferenciación e impacto que se quiere lograr. Por ello, al final fue mejor crear <strong><em>Leairn</em></strong>, ya que representa a <em>Oratio</em> de una manera más abierta, no solo apegada al inglés, sino como una posible configuración. Así, <em>Leairn</em> se convierte en una herramienta usable tanto para personas autodidactas, personas que buscan apoyo en temas específicos, o directamente como una herramienta para instituciones como la SEP y otras instituciones académicas.</p>
]]></content:encoded></item></channel></rss>