<?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: Danniel Navas</title>
    <description>The latest articles on DEV Community by Danniel Navas (@dannieldev).</description>
    <link>https://dev.to/dannieldev</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%2F480793%2Feb65be6c-e24d-4000-8d36-1986c9a3aec6.jpg</url>
      <title>DEV Community: Danniel Navas</title>
      <link>https://dev.to/dannieldev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dannieldev"/>
    <language>en</language>
    <item>
      <title>Actualización devtospanish</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Wed, 16 Oct 2024 00:47:27 +0000</pubDate>
      <link>https://dev.to/dannieldev/actualizacion-devtospanish-gc</link>
      <guid>https://dev.to/dannieldev/actualizacion-devtospanish-gc</guid>
      <description>&lt;p&gt;Hacia mucho tiempo no escribía, pero esta vez lo hago con avances de la plataforma en la que inice hace ya un tiempo considerable.&lt;/p&gt;

&lt;p&gt;En esta oportunidad traigo cosas que de fondo pueden ser pequeñas pero espero sean de ayuda.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ya contamos con link propio ahora pueden encontrar en &lt;a href="https://devtospanish.dev" rel="noopener noreferrer"&gt;https://devtospanish.dev&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Contamos con Perfiles, y esta es una de las cosas que estuve pensando, los desarrolladores contamos con una expertis que nos facilita crear portafolios e intregrar apis sin mucho esfuerzo, pero en esta ocación me he dado cuanta que no todos los que participamos creamos contenido es full desarrollo hay diseño arquitectura y mil cosas más por lo que senti necesario crear un perfil que pueden compartir con su proio link y en el cual trae los post publicados por cada uno. ejemplo: &lt;a href="https://www.devtospanish.dev/profile/dannieldev" rel="noopener noreferrer"&gt;https://www.devtospanish.dev/profile/dannieldev&lt;/a&gt;.&lt;br&gt;
Aun que falta trabajo en este ya esta funcional.&lt;br&gt;
Proximamente se incluira el tema de seo para que permita tener una descrripción y la imagen de usuario.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ahora se marca el ultimo post publicado como nuevo, simple pero bueno algo detalle :D.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Este proyecto nacio con angular como tecnologia en front pero desde esta ultima versión contamos con vue como se ha podido ver en el favicon.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Y listo con estas actualizaciones espero seguir aportando a la comunidad y dando un poco mas de visibilidad a todos nosotros.&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>comunidad</category>
      <category>web</category>
    </item>
    <item>
      <title>Despliega tu Proyecto Gratis en Firebase: Una Guía Paso a Paso</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Fri, 15 Dec 2023 03:00:27 +0000</pubDate>
      <link>https://dev.to/dannieldev/despliega-tu-proyecto-gratis-en-firebase-una-guia-paso-a-paso-4542</link>
      <guid>https://dev.to/dannieldev/despliega-tu-proyecto-gratis-en-firebase-una-guia-paso-a-paso-4542</guid>
      <description>&lt;p&gt;Para comenzar, es esencial tener Node instalado en tu máquina. A continuación, instalamos Firebase Tools de forma global con el siguiente comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm install -g firebase-tools&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Una vez que Firebase está instalado, iniciamos sesión a través de la terminal con el comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;firebase login&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Al ejecutar este comando, se nos presentará la opción de permitir que Firebase recopile información de uso y reportes de errores de CLI y Emulator Suite. Podemos elegir sí (Y) o no (N) según nuestras preferencias.&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%2Fz2hj9qnvmnh74njb205n.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%2Fz2hj9qnvmnh74njb205n.png" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Después de seleccionar nuestra preferencia, seremos redirigidos a la página de inicio de sesión de Firebase. Ingresamos nuestras credenciales de Google y aceptamos los permisos necesarios. Una vez aceptado, veremos un mensaje exitoso y podemos continuar desde la terminal.&lt;/p&gt;

&lt;p&gt;Siguiendo con el proceso, el siguiente comando es:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;firebase init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Este comando inicia la configuración de nuestro hosting.&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%2Fq5xvkadml786h8y4riph.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%2Fq5xvkadml786h8y4riph.png" alt="Image description" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seleccionamos con o sin GitHub Actions, según lo que se ajuste mejor a nuestro flujo de trabajo. Luego, elegimos la opción de hosting que más se adapte y asociamos el proyecto a nuestro desarrollo. En mi caso, ya tengo varios proyectos creados, así que selecciono uno.&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%2Fvki82igms20aqalqzlrw.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%2Fvki82igms20aqalqzlrw.png" alt="Image description" width="800" height="293"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El siguiente paso es indicar la ubicación de nuestro proyecto compilado.&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%2F8u11o0a63x84lnlbzhtq.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%2F8u11o0a63x84lnlbzhtq.png" alt="Image description" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Por defecto, sugiere &lt;code&gt;public&lt;/code&gt;, pero puedes especificar otra carpeta, por ejemplo, &lt;code&gt;dist/myproject&lt;/code&gt;. Esta carpeta debería resultar de ejecutar un comando como &lt;code&gt;npm run build&lt;/code&gt; (revisa tu package.json en la sección de scripts).&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%2Fkliawgmpkn46m6bepaci.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%2Fkliawgmpkn46m6bepaci.png" alt="Image description" width="800" height="22"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Luego, nos pregunta si nuestro proyecto es una SPA (Single Page Application) como Angular, Vue o React. Si es así, respondemos con "y".&lt;/p&gt;

