<?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>DEV Community: Miller Correa</title>
    <description>The latest articles on DEV Community by Miller Correa (@macorreag).</description>
    <link>https://dev.to/macorreag</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%2F460698%2Fd9ff4683-d432-44c1-a7e2-7658995dee9b.jpeg</url>
      <title>DEV Community: Miller Correa</title>
      <link>https://dev.to/macorreag</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/macorreag"/>
    <language>en</language>
    <item>
      <title>Conecta Notion y AI en n8n: ¡Adiós API, hola MCP OAuth2!</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Thu, 20 Nov 2025 05:06:40 +0000</pubDate>
      <link>https://dev.to/macorreag/conecta-notion-y-ai-en-n8n-adios-api-hola-mcp-oauth2-53h2</link>
      <guid>https://dev.to/macorreag/conecta-notion-y-ai-en-n8n-adios-api-hola-mcp-oauth2-53h2</guid>
      <description>&lt;p&gt;¿Alguna vez has soñado con decirle a tu automatización: &lt;em&gt;"Oye, revisa mi base de datos de Notion y resume las tareas pendientes de esta semana"&lt;/em&gt; y que simplemente... &lt;strong&gt;lo haga&lt;/strong&gt;? 🤯&lt;/p&gt;

&lt;p&gt;Sin configurar docenas de nodos HTTP. Sin pelearte con la documentación de la API de Notion para ver cómo filtrar por fechas. Solo tú, tu agente de IA y tus datos.&lt;/p&gt;

&lt;p&gt;Bueno, tengo noticias increíbles. El mundo del &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; ha llegado a n8n con una actualización que estábamos esperando: &lt;strong&gt;Soporte nativo para OAuth2&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hoy vamos a ver cómo conectar el servidor oficial de Notion MCP directamente en n8n. ¡Prepárate para darle superpoderes a tus workflows! 🚀&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;¿Qué es esto y por qué debería importarme?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para los que no están al tanto, &lt;strong&gt;MCP&lt;/strong&gt; es como un estándar universal (imagina un puerto USB-C) para conectar modelos de IA con fuentes de datos. Antes, si querías que ChatGPT o Claude interactuaran con Notion dentro de n8n, tenías que crear herramientas personalizadas complejas.&lt;/p&gt;