&lt;p&gt;Continuará preguntando si queremos configurar GitHub Actions para automatizar el despliegue al hacer push o merge. La elección depende de tus preferencias.&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%2Fd1u25uh2dvi81rsz6a3c.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%2Fd1u25uh2dvi81rsz6a3c.png" alt="Image description" width="800" height="42"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si seleccionas la opción por defecto (N), finalizaremos el proceso y se mostrará el resultado.&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%2Fiatirgrka3phwfk5owu9.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%2Fiatirgrka3phwfk5owu9.png" alt="Image description" width="800" height="74"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si decides configurar GitHub Actions, te pedirá acceso a tu repositorio en GitHub, indicando el nombre de usuario y el nombre de tu proyecto separados por una barra (/), por ejemplo, &lt;code&gt;dannielnavas/miproyecto&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Al finalizar, si no configuramos GitHub Actions, solo necesitamos hacer un build (&lt;code&gt;npm run build&lt;/code&gt;) y luego ejecutar &lt;code&gt;firebase deploy&lt;/code&gt;. Esto mostrará un enlace al proyecto en Firebase y otro que contendrá nuestro sitio desplegado.&lt;/p&gt;

&lt;p&gt;Recuerda que Firebase ofrece un servicio gratuito mensual. Mientras no superes esa cuota, todo el funcionamiento será sin costo.&lt;/p&gt;

&lt;p&gt;Espero que este artículo te ayude a desplegar tus proyectos de forma gratuita, independientemente de la tecnología utilizada.&lt;/p&gt;

&lt;p&gt;No olvides que he contribuido a la comunidad de DevToSpanish, donde puedes encontrar más artículos escritos por hispanohablantes &lt;a href="https://devtospanish.danniel.dev/" rel="noopener noreferrer"&gt;aquí&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>firebase</category>
      <category>español</category>
      <category>hosting</category>
      <category>website</category>
    </item>
    <item>
      <title>Cómo mostrar tus artículos, videos, etc. en tu README de GitHub de forma dinamica</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Sat, 25 Nov 2023 02:18:07 +0000</pubDate>
      <link>https://dev.to/dannieldev/como-mostrar-tus-articulos-videos-etc-en-tu-readme-de-github-2ek1</link>
      <guid>https://dev.to/dannieldev/como-mostrar-tus-articulos-videos-etc-en-tu-readme-de-github-2ek1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introducción:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;En este tutorial, te mostraré cómo mostrar tus artículos, videos, etc. en tu README de GitHub. Esto es posible siempre que el contenido que deseas mostrar esté disponible a través de una API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pasos a seguir:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crea un repositorio en tu perfil de GitHub.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crea un proyecto en Node.js.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Crea los archivos necesarios.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Configura el flujo de trabajo de GitHub Actions.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Creación del repositorio:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para crear un repositorio en tu perfil de GitHub, sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ve a la página de tu perfil de GitHub.&lt;/li&gt;
&lt;li&gt;Haz clic en el botón &lt;strong&gt;Nuevo repositorio&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Escribe un nombre para tu repositorio.&lt;/li&gt;
&lt;li&gt;Elige el tipo de repositorio. En este caso, elige &lt;strong&gt;Repositorio vacío&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Haz clic en el botón &lt;strong&gt;Crear repositorio&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Creación del proyecto Node.js:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para crear un proyecto Node.js, sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abre una terminal en tu computadora.&lt;/li&gt;
&lt;li&gt;Navega a la carpeta donde deseas crear el proyecto.&lt;/li&gt;
&lt;li&gt;Escribe el siguiente comando:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
mkdir &amp;lt;nombre-del-proyecto&amp;gt; &amp;amp;&amp;amp; cd &amp;lt;nombre-del-proyecto&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Escribe el siguiente comando para inicializar el proyecto:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
pnpm init&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creación de los archivos necesarios:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Los archivos necesarios para este tutorial son los siguientes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;index.js:&lt;/strong&gt; Este archivo contiene el código que se ejecutará para actualizar el README.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;README.md:&lt;/strong&gt; Este archivo es el README que se actualizará.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;template.md.tpl:&lt;/strong&gt; Este archivo contiene el código que se utilizará para formatear los artículos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Configuración del flujo de trabajo de GitHub Actions:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El flujo de trabajo de GitHub Actions se utiliza para actualizar el README automáticamente cada vez que se publiquen nuevos artículos. Para configurar el flujo de trabajo, sigue estos pasos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crea una carpeta &lt;code&gt;.github&lt;/code&gt; en la raíz del proyecto.&lt;/li&gt;
&lt;li&gt;Crea una carpeta &lt;code&gt;workflows&lt;/code&gt; dentro de la carpeta &lt;code&gt;.github&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Crea un archivo &lt;code&gt;post.yml&lt;/code&gt; dentro de la carpeta &lt;code&gt;workflows&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El contenido del archivo &lt;code&gt;post.yml&lt;/code&gt; debe ser el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PostReadme&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;workflow_dispatch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
  &lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*"&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-node@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;node-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;18"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;npm install -g pnpm&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pnpm install&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pnpm run generate&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;git config user.name DannielNavas&lt;/span&gt;
        &lt;span class="s"&gt;git config user.email dannielnavas@gmail.com&lt;/span&gt;
        &lt;span class="s"&gt;git add README.md&lt;/span&gt;
        &lt;span class="s"&gt;git diff --quiet &amp;amp;&amp;amp; git diff --staged --quiet || git commit -m "[bot] Update README with latest info"&lt;/span&gt;
        &lt;span class="s"&gt;git push origin master&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El código de &lt;code&gt;index.js&lt;/code&gt; es el siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fetch&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node-fetch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./template.md&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;utf8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://dev.to/api/articles?username=dannieldev&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;HTMLPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="nx"&gt;HTMLPosts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;posts&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`&amp;lt;li&amp;gt;&amp;lt;a href="&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;post&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;a/&amp;gt;&amp;lt;/li&amp;gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newMarkdown&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;template&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;%{{latest_Article}}%&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="s2"&gt;`&amp;lt;ul&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;HTMLPosts&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;/ul&amp;gt;`&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promises&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;writeFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./README.md&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;newMarkdown&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;})();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El código de &lt;code&gt;template.md.tpl&lt;/code&gt; es el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;template.md.tpl&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="c"&gt;&amp;lt;!-- Proudly created with GPRM ( https://gprm.itsvg.in ) --&amp;gt;&lt;/span&gt;