&lt;p&gt;El problema anterior:&lt;br&gt;&lt;br&gt;
Conectar servidores MCP remotos seguros requería configuraciones extrañas o proxies porque la autenticación era un dolor de cabeza.&lt;br&gt;&lt;br&gt;
La solución actual:&lt;br&gt;&lt;br&gt;
&lt;a href="https://community.n8n.io/t/setting-official-notion-mcp-in-n8n/100333/23?page=2" rel="noopener noreferrer"&gt;n8n ha lanzado el soporte para MCP Client OAuth2 API&lt;/a&gt;. Esto significa que puedes usar el servidor oficial de Notion (&lt;a href="https://mcp.notion.com/mcp" rel="noopener noreferrer"&gt;https://mcp.notion.com/mcp&lt;/a&gt;) y autenticarte con el botón de "Conectar cuenta" de toda la vida.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;¿Por qué esto es mejor que usar el nodo tradicional de Notion?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lenguaje Natural:&lt;/strong&gt; No necesitas configurar parámetros rígidos. La IA "lee" la estructura de tu Notion y decide qué hacer.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Velocidad de desarrollo:&lt;/strong&gt; Te ahorras horas definiendo funciones. Conectas el MCP y la IA ya sabe cómo crear páginas, leer bases de datos o buscar contenido.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguridad:&lt;/strong&gt; Usamos OAuth2 estándar. Nada de tokens pegados en texto plano donde no deben estar.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Tutorial: Conectando Notion vía MCP en n8n&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;¡Manos a la obra! Vamos a configurar esto en menos de lo que tardas en tomarte un café. ☕&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Requisitos previos&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Una instancia de &lt;strong&gt;n8n&lt;/strong&gt; actualizada (asegúrate de tener las últimas versiones que soportan MCP Auth).
&lt;/li&gt;
&lt;li&gt;Una cuenta de &lt;strong&gt;Notion&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 1: El Nodo Mágico&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Necesitamos usar el nodo &lt;strong&gt;MCP Client Tool&lt;/strong&gt;. Este nodo es el puente que le dice a tu Agente de IA (como el nodo &lt;em&gt;AI Agent&lt;/em&gt;) qué herramientas tiene disponibles.&lt;/p&gt;

&lt;p&gt;Busca en tu n8n: MCP Client Tool (asegúrate de que sea la versión de LangChain).&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 2: Configuración de Credenciales (El Truco Pro)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;⚠️ &lt;strong&gt;Tip de Experto:&lt;/strong&gt; A veces, la opción para crear la credencial no aparece correctamente si intentas hacerlo directamente desde el nodo. Para evitar dolores de cabeza, vamos a crearla primero desde el gestor de credenciales.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;En el menú lateral izquierdo de n8n, ve a &lt;strong&gt;Credentials&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Haz clic en &lt;strong&gt;Add Credential&lt;/strong&gt; y busca &lt;strong&gt;MCP OAuth2 API&lt;/strong&gt;.
&lt;/li&gt;
&lt;li&gt;Rellena los datos necesarios:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Server URL&lt;/strong&gt;: &lt;a href="https://mcp.notion.com/mcp" rel="noopener noreferrer"&gt;https://mcp.notion.com/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Configura el OAuth2 estándar (Client ID, Client Secret, Auth URL, Token URL) según la documentación de tu integración de Notion, o usa la configuración dinámica si está disponible.
&lt;/li&gt;
&lt;li&gt;Asegúrate de copiar el &lt;strong&gt;OAuth Redirect URL&lt;/strong&gt; de n8n (&lt;a href="https://oauth.n8n.cloud/oauth2/callback" rel="noopener noreferrer"&gt;https://oauth.n8n.cloud/oauth2/callback&lt;/a&gt;) y ponerlo en tu integración de Notion si estás usando una app personalizada.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&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%2Fyauidwhad4ww4cr8s5di.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%2Fyauidwhad4ww4cr8s5di.png" alt=" " width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Así se ve cuando la conexión es exitosa, ¡luz verde!)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Guarda la credencial.  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ahora sí, vuelve a tu nodo &lt;strong&gt;MCP Client Tool&lt;/strong&gt;, selecciona mcpOAuth2Api en Authentication y elige la credencial que acabas de crear de la lista.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 3: El Código (Copy &amp;amp; Paste)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Para hacértelo aún más fácil, aquí tienes el JSON del nodo listo para importar. He limpiado los datos sensibles para que sea seguro usarlo.&lt;/p&gt;

&lt;p&gt;Simplemente copia esto, pégalo en tu lienzo de n8n y ajusta las credenciales seleccionando la que creaste en el paso anterior:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"nodes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"endpointUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://mcp.notion.com/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"authentication"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcpOAuth2Api"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_NODE_ID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Notion MCP Client"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@n8n/n8n-nodes-langchain.mcpClientTool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"typeVersion"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"position"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"credentials"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"mcpOAuth2Api"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YOUR_CREDENTIAL_ID"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"MCP Notion Account"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"connections"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"Notion MCP Client"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"ai_tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"pinData"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Paso 4: ¡A probar!&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Conecta este nodo a un &lt;strong&gt;AI Agent&lt;/strong&gt; (como el que usa OpenAI o Anthropic). En el chat del agente, simplemente escribe:&lt;/p&gt;

&lt;p&gt;"Por favor, crea una nota en mi página de 'Ideas' que diga 'Investigar más sobre MCP en n8n' y ponle fecha de hoy."&lt;/p&gt;

&lt;p&gt;¡La IA usará la herramienta MCP, &lt;strong&gt;se autenticará vía OAuth2&lt;/strong&gt;, entenderá tu estructura de Notion y ejecutará la acción sin que tú hayas configurado un nodo de "Create Page"! ✨&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusión: El futuro es conversacional&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Esta actualización de n8n nos acerca un paso más a un futuro donde no programamos &lt;em&gt;cómo&lt;/em&gt; suceden las cosas paso a paso, sino que definimos &lt;em&gt;qué&lt;/em&gt; herramientas tiene la IA y dejamos que ella haga el trabajo pesado.&lt;/p&gt;

&lt;p&gt;La integración nativa de &lt;strong&gt;Notion MCP&lt;/strong&gt; elimina la fricción técnica. Ya no hay excusas para no tener un asistente personal que realmente gestione tu vida digital.&lt;/p&gt;

&lt;p&gt;¿Y tú? ¿Qué vas a automatizar primero con Notion y MCP? ¡Déjame tus ideas en los comentarios! 👇&lt;/p&gt;

&lt;p&gt;Happy automating! 🤖💙, obviamente una IA me ayudo a escribir esto!&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>ai</category>
      <category>mcp</category>
      <category>notion</category>
    </item>
    <item>
      <title>Compartiendo modificaciones de código Sin Internet: La Utilidad del Git Patch</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Mon, 09 Jun 2025 03:59:43 +0000</pubDate>
      <link>https://dev.to/macorreag/compartiendo-modificaciones-de-codigo-sin-internet-la-utilidad-del-git-patch-4ma8</link>
      <guid>https://dev.to/macorreag/compartiendo-modificaciones-de-codigo-sin-internet-la-utilidad-del-git-patch-4ma8</guid>
      <description>&lt;p&gt;¿Alguna vez te has encontrado en la situación de querer compartir cambios específicos en archivos de código con un colega, pero sin la posibilidad de subir esos cambios a un repositorio o sin acceso a internet?. Ya sea para probar una funcionalidad con un mock, realizar validaciones temporales o simplemente para tener esos ajustes a mano para un uso futuro, la opción tradicional de git stash a veces no es suficiente, especialmente si quieres compartirlos.&lt;br&gt;
Si necesitas compartir esos cambios con tu equipo sin depender de un repositorio remoto o una conexión a internet, este artículo te mostrará cómo git patch se convierte en tu aliado. Exploraremos cómo crear y aplicar parches de manera efectiva, una solución robusta para la transferencia de código en escenarios específicos.&lt;/p&gt;
&lt;h2&gt;
  
  
  ¿Qué es un 'Patch' en Git y Por Qué Deberías Usarlo?
&lt;/h2&gt;

&lt;p&gt;Es un documento de texto plano que contiene las indicaciones precisas de los cambios que deben realizarse sobre líneas específicas de archivos. Esta característica es fundamental en Git, ya que el sistema se encarga de rastrear cada cambio y construir un "historial" que permite obtener una versión actualizada de cada archivo.&lt;br&gt;
Su utilidad principal radica en la capacidad de:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Transferir cambios sin conexión: Ideal para entornos con conectividad limitada o nula.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compartir ajustes específicos: Permite aislar cambios para pruebas o revisiones sin afectar ramas principales.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Controlar lo que se comparte: A diferencia de un commit o un push, puedes seleccionar exactamente qué modificaciones incluir en el parche.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Git Patch: Cómo Compartir Cambios de Código sin Necesidad de Internet ni Repositorios Remotos
&lt;/h1&gt;

&lt;p&gt;¿Te has encontrado en la situación de necesitar &lt;strong&gt;compartir rápidamente modificaciones en tus archivos de código&lt;/strong&gt; con un compañero, pero sin la posibilidad de usar un repositorio remoto o una conexión a internet? O quizás, ¿buscas una manera de guardar cambios específicos para pruebas temporales, como usar un &lt;em&gt;mock&lt;/em&gt; o quitar validaciones, sin que queden registrados en una rama o subirlos al repositorio? Los &lt;strong&gt;parches de Git&lt;/strong&gt; ofrecen una solución elegante y eficiente para estos escenarios, permitiéndote tener esos cambios "a mano para usar después".&lt;/p&gt;

&lt;p&gt;Un parche de Git es un &lt;strong&gt;documento de texto plano&lt;/strong&gt; que contiene las instrucciones precisas para efectuar cambios sobre líneas específicas de archivos. Esta es la esencia de Git, ya que el sistema se encarga de rastrear cada cambio y construir un "historial" que nos permite obtener una versión actualizada de cada archivo.&lt;/p&gt;

&lt;p&gt;A continuación, te mostramos cómo crear, transferir y aplicar estos parches de manera sencilla y efectiva.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Creación de un Parche (Patch)
&lt;/h2&gt;

&lt;p&gt;Para empezar, navega al &lt;strong&gt;directorio de trabajo de tu repositorio&lt;/strong&gt; en tu terminal.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Para cambios no &lt;em&gt;comiteados&lt;/em&gt; ni &lt;em&gt;añadidos&lt;/em&gt; al *commit&lt;/strong&gt;*:&lt;br&gt;
Utiliza el comando &lt;code&gt;git diff&lt;/code&gt; para generar un archivo que contenga solo las diferencias no guardadas. Este es ideal para cambios que aún no has decidido guardar en el historial del proyecto.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git diff &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; cambios.patch
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Este comando creará un archivo llamado &lt;code&gt;cambios.patch&lt;/code&gt; con todas las modificaciones pendientes.&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Para el &lt;em&gt;commit&lt;/em&gt; más reciente&lt;/strong&gt;:&lt;br&gt;
Si tus cambios ya han sido &lt;em&gt;comiteados&lt;/em&gt; y deseas compartir las diferencias de tu último &lt;em&gt;commit&lt;/em&gt;, usa &lt;code&gt;git format-patch&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;git format-patch &lt;span class="nt"&gt;-1&lt;/span&gt; HEAD
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Este comando generará un archivo &lt;code&gt;.patch&lt;/code&gt; que encapsula todas las diferencias de ese &lt;em&gt;commit&lt;/em&gt;.&lt;/p&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Copia y Transferencia del Archivo de Parche
&lt;/h2&gt;

&lt;p&gt;Una vez que tengas el archivo &lt;code&gt;.patch&lt;/code&gt; creado, puedes transferirlo a tu compañero utilizando &lt;strong&gt;cualquier método físico&lt;/strong&gt;. Algunas opciones incluyen:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Copiarlo a una memoria USB.&lt;/li&gt;
&lt;li&gt;  Enviarlo por correo electrónico si dispones de una conexión temporal.&lt;/li&gt;
&lt;li&gt;  Utilizar cualquier otro método de transferencia física para llevarlo a tu compañero.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3. ¿Como se usa el parche?
&lt;/h2&gt;

&lt;p&gt;Tu compañero debe seguir estos pasos para aplicar los cambios contenidos en el parche:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Copiar el archivo &lt;code&gt;.patch&lt;/code&gt;&lt;/strong&gt; en su directorio de trabajo del repositorio.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Usar el comando &lt;code&gt;git apply&lt;/code&gt;&lt;/strong&gt; para aplicar los cambios:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git apply cambios.patch
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;¡Y listo! Los cambios se aplicarán &lt;strong&gt;directamente en los archivos locales&lt;/strong&gt; de tu compañero, sin necesidad de interacciones con un repositorio remoto o una conexión a internet. Esta es una forma &lt;strong&gt;eficiente y práctica&lt;/strong&gt; de colaborar en el desarrollo de software cuando las condiciones lo requieren.&lt;/p&gt;

&lt;p&gt;Esperamos que esta guía te sea de gran utilidad en tu flujo de trabajo como desarrollador. En la comunidad de &lt;code&gt;dev.to&lt;/code&gt;, valoramos el &lt;strong&gt;intercambio de conocimientos y experiencias&lt;/strong&gt; entre desarrolladores.&lt;/p&gt;

</description>
      <category>git</category>
      <category>patch</category>
      <category>developers</category>
      <category>devtips</category>
    </item>
    <item>
      <title>How to use gettext in phoenix?</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Fri, 16 Aug 2024 17:15:00 +0000</pubDate>
      <link>https://dev.to/macorreag/how-to-use-gettext-in-phoenix-aga</link>
      <guid>https://dev.to/macorreag/how-to-use-gettext-in-phoenix-aga</guid>
      <description>&lt;p&gt;Así se usa Gettext:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="err"&gt;%=&lt;/span&gt; &lt;span class="na"&gt;gettext&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;Welcome&lt;/span&gt; &lt;span class="na"&gt;to&lt;/span&gt; &lt;span class="err"&gt;%{&lt;/span&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="err"&gt;}!",&lt;/span&gt; &lt;span class="na"&gt;name:&lt;/span&gt; &lt;span class="err"&gt;"&lt;/span&gt;&lt;span class="na"&gt;Phoenix&lt;/span&gt;&lt;span class="err"&gt;"&lt;/span&gt; &lt;span class="err"&gt;%&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://www.notion.so/Errores-en-Gettext-ce3272b6f665495d9ea4942f030283bd?pvs=21" rel="noopener noreferrer"&gt;Errores en Gettext&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Extraer las traducciones&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mix gettext.extract
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mezclar las traducciones extraídas con las que ya tengo  (para todos los lenguajes)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mix gettext.merge priv/gettext
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Pluralización
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://phrase.com/blog/posts/i18n-for-phoenix-applications-with-gettext/" rel="noopener noreferrer"&gt;https://phrase.com/blog/posts/i18n-for-phoenix-applications-with-gettext/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este comando de pluralización genera errores cuando se le pasa un numero menor que 1 ya que no existen plurales para 0 ó numeros negativos y sintacticamente no tiene sentido&lt;/p&gt;

&lt;h2&gt;
  
  
  Ejemplo
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## Llamado de un texto en singular con número 1&lt;/span&gt;
&amp;lt;%&lt;span class="o"&gt;=&lt;/span&gt; ngettext&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Total salary"&lt;/span&gt;, &lt;span class="s2"&gt;"Total salaries"&lt;/span&gt;, 1&lt;span class="o"&gt;)&lt;/span&gt; %&amp;gt; &lt;span class="c"&gt;#-&amp;gt; Total Salaries&lt;/span&gt;
&lt;span class="c"&gt;## Llamado de un texto plural con número 2 ó mas en este caso ese numero se interpola&lt;/span&gt;

&amp;lt;%&lt;span class="o"&gt;=&lt;/span&gt; ngettext&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Total salary"&lt;/span&gt;, &lt;span class="s2"&gt;"Total salaries"&lt;/span&gt;, 2&lt;span class="o"&gt;)&lt;/span&gt; %&amp;gt; &lt;span class="c"&gt;#-&amp;gt; Total Salaries&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Archivos .po en plural
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;msgid &lt;span class="s2"&gt;"Total salary"&lt;/span&gt;
msgid_plural &lt;span class="s2"&gt;"Total %{count} salaries"&lt;/span&gt;
msgstr[0] &lt;span class="s2"&gt;"Total Salary"&lt;/span&gt;
msgstr[1] &lt;span class="s2"&gt;"Total Salaries"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Ventajas de manejar Gettext sin nomenclatura
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;La traducción al inglés ya está hecha en el código.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;El manejo de mayusculas y minusculas no depende de usar prefijos(ejm: Text ó Label), si no de la palabra correspondiente, si se usa una palabra en mayuscula la primera esta va a salir así como se escriba&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Con Nomenclatura
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;msgid &lt;span class="s2"&gt;"LabelDeductions"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Deducciones"&lt;/span&gt;

msgid &lt;span class="s2"&gt;"textDeductions"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"deducciones"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;ol&gt;
&lt;li&gt;Sin nomenclatura
&lt;/li&gt;
&lt;/ol&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;msgid &lt;span class="s2"&gt;"Deductions"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Deducciones"&lt;/span&gt;

msgid &lt;span class="s2"&gt;"deductions"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"deducciones"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;&lt;em&gt;Nota:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&amp;lt;%&lt;span class="o"&gt;=&lt;/span&gt; gettext&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"house"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; %&amp;gt;
&amp;lt;%&lt;span class="o"&gt;=&lt;/span&gt; gettext&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"House"&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; %&amp;gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Si se tiene lo anterior en el código y se realiza una traducción como&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;msgid &lt;span class="s2"&gt;"house"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"casa"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Al extraer y mezclar traducciones, Gettext infiere automáticamente la otra traducción sin tener en cuenta las mayúsculas y regresa(con la palabra fuzzy).&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#, elixir-format, fuzzy&lt;/span&gt;
msgid &lt;span class="s2"&gt;"House"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"casa"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;Lo anterior permite que el desarrollador no tenga que estar pendiente de las mayusculas que están en el documento.&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Se optimiza el tiempo de codificado, las traducciones se pueden hacer de manera atemporal.&lt;/p&gt;

&lt;p&gt;El hecho de ser atemporales y sin contexto se refiere a que “una persona sin tener el contexto ó la información de donde se muestran estos mensajes en la aplicación puede traducirlos ó crear una mejor traduccion.”&lt;br&gt;
&lt;/p&gt;

&lt;pre class="highlight shell"&gt;&lt;code&gt;msgid &lt;span class="s2"&gt;"LabelDaysGrantedVacation"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Días otorgados de vacaciones"&lt;/span&gt;

&lt;span class="c"&gt;## Reemplaza con&lt;/span&gt;

msgid &lt;span class="s2"&gt;"Vacation days granted"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Días otorgados de vacaciones"&lt;/span&gt;

&lt;span class="c"&gt;## La traducción en ingles se torna opcional, ya que el usuarió visualizara&lt;/span&gt;
&lt;span class="c"&gt;## "Vacation days granted" y no "LabelDaysGrantedVacation" al igual que el &lt;/span&gt;
&lt;span class="c"&gt;## programador que vera un texto mas entendible&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;




&lt;/li&gt;

&lt;/ol&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;```bash
msgid "TextInfoAbbRUTAbbDIAN"
msgstr "Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN "

msgid "To enter the personal information of your new worker, you can enter the file (PDF) of the Single Tax Registry (RUT) downloaded from the DIAN (maximum thirty days old). Remember that you can download it from the DIAN Muisca system "
msgstr "Para ingresar la información personal de su nuevo trabajador, puede ingresar el archivo (PDF) del Registro Único Tributario (RUT) descargado de la DIAN (maximo de treinta días de antiguedad). Recuerde que lo puedes descargar del sistema Muisca de la DIAN "
```
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Las variables empiezan a tomar sentido&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#Con nomenclatura&lt;/span&gt;
msgid &lt;span class="s2"&gt;"LabelApplyDecree%{Decree}%{YearDecree}"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Aplica para decreto %{Decree} del año %{YearDecree}"&lt;/span&gt;

&lt;span class="c"&gt;#Sin nomenclatura&lt;/span&gt;
msgid &lt;span class="s2"&gt;"Applies to decree %{NumberDecree} of %{YearDecree}"&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"Aplica para decreto %{Decree} del año %{YearDecree}"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Las traducciones se pueden compartir entre proyectos, &lt;/p&gt;

&lt;p&gt;El comando mix gettext.merge priv/gettext  no borra las traducciones que ya se tienen en el archivo, por el contrario las mezcla é intenta predecir las posibles traducciones, si no tiene una coincidencia perfecta, marca la traducción como "dirtty", una vez que se modifica por parte de un programador manualmente, la establece como limpia automaticamente para la proxima extracción.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://hexdocs.pm/gettext/Mix.Tasks.Gettext.Merge.html" rel="noopener noreferrer"&gt;Gettext utiliza la distancia de Jaro para determinar si dos palabras o frases son similares&lt;/a&gt; y de esta manera infiere la traducción que marca como &lt;em&gt;fuzzy&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Plurales, porque complicarse?
&lt;/h3&gt;

&lt;p&gt;Sí, es más complejo usar plurales en forma adecuada en Gettext que utilizar condicionales en elixir y usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;numero_casas&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; 
    &lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="s2"&gt;"Las Casas"&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="s2"&gt;"La Casa"&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="n"&gt;ngettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"La Casa"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Las Casas"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;numero_casas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si bien tiene una curva de aprendizaje su uso, el código es más legible y estas traducciones nos serviran en otros proyectos&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F63732f8b-97a4-4485-9480-33f2430864a1%2FUntitled.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-us-west-2.amazonaws.com%2Fsecure.notion-static.com%2F63732f8b-97a4-4485-9480-33f2430864a1%2FUntitled.png" alt="Untitled"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De esta manera, si algo no funciona siempre va a tener una lectura real y clara&lt;/p&gt;

&lt;h2&gt;
  
  
  Ventaja traducción con los plurales
&lt;/h2&gt;

&lt;p&gt;Los id singulares son diferenciados de los Id plurales&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
&lt;span class="c"&gt;#Los Id no chocan con los Id plurales&lt;/span&gt;
msgid &lt;span class="s2"&gt;"TextDeductions"&lt;/span&gt; &lt;span class="c"&gt;#mismo ID en singular&lt;/span&gt;
msgstr &lt;span class="s2"&gt;"deducciones"&lt;/span&gt;

msgid &lt;span class="s2"&gt;"TextDeduction"&lt;/span&gt;
msgid_plural &lt;span class="s2"&gt;"TextDeductions"&lt;/span&gt; &lt;span class="c"&gt;#mismo ID en plural&lt;/span&gt;
msgstr[0] &lt;span class="s2"&gt;"deduccion"&lt;/span&gt;
msgstr[1] &lt;span class="s2"&gt;"deducciones"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Desventajas
&lt;/h2&gt;

&lt;p&gt;Los plurares NO incluyen el termino que se debe utilizar cuando se tienen 0 items solo cuando se tiene uno ó muchos por ejemplo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;Sin&lt;/span&gt; &lt;span class="nx"&gt;filtros&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;No&lt;/span&gt; &lt;span class="nx"&gt;hay&lt;/span&gt; &lt;span class="nx"&gt;forma&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;aplicarlo&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nx"&gt;Filtro&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="nx"&gt;Filtros&lt;/span&gt;
&lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="nx"&gt;Filtros&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Los plurales se tornan más largos, &lt;/p&gt;

&lt;p&gt;ngettext("Deduction", "Deductions", 2)&lt;/p&gt;

&lt;p&gt;Los archivos mezclados primero se deben esx&lt;/p&gt;

&lt;p&gt;mix gettext.merge priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po&lt;/p&gt;

&lt;h3&gt;
  
  
  Mezclar 2 archivos .po
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mix gettext.merge  priv/gettext/en/LC_MESSAGES/default2.po priv/gettext/en/LC_MESSAGES/default.po
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Para test
&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("The house is very pretty") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("The house") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("is very pretty") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("is very %{house}") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("house") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;&amp;lt;%= gettext("House") %&amp;gt;&lt;/h2&gt;

&lt;h2&gt;
  
  
  Mayusculas y minusculas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gettext es CaseSensitive&lt;/strong&gt; debido a que en algunos lenguajes una palabra en mayuscula es diferente a una palabra en minúscula, por lo tanto tiene esta diferencia y la solucion es tratar ambos casos como corresponde además facilita el trabajo del progrmador, esto es una ventaja y una desventaja en realidad que se soluciona con gettext extract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gettext con variables en el string
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;%&lt;/span&gt; &lt;span class="n"&gt;text_action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nv"&gt;@action&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"edit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"LabelEdit%{Object}"&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"LabelCreate%{Object}"&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt; &lt;span class="n"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"uk-text-capitalize uk-font-size-15"&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;WebPortalBillingWeb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text_action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;Object:&lt;/span&gt; &lt;span class="n"&gt;gettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"TextClient"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;%&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Usar Gettext dentro de controladores ó liveview
&lt;/h2&gt;

&lt;p&gt;Es importante pasar &lt;code&gt;*NombreApp**Web**.Gettext&lt;/code&gt;  en el primer parámetro para que funcione el gettext, tenga en cuent que el módulo es &lt;code&gt;NombreApp**Web&lt;/code&gt;** con &lt;strong&gt;Web&lt;/strong&gt; al final.*&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;NombreAppWeb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"LabelRestrictionForDSAdquisitionsNational%{Object}"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;Object:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;id_type&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Usando con un contexto específico “errors” es decir, el archivo errors.po&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dgettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;NombreAppWeb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Message"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;#Si el mensaje esta en una variable puede definir un valor por defecto con || &lt;/span&gt;
&lt;span class="c1"&gt;#ya que si pasa nil a la función esta fallara&lt;/span&gt;

&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dgettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;NombreAppWeb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"errors"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;nil&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="s2"&gt;"Default Message"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Como hacer una traduccion con un valor que cambia?
&lt;/h2&gt;

&lt;p&gt;Esto no funciona, nativamente pero se puede intentar sacar las variables aparte con una función para hacer el matching.&lt;/p&gt;

&lt;p&gt;Suponga que del back llegan los siguientes errores&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;"Son 300 pesos" 
"Son 650 pesos" 
"Son 700 pesos" 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ¿Es posible generar un gettext que traduzca este texto mediante un unico id?
&lt;/h3&gt;

&lt;p&gt;Puede intentar usar named_captures para sacar aparte la lista de numeros que vienen en un texto &lt;/p&gt;

&lt;p&gt;&lt;a href="https://hexdocs.pm/elixir/1.12/Regex.html#named_captures/3" rel="noopener noreferrer"&gt;Regex - Elixir v1.12.3&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;#Algo como esto
msgid "Son %{Number} pesos"
msgstr "Is %{Number} pesos"
#generara algo como esto
"Is 300 pesos"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight elixir"&gt;&lt;code&gt;
&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gettext&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;WebPortalBillingWeb&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="no"&gt;Gettext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Is 700 pesos"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>translations</category>
      <category>phoenix</category>
      <category>gettext</category>
      <category>elixir</category>
    </item>
    <item>
      <title>Ignora archivos solo para ti en Git</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Thu, 20 Jun 2024 13:05:32 +0000</pubDate>
      <link>https://dev.to/macorreag/ignora-archivos-solo-para-ti-en-git-14oi</link>
      <guid>https://dev.to/macorreag/ignora-archivos-solo-para-ti-en-git-14oi</guid>
      <description>&lt;h2&gt;
  
  
  ¡Ignora archivos solo para ti en Git: domina .git/info/exclude como un pro!
&lt;/h2&gt;

&lt;p&gt;Ey Devs!, ¿alguna vez han querido excluir archivos de Git solo para su repositorio local sin afectar a sus colaboradores? ¡Entonces .git/info/exclude es su nuevo mejor amigo! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Qué es .git/info/exclude?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A diferencia del archivo .gitignore, que se comparte con los colaboradores y se aplica a todos los clones del repositorio, .git/info/exclude es un archivo &lt;strong&gt;personal&lt;/strong&gt; que reside en &lt;code&gt;.git/info/&lt;/code&gt; y solo se aplica a &lt;strong&gt;tu clon local&lt;/strong&gt;. Esto lo convierte en el lugar ideal para omitir archivos que solo son relevantes para tu configuración de desarrollo o que no deseas compartir con el mundo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;¿Cuándo usar .git/info/exclude?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Imagina estos escenarios:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Configuraciones de inicio de sesión personalizadas:&lt;/strong&gt; Si tu proyecto utiliza archivos de inicio de sesión confidenciales, como &lt;code&gt;.env&lt;/code&gt; o &lt;code&gt;.credentials&lt;/code&gt;, añádelos a &lt;code&gt;.git/info/exclude&lt;/code&gt; para evitar que se confirmen accidentalmente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Herramientas de desarrollo específicas:&lt;/strong&gt; ¿Utilizas herramientas que generan archivos temporales en el directorio de trabajo del repositorio? Añádelos a &lt;code&gt;.git/info/exclude&lt;/code&gt; para mantener tu espacio de trabajo limpio y sin archivos innecesarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Archivos de prueba o borradores:&lt;/strong&gt; Si tienes archivos de prueba o borradores que no deseas que se incluyan en el historial de Git, &lt;code&gt;.git/info/exclude&lt;/code&gt; es tu solución.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¿Cómo usar .git/info/exclude?&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Abre .git/info/exclude:&lt;/strong&gt; Ubicate en la raiz de tu proyecto rastreado por git y ejecuta este comando para usar tu editor de texto favorito para abrir este archivo ubicado en la raíz de tu repositorio Git.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code .git/info/exclude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agrega patrones de exclusión:&lt;/strong&gt; Cada línea en &lt;code&gt;.git/info/exclude&lt;/code&gt; representa un patrón de archivo que deseas omitir. Git utiliza la sintaxis de exclusión de Git estándar, como comodines y expresiones regulares.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Guarda:&lt;/strong&gt; Guarda los cambios en &lt;code&gt;.git/info/exclude&lt;/code&gt;. ¡Listo! Los archivos que coincidan con tus patrones de exclusión ahora serán ignorados por Git en tu clon local.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;Para omitir el archivo &lt;code&gt;test.txt&lt;/code&gt; de tu repositorio local, agrega la siguiente línea a &lt;code&gt;.git/info/exclude&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Recursos adicionales:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Documentación oficial de Git sobre .git/info/exclude:&lt;/strong&gt; &lt;a href="https://git-scm.com/docs/gitignore/" rel="noopener noreferrer"&gt;https://git-scm.com/docs/gitignore/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Artículo sobre "Ignorar archivos en Git sin agregarlos a .gitignore":&lt;/strong&gt; &lt;a href="https://stackoverflow.com/questions/653454/how-do-you-make-git-ignore-files-without-using-gitignore" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/653454/how-do-you-make-git-ignore-files-without-using-gitignore&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;¡Consejo profesional:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utiliza comentarios en &lt;code&gt;.git/info/exclude&lt;/code&gt; para describir los archivos o patrones que estás excluyendo para mejorar la legibilidad y el mantenimiento.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;¡Con .git/info/exclude en tu arsenal, puedes mantener tu repositorio local limpio y organizado, sin sacrificar la flexibilidad de excluir archivos específicos para tu configuración de desarrollo!&lt;/p&gt;

</description>
      <category>git</category>
      <category>gitignore</category>
      <category>developer</category>
      <category>tricks</category>
    </item>
    <item>
      <title>Google Apps Script - Configuración en Codespaces</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Fri, 01 Mar 2024 13:19:43 +0000</pubDate>
      <link>https://dev.to/macorreag/google-apps-script-configuracion-en-codespaces-1kil</link>
      <guid>https://dev.to/macorreag/google-apps-script-configuracion-en-codespaces-1kil</guid>
      <description>&lt;h1&gt;
  
  
  Como usar Google Apps Script en Codespaces
&lt;/h1&gt;

&lt;p&gt;Te presento esta plantilla de Github-Codespaces para que modifiques tus proyectos de Google Apps Script mediante Clasp&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Macorreag/clasp-template/tree/main"&gt;https://github.com/Macorreag/clasp-template/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuracion de Clasp en Codespaces
&lt;/h2&gt;

&lt;p&gt;Primero debe logearse en una maquina Linux con el siguiente comando&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clasp login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto genera un archivo &lt;code&gt;.clasprc.json&lt;/code&gt; en la carpeta ./home/name_user/ en sistemas Linux&lt;/p&gt;

&lt;p&gt;Default credentials saved to: ~/.clasprc.json (/home/[USER]/.clasprc.json).&lt;/p&gt;

&lt;p&gt;Luego debe copiar las credenciales en la ventana de codespaces.&lt;/p&gt;

&lt;p&gt;Despues Copie las credenciales al espacio de trabajo hacia la carpeta de usuario del entorno de Codespaces&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp codespaces-blank/.clasprc.json ../../home/codespace/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una ves realizado esto Clasp utilizará este archivo con el token que contiene para acceder a los archivos de Google Apps Script&lt;/p&gt;

&lt;h2&gt;
  
  
  Usar multiples archivos de configuración para las credenciales
&lt;/h2&gt;

&lt;p&gt;Github Codespaces permite usar un repositorio de &lt;code&gt;.dotfiles&lt;/code&gt; en el cual puedes establecer las credenciales en los archivos .clasprc.json en la ruta &lt;code&gt;~/&lt;/code&gt; es decir en el directorio raiz. Estos archivos definen las credenciales y cuentas utilizadas para el acceso a los script. Para manejar multiples cuentas puedes crear multiples archivos asi:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clasprc-work.json&lt;/li&gt;
&lt;li&gt;clasprc-personal.json&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y finalmente para definir cual usar puedes usar un &lt;em&gt;soft link&lt;/em&gt; de Linux forzado para sobreescribir, que apunte a cada uno de los archivos según desees usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ln -f -s {source-filename} {symbolic-filename}
ln -f -s ~/.clasprc-personal.json ~/.clasprc.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Puede chequear que el cambio funciona correctamente con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ clasp  login --status
&amp;gt; You are logged in as personal@gmail.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clone el Script que necesita mediante&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clasp clone "15ImUC************************6qiC" --rootDir .
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  habilitar Google Apps Script
&lt;/h2&gt;

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

&lt;p&gt;if errror:&lt;br&gt;
User has not enabled the Apps Script API. Enable it by visiting &lt;a href="https://script.google.com/home/usersettings"&gt;https://script.google.com/home/usersettings&lt;/a&gt; then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.&lt;/p&gt;

&lt;p&gt;NO OLVIDE APAGAR SU MAQUINA DE CODESPACEES&lt;/p&gt;

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

&lt;p&gt;In VS Code: open the Visual Studio Code Command Palette - for example, by pressing Ctrl+Shift+Enter(Windows/Linux) or Shift+Command+P (Mac) - type Codespaces: stop then press Enter.&lt;br&gt;
In the JetBrains client, click the stop button at the top of the GitHub Codespaces tool window. For more information, see the "JetBrains IDEs" tab of "Stopping and starting a codespace."&lt;br&gt;
In a terminal window: use the GitHub CLI command gh codespace stop. For more information, see "Using GitHub Codespaces with GitHub CLI." If you exit your codespace without running the stop command (for example, by closing the browser tab), or if you leave the codespace running without interaction, the codespace and its running processes will continue for the duration of the inactivity timeout period.&lt;/p&gt;

&lt;p&gt;El enlace para acceder a tus proyectos es:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://script.google.com/u/1/home/start"&gt;https://script.google.com/u/1/home/start&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La cuenta esta definida por el numero, ahi podras ver los proyectos que tienes actualmente en Google Apps Script.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuracion para correr el comando RUN
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/google/clasp/blob/master/docs/run.md"&gt;https://github.com/google/clasp/blob/master/docs/run.md&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El contenedor monta en la carpeta superior un proyecto de Node, e internamente coloca los archivos de Google Apps Script&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=o5coAL7oE0o&amp;amp;ab_channel=VisualStudioCode"&gt;Luego cambia la carpeta donde inicia el contenedor mediante la propieddad de Devcontainers.&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>💵 ¿Cómo comprar un buen computador?</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Tue, 15 Aug 2023 16:23:14 +0000</pubDate>
      <link>https://dev.to/macorreag/como-comprar-un-buen-computador-401</link>
      <guid>https://dev.to/macorreag/como-comprar-un-buen-computador-401</guid>
      <description>&lt;p&gt;Como estudiante de ingeniería de sistemas, a menudo me preguntan ¿cual computador debo comprar? ó ¿ Cual computador de estos es mejor ? y la respuesta no solamente depende de las características del computador en si, sino que también depende de aspectos muy subjetivos como quien lo va a usar etc..&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Quién lo va a usar?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ]  ¿Niños?&lt;/li&gt;
&lt;li&gt;[ ]  ¿Jóvenes?&lt;/li&gt;
&lt;li&gt;[ ]  ¿Personas mayores?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Para que lo va a usar?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ]  Trabajo (Office, Word y Internet ).&lt;/li&gt;
&lt;li&gt;[ ]  Herramientas de diseño de Adobe como photoshop.&lt;/li&gt;
&lt;li&gt;[ ]  Juegos de alto rendimiento.&lt;/li&gt;
&lt;li&gt;[ ]  Solo navegar en internet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿ Sistema Operativo?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ]  Windows 10 (Excel, Word ...)&lt;/li&gt;
&lt;li&gt;[ ]  Windows 7 (Excel, Word ...)&lt;/li&gt;
&lt;li&gt;[ ]  Distribuciones Linux como Ubuntu&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Que programas usan ?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;li&gt;...&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Almacenamiento SSD ó Disco Magnético?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;SSD

&lt;ul&gt;
&lt;li&gt;Mayor velocidad si se tiene buen procesador.&lt;/li&gt;
&lt;li&gt;Menor capacidad de almacenamiento.&lt;/li&gt;
&lt;li&gt;Es mejor para computadores portátiles [ ya que se puede mover cuando este prendido y que no se dañe el mismo ]&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Disco Magnético

&lt;ul&gt;
&lt;li&gt;Menor Velocidad según procesador.&lt;/li&gt;
&lt;li&gt;Muchísima capacidad de almacenamiento.&lt;/li&gt;
&lt;li&gt;Muy susceptible a daños cuando se cae ó el computador se mueve mucho.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Tiene que ser un computador portátil?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ¿ Va a usar Wifi o estará conectado mediante cable Ethernet?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  ¿Que prefiere?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ]  Bonito y liviano pero lento.&lt;/li&gt;
&lt;li&gt;[ ]  Liviano y un poco lento además se puede calentar.&lt;/li&gt;
&lt;li&gt;[ ]  Rápido, no muy bonito y pesado&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿que tamaño necesita el computador?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ]  Para llevar en la maleta todos los días (pequeño)&lt;/li&gt;
&lt;li&gt;[ ]  Para llevar de vez en cuando en la maleta (mediano)&lt;/li&gt;
&lt;li&gt;[ ]  No necesito moverlo casi nunca (puede ser de mesa)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ¿Presupuesto?
&lt;/h2&gt;