&lt;span class="gh"&gt;# Articulos&lt;/span&gt;

%{{article}}%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explicación del código:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Este código es un script de Node.js que utiliza los módulos fs (sistema de archivos) y node-fetch para leer un archivo de plantilla, obtener datos de una API, y luego escribir esos datos en un archivo README.md.&lt;/p&gt;

&lt;p&gt;Primero, importa los módulos &lt;code&gt;fs&lt;/code&gt; y &lt;code&gt;node-fetch&lt;/code&gt;. fs es un módulo incorporado en Node.js para trabajar con el sistema de archivos, mientras que &lt;code&gt;node-fetch&lt;/code&gt; es un módulo que permite hacer solicitudes HTTP en Node.js, similar a cómo fetch funciona en el navegador.&lt;/p&gt;

&lt;p&gt;Luego, el código define una función asíncrona autoinvocada. Esta función se ejecuta inmediatamente después de su definición.&lt;/p&gt;

&lt;p&gt;Dentro de esta función, primero se lee un archivo llamado template.md en el directorio actual. Se utiliza fs.promises.readFile para leer el archivo de forma asíncrona y se espera hasta que se complete la lectura del archivo.&lt;/p&gt;

&lt;p&gt;A continuación, se realiza una solicitud HTTP GET a la API de dev.to para obtener los artículos de un usuario. Se espera hasta que la respuesta esté disponible y luego se convierte la respuesta en JSON.&lt;/p&gt;

&lt;p&gt;Después de obtener los datos de la API, se seleccionan los primeros tres artículos, se convierten en elementos de lista HTML y se unen en una sola cadena.&lt;/p&gt;

&lt;p&gt;Luego, se reemplaza un marcador de posición en la plantilla leída anteriormente &lt;code&gt;(%{{latest_Article}}%)&lt;/code&gt; con la lista de artículos HTML generada.&lt;/p&gt;

&lt;p&gt;Finalmente, se escribe el contenido modificado en un archivo llamado &lt;code&gt;README.md&lt;/code&gt;. Se utiliza &lt;code&gt;fs.promises.writeFile&lt;/code&gt; para escribir en el archivo de forma asíncrona y se espera hasta que se complete la escritura del archivo.&lt;/p&gt;




&lt;p&gt;**Gracias por leer. Espero que esta información te sea útil y te ayude a mejorar tu perfil.&lt;/p&gt;

&lt;p&gt;Actualmente estoy trabajando en un proyecto personal que espero que aporte a la comunidad hispanohablante. Puedes encontrar más información sobre él en la siguiente URL: devtospanish: &lt;a href="https://devtospanish.danniel.dev/**" rel="noopener noreferrer"&gt;https://devtospanish.danniel.dev/**&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>español</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>Validación de tokens de reCAPTCHA en Lambda de AWS</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Fri, 17 Nov 2023 01:01:00 +0000</pubDate>
      <link>https://dev.to/dannieldev/validacion-de-tokens-de-recaptcha-en-lambda-de-aws-46ek</link>
      <guid>https://dev.to/dannieldev/validacion-de-tokens-de-recaptcha-en-lambda-de-aws-46ek</guid>
      <description>&lt;p&gt;El reCAPTCHA de Google es una herramienta que ayuda a proteger tus sitios web y aplicaciones de spam y ataques automatizados. Cuando se implementa en el frontend, el reCAPTCHA genera un token que el usuario debe proporcionar al backend para validar que es un usuario humano.&lt;/p&gt;

&lt;p&gt;En este artículo, veremos cómo validar un token de reCAPTCHA en una Lambda de AWS.&lt;/p&gt;

&lt;p&gt;Pasos previos&lt;/p&gt;

&lt;p&gt;Antes de comenzar, necesitamos crear los siguientes recursos:&lt;/p&gt;

&lt;p&gt;Un proyecto de Node.js&lt;br&gt;
La dependencia axios&lt;br&gt;
Una variable de entorno RECAPTCHA_SECRET_KEY en la Lambda&lt;br&gt;
Para crear un proyecto de Node.js, podemos usar el siguiente comando:&lt;br&gt;
&lt;code&gt;pnpm init&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para instalar axios, podemos usar el siguiente comando:&lt;br&gt;
&lt;code&gt;pnpm install axios&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para crear la variable de entorno RECAPTCHA_SECRET_KEY, podemos ir a la configuración de la Lambda y agregar la siguiente entrada:&lt;/p&gt;