&lt;p&gt;Cuánto dinero está dispuesto a gastar en él&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Cómo se debería describir un computador portátil?
&lt;/h2&gt;

&lt;p&gt;Describir un computador es mucho más fácil a mi manera de ver si se llenan los siguientes espacios.&lt;/p&gt;

&lt;p&gt;Este computador es marca ________ referencia _______ tiene un procesador ______ de __ generación marca intel con una velocidad de reloj de ___ Ghz. Tiene una capacidad de memoria ram de ___ GigaBytes DDR__ expandible a __ ya que &lt;em&gt;(si-no)&lt;/em&gt; tiene un espacio disponible para aumentar.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿ Y tú cómo haces para responderle a tus amigos cuando te preguntan cosas de este tipo ? Escribelo aqui 👇👇👇👇
&lt;/h2&gt;

</description>
    </item>
    <item>
      <title>Google Apps Script support JSDoc and Markdown</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Wed, 19 Jul 2023 18:46:44 +0000</pubDate>
      <link>https://dev.to/macorreag/google-apps-script-support-jsdoc-and-markdown-3kb</link>
      <guid>https://dev.to/macorreag/google-apps-script-support-jsdoc-and-markdown-3kb</guid>
      <description>&lt;p&gt;Yes Google Apps Script support Markdown in docs only in your IDE&lt;/p&gt;

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

&lt;p&gt;NOt is supported in the Library Docs Shared&lt;/p&gt;

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

</description>
      <category>google</category>
      <category>googleappsscript</category>
      <category>googledocs</category>
      <category>markdown</category>
    </item>
    <item>
      <title>Estructura de carpetas visual Google Drive</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Fri, 09 Jun 2023 13:21:07 +0000</pubDate>
      <link>https://dev.to/macorreag/estructura-de-carpetas-visual-google-drive-la0</link>
      <guid>https://dev.to/macorreag/estructura-de-carpetas-visual-google-drive-la0</guid>
      <description>&lt;h2&gt;
  
  
  Objetivo
&lt;/h2&gt;

&lt;p&gt;Una de las mejores maneras para entender algun tipo de estructura organizativa, corresponde a los graficos. A dia de hoy Google Drive no cuenta con las herramientas para visualizar graficamente una estructura de carpetas. En sistemas unix existe el comando &lt;code&gt;tree&lt;/code&gt;el cual nos permite mostrar de manera gráfica y de forma estructurada la jerarquía de los directorios de nuestro sistema operativo.&lt;/p&gt;

&lt;p&gt;Y como logramos tener esta estructura visual en Google Drive?&lt;/p&gt;

&lt;h2&gt;
  
  
  Avances encontrados