&lt;p&gt;KEY=RECAPTCHA_SECRET_KEY&lt;br&gt;
VALUE=secret_key_here&lt;/p&gt;

&lt;p&gt;Código de la Lambda&lt;/p&gt;

&lt;p&gt;El siguiente código muestra cómo validar un token de reCAPTCHA en una Lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;axios&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;No token provided&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;RECAPTCHA_SECRET_KEY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`https://www.google.com/recaptcha/api/siteverify?secret=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;response=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;axios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Error fetching reCAPTCHA response&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;success&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;400&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Invalid token&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
      &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;success&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;statusCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt; &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lo que realiza el código seria lo siguiente:&lt;/p&gt;

&lt;p&gt;Primero, el código verifica si el token está presente en el evento de entrada. Si no lo está, devuelve un error.&lt;br&gt;
Luego, el código obtiene el secreto de reCAPTCHA de la variable de entorno.&lt;br&gt;
A continuación, el código crea una URL para la API de verificación de reCAPTCHA.&lt;br&gt;
Luego, el código envía una solicitud GET a la API de verificación de reCAPTCHA.&lt;br&gt;
Finalmente, el código comprueba la respuesta de la API. Si la respuesta indica que el token es válido, el código devuelve un código de estado 200. Si la respuesta indica que el token no es válido, el código devuelve un código de estado 400.&lt;/p&gt;

</description>
      <category>node</category>
      <category>aws</category>
      <category>recapcha</category>
      <category>español</category>
    </item>
    <item>
      <title>Cómo crear pipes custom en Angular</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Fri, 20 Oct 2023 02:40:58 +0000</pubDate>
      <link>https://dev.to/dannieldev/como-crear-pipes-custom-en-angular-4epm</link>
      <guid>https://dev.to/dannieldev/como-crear-pipes-custom-en-angular-4epm</guid>
      <description>&lt;p&gt;Los "pipes" son una característica esencial en Angular que posibilita la transformación de la salida de un componente o directiva. Aunque los "pipes" incorporados en Angular proporcionan una amplia gama de funcionalidades, hay ocasiones en las que se requiere la creación de un "pipe" personalizado para llevar a cabo una transformación que no está disponible de forma predeterminada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creando un pipe personalizado&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para crear un pipe personalizado, primero debemos ejecutar el siguiente comando en nuestra terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng g pipe my-pipe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Esta interfaz tiene un solo método, transform, que recibe el valor de entrada del pipe un argumento y debe devolver el valor transformado.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;PipeTransform&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;Pipe&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;myPipe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;CustomCurrencyPipe&lt;/span&gt; &lt;span class="k"&gt;implements&lt;/span&gt; &lt;span class="nx"&gt;PipeTransform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

  &lt;span class="nf"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;[]):&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;


&lt;p&gt;Una vez que hemos generado el pipe, podemos registrarlo en nuestra aplicación Angular. Podemos hacerlo en el archivo &lt;em&gt;app.module.ts&lt;/em&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;NgModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/core&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;BrowserModule&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@angular/platform-browser&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;AppComponent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./app.component&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;MyPipe&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./pipes/my-pipe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;NgModule&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;declarations&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;AppComponent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;MyPipe&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;imports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nx"&gt;BrowserModule&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt;
  &lt;span class="na"&gt;bootstrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;AppComponent&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AppModule&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Ahora que hemos registrado el pipe, podemos utilizarlo en las plantillas. Para ello, utilizamos el símbolo de pipe (|) seguido del nombre del pipe.&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;p&amp;gt;&lt;/span&gt;{{ value | myPipe }}&lt;span class="nt"&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;En este ejemplo, el pipe myPipe se utilizará para transformar el valor value.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Ejemplos de pipes personalizados&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Aqui un ejemplo de un pipe para el formato moneda para usd, eur y cop:&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://codesandbox.io/p/sandbox/flamboyant-satoshi-j8z82s?file=%2Fsrc%2Fapp%2Fapp.component.html&amp;amp;amp;embed=1" rel="noopener noreferrer"&gt;
      codesandbox.io
    &lt;/a&gt;
&lt;/div&gt;



&lt;p&gt;Crear pipes personalizados es una forma sencilla de añadir funcionalidad personalizada a nuestras aplicaciones Angular. Con un poco de esfuerzo, podemos crear pipes que se adapten a nuestras necesidades específicas.&lt;/p&gt;

</description>
      <category>angular</category>
      <category>spanish</category>
      <category>pipes</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Dev.to en español</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Fri, 28 Oct 2022 20:45:08 +0000</pubDate>
      <link>https://dev.to/dannieldev/devto-en-espanol-4mgb</link>
      <guid>https://dev.to/dannieldev/devto-en-espanol-4mgb</guid>
      <description>&lt;p&gt;En días anteriores estuve leyendo un post en el que se preguntaban si existía más contenido en español en esta plataforma que uso constantemente.&lt;br&gt;
Y dada está pregunta empecé a revisar el contenido que se crea en nuestro idioma y grata sorpresa que es bastante y muy buena y de contenido muy variado.&lt;br&gt;
Por ende empecé a crear un proyecto con unas premisas cómo cabeza de este: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Nunca monetizar (el contenido es de cada autor)&lt;/li&gt;
&lt;li&gt;Intentar hacer visible a cada autor, para que reciba la mayor visibilidad y el mayor apoyo posible.&lt;/li&gt;
&lt;li&gt;El código sea abierto&lt;/li&gt;
&lt;li&gt;Lo más sencillo para iniciar (más adelante se pueden crear funcionalidades que ayuden a mejorar el proyecto)&lt;/li&gt;
&lt;li&gt;Y la última no quitar interacciones a dev.to por lo que este proyecto es solo una presentación con los artículos que redirigen a esta plataforma.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A esto cree el siguiente sitio &lt;a href="https://devtospanish.danniel.dev/" rel="noopener noreferrer"&gt;https://devtospanish.danniel.dev/&lt;/a&gt; .&lt;br&gt;
Que se necesita para aparecer en los tags agrega español o spanish o espanol y listo un api consulta estos tags y los presenta en en devto en español.&lt;/p&gt;

&lt;p&gt;Cabe aclarar que está abierto a comentarios y mejoras.&lt;/p&gt;

&lt;p&gt;Espero este proyecto ayude a la comunidad.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>spanish</category>
      <category>español</category>
      <category>espanol</category>
    </item>
    <item>
      <title>Agregar un step de coverage en github actions - Frontend (Angular)</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Wed, 27 Oct 2021 16:27:14 +0000</pubDate>
      <link>https://dev.to/dannieldev/agregar-un-step-de-coverage-en-github-actions-frontend-angular-2poe</link>
      <guid>https://dev.to/dannieldev/agregar-un-step-de-coverage-en-github-actions-frontend-angular-2poe</guid>
      <description>&lt;p&gt;Con la llegada de github actions se ha simplificado la creación de flujos CI/CD y uno de los pasos importantes es los de las pruebas unitarias y que mejor que tener un step que valide nuestra cobertura, por eso dejo un script que puede ayudarnos a cubrir.&lt;br&gt;
Primero creamos una carpeta llamada &lt;code&gt;.github&lt;/code&gt; en la raíz de nuestro.&lt;br&gt;
Dentro de esta creamos otra de la siguiente forma &lt;code&gt;.github/workflows&lt;/code&gt;&lt;br&gt;
Por último un archivo &lt;code&gt;yml&lt;/code&gt;  con el siguiente nombre por buena practica &lt;code&gt;coverage.yml&lt;/code&gt;  dentro de el dejaremos el siguiente código.&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;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;CI&lt;/span&gt; &lt;span class="nx"&gt;Angular&lt;/span&gt; &lt;span class="nx"&gt;app&lt;/span&gt; &lt;span class="nx"&gt;through&lt;/span&gt; &lt;span class="nx"&gt;Github&lt;/span&gt; &lt;span class="nx"&gt;Actions&lt;/span&gt;
&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;push&lt;/span&gt;
&lt;span class="nx"&gt;jobs&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nx"&gt;runs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;on&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;latest&lt;/span&gt;
    &lt;span class="nx"&gt;steps&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;checkout&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;v2&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Use&lt;/span&gt; &lt;span class="nx"&gt;Node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;
        &lt;span class="nx"&gt;uses&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="nd"&gt;v1&lt;/span&gt;
        &lt;span class="kd"&gt;with&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
          &lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Setup&lt;/span&gt;
        &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;ci&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Test&lt;/span&gt;
        &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
          &lt;span class="nx"&gt;npm&lt;/span&gt; &lt;span class="nx"&gt;test&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;watch&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;no&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;progress&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;browsers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;ChromeHeadlessCI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tip: La ultima línea es la ejecución de pruebas unitarias en angular esta puede ser remplazada por el de tu preferencia, recuerda que debe ejecutarse bajo un navegador sin interfaz.&lt;/p&gt;

&lt;p&gt;Espero te ayudara este post.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>github</category>
      <category>devops</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Como crear Pull request template y en español</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Tue, 12 Oct 2021 00:13:28 +0000</pubDate>
      <link>https://dev.to/dannieldev/como-crear-pull-request-template-y-en-espanol-2pbb</link>
      <guid>https://dev.to/dannieldev/como-crear-pull-request-template-y-en-espanol-2pbb</guid>
      <description>&lt;p&gt;Esta vez será poco texto, la idea de este post es dejar un template para tus pull request, sea en proyectos propios con en el de la empresa en la que trabajas.&lt;/p&gt;

&lt;p&gt;Lo primero que realizaremos es crear un archivo con el nombre &lt;code&gt;PULL_REQUEST_TEMPLATE.md&lt;/code&gt; este archivo va dentro de la carpeta &lt;code&gt;.github&lt;/code&gt;.&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="err"&gt;#&lt;/span&gt; &lt;span class="nx"&gt;Descripción&lt;/span&gt;

&lt;span class="nx"&gt;Por&lt;/span&gt; &lt;span class="nx"&gt;favor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;incluya&lt;/span&gt; &lt;span class="nx"&gt;un&lt;/span&gt; &lt;span class="nx"&gt;resumen&lt;/span&gt; &lt;span class="nx"&gt;del&lt;/span&gt; &lt;span class="nx"&gt;cambio&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="nx"&gt;qué&lt;/span&gt; &lt;span class="nx"&gt;problema&lt;/span&gt; &lt;span class="nx"&gt;se&lt;/span&gt; &lt;span class="nx"&gt;soluciona&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Incluya&lt;/span&gt; &lt;span class="nx"&gt;también&lt;/span&gt; &lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="nx"&gt;motivación&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt; &lt;span class="nx"&gt;contexto&lt;/span&gt; &lt;span class="nx"&gt;pertinentes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Enumere&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;dependencias&lt;/span&gt; &lt;span class="nx"&gt;necesarias&lt;/span&gt; &lt;span class="nx"&gt;para&lt;/span&gt; &lt;span class="nx"&gt;este&lt;/span&gt; &lt;span class="nx"&gt;cambio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="nx"&gt;Correcciones&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;problema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="nx"&gt;Tipo&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;cambio&lt;/span&gt;

&lt;span class="nx"&gt;Por&lt;/span&gt; &lt;span class="nx"&gt;favor&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;elimine&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;opciones&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;sean&lt;/span&gt; &lt;span class="nx"&gt;relevantes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Corrección&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nf"&gt;errores &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cambio&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;radical&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;soluciona&lt;/span&gt; &lt;span class="nx"&gt;un&lt;/span&gt; &lt;span class="nx"&gt;problema&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Nueva&lt;/span&gt; &lt;span class="nf"&gt;característica &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cambio&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;rompedor&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;añade&lt;/span&gt; &lt;span class="nx"&gt;funcionalidad&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Cambio&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nf"&gt;ruptura &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arreglo&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;característica&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;causaría&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="nx"&gt;funcionalidad&lt;/span&gt; &lt;span class="nx"&gt;existente&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;funcionara&lt;/span&gt; &lt;span class="nx"&gt;como&lt;/span&gt; &lt;span class="nx"&gt;se&lt;/span&gt; &lt;span class="nx"&gt;esperaba&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Este&lt;/span&gt; &lt;span class="nx"&gt;cambio&lt;/span&gt; &lt;span class="nx"&gt;requiere&lt;/span&gt; &lt;span class="nx"&gt;una&lt;/span&gt; &lt;span class="nx"&gt;actualización&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="nx"&gt;documentación&lt;/span&gt;

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="err"&gt;¿&lt;/span&gt;&lt;span class="nx"&gt;Cómo&lt;/span&gt; &lt;span class="nx"&gt;se&lt;/span&gt; &lt;span class="nx"&gt;ha&lt;/span&gt; &lt;span class="nx"&gt;probado&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt;

&lt;span class="nx"&gt;Describa&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;pruebas&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;ha&lt;/span&gt; &lt;span class="nx"&gt;realizado&lt;/span&gt; &lt;span class="nx"&gt;para&lt;/span&gt; &lt;span class="nx"&gt;verificar&lt;/span&gt; &lt;span class="nx"&gt;sus&lt;/span&gt; &lt;span class="nx"&gt;cambios&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Proporcione&lt;/span&gt; &lt;span class="nx"&gt;instrucciones&lt;/span&gt; &lt;span class="nx"&gt;para&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;podamos&lt;/span&gt; &lt;span class="nx"&gt;reproducirlos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;Enumere&lt;/span&gt; &lt;span class="nx"&gt;también&lt;/span&gt; &lt;span class="nx"&gt;los&lt;/span&gt; &lt;span class="nx"&gt;detalles&lt;/span&gt; &lt;span class="nx"&gt;relevantes&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="nx"&gt;configuración&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;pruebas&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Prueba&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Prueba&lt;/span&gt; &lt;span class="nx"&gt;B&lt;/span&gt;

&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;Lista&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;comprobación&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Mi&lt;/span&gt; &lt;span class="nx"&gt;código&lt;/span&gt; &lt;span class="nx"&gt;sigue&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;directrices&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;estilo&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;este&lt;/span&gt; &lt;span class="nx"&gt;proyecto&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;He&lt;/span&gt; &lt;span class="nx"&gt;realizado&lt;/span&gt; &lt;span class="nx"&gt;una&lt;/span&gt; &lt;span class="nx"&gt;auto&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;revisión&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;mi&lt;/span&gt; &lt;span class="nx"&gt;propio&lt;/span&gt; &lt;span class="nx"&gt;código&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;He&lt;/span&gt; &lt;span class="nx"&gt;comentado&lt;/span&gt; &lt;span class="nx"&gt;mi&lt;/span&gt; &lt;span class="nx"&gt;código&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;especialmente&lt;/span&gt; &lt;span class="nx"&gt;en&lt;/span&gt; &lt;span class="nx"&gt;las&lt;/span&gt; &lt;span class="nx"&gt;áreas&lt;/span&gt; &lt;span class="nx"&gt;difíciles&lt;/span&gt; &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="nx"&gt;entender&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;He&lt;/span&gt; &lt;span class="nx"&gt;realizado&lt;/span&gt; &lt;span class="nx"&gt;los&lt;/span&gt; &lt;span class="nx"&gt;cambios&lt;/span&gt; &lt;span class="nx"&gt;correspondientes&lt;/span&gt; &lt;span class="nx"&gt;en&lt;/span&gt; &lt;span class="nx"&gt;la&lt;/span&gt; &lt;span class="nx"&gt;documentación&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Mis&lt;/span&gt; &lt;span class="nx"&gt;cambios&lt;/span&gt; &lt;span class="nx"&gt;no&lt;/span&gt; &lt;span class="nx"&gt;generan&lt;/span&gt; &lt;span class="nx"&gt;nuevas&lt;/span&gt; &lt;span class="nx"&gt;advertencias&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;He&lt;/span&gt; &lt;span class="nx"&gt;añadido&lt;/span&gt; &lt;span class="nx"&gt;pruebas&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;demuestran&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;mi&lt;/span&gt; &lt;span class="nx"&gt;arreglo&lt;/span&gt; &lt;span class="nx"&gt;es&lt;/span&gt; &lt;span class="nx"&gt;efectivo&lt;/span&gt; &lt;span class="nx"&gt;o&lt;/span&gt; &lt;span class="nx"&gt;que&lt;/span&gt; &lt;span class="nx"&gt;mi&lt;/span&gt; &lt;span class="nx"&gt;característica&lt;/span&gt; &lt;span class="nx"&gt;funciona&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Las&lt;/span&gt; &lt;span class="nx"&gt;pruebas&lt;/span&gt; &lt;span class="nx"&gt;unitarias&lt;/span&gt; &lt;span class="nx"&gt;nuevas&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="nx"&gt;existentes&lt;/span&gt; &lt;span class="nx"&gt;pasan&lt;/span&gt; &lt;span class="nx"&gt;localmente&lt;/span&gt; &lt;span class="nx"&gt;con&lt;/span&gt; &lt;span class="nx"&gt;mis&lt;/span&gt; &lt;span class="nx"&gt;cambios&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nx"&gt;Cualquier&lt;/span&gt; &lt;span class="nx"&gt;cambio&lt;/span&gt; &lt;span class="nx"&gt;dependiente&lt;/span&gt; &lt;span class="nx"&gt;ha&lt;/span&gt; &lt;span class="nx"&gt;sido&lt;/span&gt; &lt;span class="nx"&gt;fusionado&lt;/span&gt; &lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="nx"&gt;publicado&lt;/span&gt; &lt;span class="nx"&gt;en&lt;/span&gt; &lt;span class="nx"&gt;los&lt;/span&gt; &lt;span class="nx"&gt;módulos&lt;/span&gt; &lt;span class="nx"&gt;posteriores&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;y eso es todo.&lt;br&gt;
Espero te ayudara este post.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima.&lt;/p&gt;

</description>
      <category>github</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Utiliza los mixins en tus break points</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Thu, 30 Sep 2021 01:53:59 +0000</pubDate>
      <link>https://dev.to/dannieldev/utilizar-mixins-para-tus-break-point-4gfa</link>
      <guid>https://dev.to/dannieldev/utilizar-mixins-para-tus-break-point-4gfa</guid>
      <description>&lt;p&gt;Los media querys son una forma de acomodar nuestro sitio web para diferentes dispositivos. &lt;/p&gt;

&lt;p&gt;Con la utilización de SASS en cada ves más proyectos se vuelve necesario simplificar el proceso de declaración de nuestros breakpoints y para esta tarea se utilizan los mixins, los cuales son una porción de código que podemos reutilizar en esas partes que se hacen repetitivas.&lt;/p&gt;

&lt;p&gt;Para definir los mixins vamos a colocar tres break points los cuales son:&lt;/p&gt;

&lt;p&gt;Moviles:  767px&lt;/p&gt;

&lt;p&gt;Tablets: mínimo 768px, máximo 999px&lt;/p&gt;

&lt;p&gt;Desktop: 1280px&lt;/p&gt;

&lt;p&gt;pasamos a la declaración creamos un nuevo archivo &lt;code&gt;.scss&lt;/code&gt; y en este dejaremos el siguiente código:&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%2Fvxtzg3u4g4uifc5e6q1q.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%2Fvxtzg3u4g4uifc5e6q1q.png" alt="mixins.png" width="800" height="739"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ahora importaremos este archivo  en nuestro scss de la siguiente forma:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;@import '../../utils/mixins.scss';&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ahora lo vamos a utilizar definiendo nuestros estilos para los diferentes dispositivos&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%2Fatubau602mgjjjmk71a4.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%2Fatubau602mgjjjmk71a4.png" alt="definicion.png" width="800" height="714"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y con esto ya tendríamos implementado nuestros break points de una forma más practica y sencilla de utilizar.&lt;/p&gt;

&lt;p&gt;Espero te ayudara este post.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima.&lt;/p&gt;

</description>
      <category>sass</category>
      <category>css</category>
      <category>frontend</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Recomendaciones para una entrevista técnica</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Tue, 14 Sep 2021 00:52:20 +0000</pubDate>
      <link>https://dev.to/dannieldev/recomendaciones-para-una-entrevista-tecnica-4079</link>
      <guid>https://dev.to/dannieldev/recomendaciones-para-una-entrevista-tecnica-4079</guid>
      <description>&lt;p&gt;A lo largo de mi carrera profesional he apoyado el proceso de reclutamiento en varias empresas desde la parte técnica y aquí te daré unos tips para que la próxima vez que tengas una entrevista técnica vallas preparado.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lo más importante de todo &lt;strong&gt;&lt;em&gt;repasa&lt;/em&gt;&lt;/strong&gt; los temas por los que están interesados en contratarte.&lt;/li&gt;
&lt;li&gt;La entrevista es una charla de ambos lados en la cual el entrevistador quiere conocer tu habilidad técnica.&lt;/li&gt;
&lt;li&gt;Ten seguridad sobre tus respuestas .&lt;/li&gt;
&lt;li&gt;Elimina cualquier elemento que te pueda distraer, procura estar concentrado en una sola actividad.&lt;/li&gt;
&lt;li&gt;Si tiene una prueba en vivo lo mejor es ir comentando el proceso que está realizando, así no tendrás nervios y será más dinámica la prueba.&lt;/li&gt;
&lt;li&gt;No olvides las pruebas unitarias, son muy importantes actualmente no existe un lugar donde no las apliquen.&lt;/li&gt;
&lt;li&gt;Se tu mismo, confía en ti y se sincero sobre tus conocimientos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este post se inspiro en el de &lt;a class="mentioned-user" href="https://dev.to/valtory"&gt;@valtory&lt;/a&gt; , &lt;a href="https://dev.to/valtory/como-venderse-como-dev-356i"&gt;Cómo venderse como dev&lt;/a&gt; ya que es algo muy importante en nuestro día a día.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima.&lt;/p&gt;

</description>
      <category>desarrollador</category>
      <category>pruebas</category>
      <category>spanish</category>
    </item>
    <item>
      <title>La mejor fuente para nuestro IDE</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Tue, 07 Sep 2021 01:47:42 +0000</pubDate>
      <link>https://dev.to/dannieldev/fuente-para-developers-5fbi</link>
      <guid>https://dev.to/dannieldev/fuente-para-developers-5fbi</guid>
      <description>&lt;p&gt;Existen muchos tipo de fuentes en la web destinadas a múltiples propósitos y entre todos estos esta el de desarrollo. Por eso hoy quisiera compartir una de las fuentes que más me gusta de forma personal (No porque sea la mejor).&lt;/p&gt;

&lt;p&gt;La fuente tiene el nombre de Victor mono combina la escritura cursiva con la monotipada, tiene soporte con la ligadura (Ligatures)  y lo mejor es que es gratuita. (&lt;a href="https://rubjo.github.io/victor-mono/" rel="noopener noreferrer"&gt;link&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Ingresaremos a la pagina del creador de la fuente &lt;a href="https://rubjo.github.io/victor-mono/" rel="noopener noreferrer"&gt;&lt;del&gt;link&lt;/del&gt;&lt;/a&gt;  y en esta descargaremos un zip con el source, archivos ttf con los que podremos instalar en nuestro sistema operativo, si estas en MACOS puedes utilizar los siguientes comandos de brew de una forma más sencilla.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew tap homebrew/cask-fonts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install --cask font-victor-mono
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hora de configurar nuestro IDE, ingresaremos a la configuración, en mi caso VSCode y donde ingresamos la fuente colocaremos el nombre de esta de la siguiente forma:&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%2Fp3aeohbwgiz2i2ls6xlr.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%2Fp3aeohbwgiz2i2ls6xlr.png" alt="Configuracion" width="800" height="126"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;como adicional te muestro las primeras líneas de mi configuración donde habilito la ligadura, el tamaño de la fuente y un tema que recomiendo para el uso de la fuente.&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%2Fckcny1xu4ucucrbvsug5.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%2Fckcny1xu4ucucrbvsug5.png" alt="Configuracion json" width="519" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resultado:&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%2F93b0gb7aoew0gbbn37fm.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%2F93b0gb7aoew0gbbn37fm.png" alt="Alt Text" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si conoces otra fuente u otros temas compártelo en los comentarios.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en la próxima.&lt;/p&gt;

</description>
      <category>fuente</category>
      <category>spanish</category>
      <category>developer</category>
      <category>desarrollo</category>
    </item>
    <item>
      <title>Lazy loading en Angular</title>
      <dc:creator>Danniel Navas</dc:creator>
      <pubDate>Wed, 01 Sep 2021 00:33:50 +0000</pubDate>
      <link>https://dev.to/dannieldev/lazy-loading-en-angular-2nd0</link>
      <guid>https://dev.to/dannieldev/lazy-loading-en-angular-2nd0</guid>
      <description>&lt;p&gt;Que es Lazy loadind? es la técnica mas utilizada para la mejora de carga de nuestras aplicaciones, en la cual se reduce el peso del bundle dado que en este lo que hacemos es dividir la aplicación en parte pequeñas (componentes).&lt;/p&gt;

&lt;p&gt;Además de ser la más utilizada es la que las empresas más piden en mi experiencia a una entrevista siempre ten en claro este tema y por esto te lo quiero explicar lo más sencillo posible.&lt;/p&gt;

&lt;p&gt;Dado que tenemos nuestra aplicación vamos a terminar con una estructura parecida a lo siguiente:&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%2Faqxhyd9mzatyzaxh2195.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%2Faqxhyd9mzatyzaxh2195.png" alt="lazyloading directorios" width="264" height="903"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto vamos a crear un nuestro primer componente con layzy para eso crearemos un module y un routing.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ng g c m componente —routing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Con esto creamos un module aparte y un router único para nuestro componente o componentes que mantendremos en esta parte de nuestra aplicación. Ya con esto sobre la misma ruta vamos a crear el componente &lt;/p&gt;

&lt;p&gt;&lt;code&gt;ng g c component/component&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Con esto vamos a crear la ruta dentro de nuestro router local  (router de nuestro componente).&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%2Fmryt690cav3q571k3ogj.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%2Fmryt690cav3q571k3ogj.png" alt="router local" width="800" height="545"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si intentamos acceder a esta ruta no podremos ya que nuestro router global no sabe a dónde dirigirse, y agregando el siguiente código le mostraremos cómo resolverlo tanto en el global como en nuestro local con las posibles rutas internas, como te las muestro a continuación:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhql52ueqedhh1e9rokii.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%2Fhql52ueqedhh1e9rokii.png" alt="router global" width="800" height="874"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y con esto tendríamos nuestra aplicación con lazy loading.&lt;/p&gt;

&lt;p&gt;Gracias por leer, nos vemos en una próxima ocasión.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>angular</category>
      <category>lazyloading</category>
      <category>spanish</category>
    </item>
  </channel>
</rss>