&lt;/h2&gt;

&lt;p&gt;Actualmente se tienen algunas iniciativas las cuales utilizan Google Apps Script para generar un Tree View.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://tecnologia.facilisimo.com/crear-un-tree-view-de-google-drive-para-ver-archivos-facilmente_1262031.html" rel="noopener noreferrer"&gt;https://tecnologia.facilisimo.com/crear-un-tree-view-de-google-drive-para-ver-archivos-facilmente_1262031.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/questions/56400923/trying-to-create-tree-view-of-google-drive-folders" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/56400923/trying-to-create-tree-view-of-google-drive-folders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.labnol.org/internet/google-drive-tree/21198/" rel="noopener noreferrer"&gt;https://www.labnol.org/internet/google-drive-tree/21198/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Posible mejora
&lt;/h2&gt;

&lt;p&gt;Se sugiere utilizar la tecnolog[ia de &lt;a href="https://mermaid.js.org/" rel="noopener noreferrer"&gt;Mermaid&lt;/a&gt; para generar graficos en MarkDown a traves de la estructura generada por el Script de Google y obtener una representaci[on visual de la estructura de carpetas.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
    A[Hard edge] --&amp;gt;|Link text| B(Round edge)
    B --&amp;gt; C{Decision}
    C --&amp;gt;|One| D[Result one]
    C --&amp;gt;|Two| E[Result two]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En Notion se veria algo asi &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%2Fen9llzq0o0fw4gteyq6o.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%2Fen9llzq0o0fw4gteyq6o.png" alt="Image description" width="635" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Otra opción más avanzada
&lt;/h2&gt;

&lt;p&gt;Se puede utilizar la API de &lt;a href="https://app.diagrams.net/" rel="noopener noreferrer"&gt;https://app.diagrams.net/&lt;/a&gt; para crear un grafico que incluya los enlaces a cada uno de las carpetas y podamos navegar de manera m[as rapida.&lt;/p&gt;

&lt;p&gt;Si bien diagrams no tiene API si puede usar una herramienta para manipular los diagramas de &lt;a href="http://diagrams.net" rel="noopener noreferrer"&gt;diagrams.net&lt;/a&gt; &lt;a href="https://stackoverflow.com/questions/70543817/is-there-draw-io-api-to-manipulate-diagrams" rel="noopener noreferrer"&gt;https://stackoverflow.com/questions/70543817/is-there-draw-io-api-to-manipulate-diagrams&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solución definitiva
&lt;/h2&gt;

&lt;p&gt;Rclone nos proporciona el comando Tree&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;rclone tree remote:path
/
├── file1
├── file2
├── file3
└── subdir
    ├── file4
    └── file5

1 directories, 5 files
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>googleappsscript</category>
      <category>proposals</category>
      <category>folders</category>
      <category>treeview</category>
    </item>
    <item>
      <title>Tricks Chrome</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Wed, 10 Feb 2021 21:51:20 +0000</pubDate>
      <link>https://dev.to/macorreag/shortcut-to-move-chrome-tabs-34gb</link>
      <guid>https://dev.to/macorreag/shortcut-to-move-chrome-tabs-34gb</guid>
      <description>&lt;p&gt;In chrome you can move the current tab to the right with the key combination:&lt;/p&gt;

&lt;p&gt;Ctrl + shift + Page Down&lt;/p&gt;

&lt;p&gt;And to move to the left you can use:&lt;/p&gt;

&lt;p&gt;Ctrl + shift + Page Up&lt;/p&gt;

&lt;p&gt;This can improve your productivity by having the tabs you use organized.&lt;/p&gt;

&lt;h2&gt;
  
  
  Edit web page like a word
&lt;/h2&gt;

&lt;p&gt;Put in developers tools:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.designMode = 'on'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for off this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;document.designMode = 'off'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Shorcuts for Extensions
&lt;/h2&gt;

&lt;p&gt;You can customize the shorcuts to make faster use of the extensions you have installed in your browser. Just go to:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tochrome://extensions/shortcuts"&gt;chrome://extensions/shortcuts&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Devtools Avanzado
&lt;/h2&gt;

&lt;p&gt;Puede usar la paleta de comandos de las DevTools para acceder mas rapido a las herramientas, primero abra las Devtools y luego presione la combinacion:&lt;/p&gt;

&lt;p&gt;Ctrl + shift + P&lt;/p&gt;

</description>
      <category>chrome</category>
      <category>shorcut</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Usando LaTeX en cualquier Sitio!</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Mon, 05 Oct 2020 17:32:38 +0000</pubDate>
      <link>https://dev.to/macorreag/usando-latex-en-cualquier-sitio-igh</link>
      <guid>https://dev.to/macorreag/usando-latex-en-cualquier-sitio-igh</guid>
      <description>&lt;p&gt;Algunas veces necesitamos mostrar una fórmula matemática en algún sitio por ejemplo en &lt;strong&gt;dev.to&lt;/strong&gt; y es muy difícil instalar un plugin que nos renderize fórmulas matemáticas de látex y simplemente nos rendimos.&lt;/p&gt;

&lt;p&gt;Pero existen herramientas que nos permiten hacer esto tan fácil como colocar una imagen mediante una URL como &lt;a href="https://latex.codecogs.com/"&gt;&lt;strong&gt;Codecogs&lt;/strong&gt;&lt;/a&gt; a continuación describiré su uso en dos escenarios Markdown y Google Docs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Obtener la URL a nuestra "Fórmula"
&lt;/h1&gt;

&lt;p&gt;Lo primero que debemos realizar es ir al editor de &lt;em&gt;Codecogs🧮&lt;/em&gt; en &lt;a href="https://editor.codecogs.com/"&gt;editor.codecogs.com/&lt;/a&gt; aquí encontraremos un editor que nos permite construir nuestras fórmulas mediante LaTeX.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--817cjj_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/m6GJTIi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--817cjj_t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/m6GJTIi.png" alt="Imgur"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como ejemplo colocaremos esta fórmula &lt;code&gt;e=mc^2&lt;/code&gt; la cual colocaremos en el espacio que nos provee Codecogs para editar las fórmulas. Finalmente iremos a &lt;strong&gt;Export&lt;/strong&gt; y seleccionaremos la opción de &lt;em&gt;URL- Encoded&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kWBo-wuf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/i4q7FAR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kWBo-wuf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/i4q7FAR.png" alt="ExportURL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto nos provee la siguiente URL&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://latex.codecogs.com/svg.latex?e=mc%5E2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;La cual podemos usar en cualquier lugar que nos permita colocar una imagen por URL por ejemplo aquí en &lt;a href="//dev.to"&gt;dev.to&lt;/a&gt; seria algo en Markdown como:&lt;/p&gt;

&lt;h1&gt;
  
  
  Mostrando nuestra formula en Markdown
&lt;/h1&gt;

&lt;p&gt;Simplemente insertamos la URL-Encoded como si nosestuviésemos refiriendo a una URL almacenada.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Formula](https://latex.codecogs.com/svg.latex?e=mc%5E2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y listo! se ve así:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--J_uX-Lyk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://latex.codecogs.com/svg.latex%3Fe%3Dmc%255E2" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--J_uX-Lyk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://latex.codecogs.com/svg.latex%3Fe%3Dmc%255E2" alt="Formula"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Mostrando nuestra fórmula en Google Docs
&lt;/h1&gt;

&lt;p&gt;Aquí debemos tener en cuenta el formato que utilizaremos para la imagen el cual debe ser cambiado a png, entonces nuestra URL-encoded pasa a ser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Formula](https://latex.codecogs.com/png.latex?e=mc%5E2)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para insertarla vamos a &lt;em&gt;Insertar&amp;gt;Imagen&amp;gt;Por URL&lt;/em&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S7-tAC7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/MzciFrB.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S7-tAC7J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/MzciFrB.png" alt="GoogleDocs"&gt;&lt;/a&gt;&lt;br&gt;
Colocamos nuestra URL Encoded y podemos ver como se inserta como una imagen en nuestro documento!&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RPSoD6Qc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Tc8FMLh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RPSoD6Qc--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.imgur.com/Tc8FMLh.png" alt="PasteURL"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>latex</category>
      <category>codecogs</category>
      <category>markdown</category>
      <category>googledocs</category>
    </item>
    <item>
      <title>Test Post</title>
      <dc:creator>Miller Correa</dc:creator>
      <pubDate>Thu, 10 Sep 2020 12:19:02 +0000</pubDate>
      <link>https://dev.to/macorreag/test-post-1lhm</link>
      <guid>https://dev.to/macorreag/test-post-1lhm</guid>
      <description>

</description>
    </item>
  </channel>
</rss>
