<?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: Lino Mattos</title>
    <description>The latest articles on DEV Community by Lino Mattos (@retronauta).</description>
    <link>https://dev.to/retronauta</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%2F336195%2Faa9b1ee7-284a-4198-91c1-6148e96d654d.png</url>
      <title>DEV Community: Lino Mattos</title>
      <link>https://dev.to/retronauta</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/retronauta"/>
    <language>en</language>
    <item>
      <title>Generando archivos .gitignore muy útiles para nuestros proyectos</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Thu, 30 Mar 2023 19:28:58 +0000</pubDate>
      <link>https://dev.to/retronauta/generando-archivos-gitignore-muy-utiles-para-nuestros-proyectos-e1a</link>
      <guid>https://dev.to/retronauta/generando-archivos-gitignore-muy-utiles-para-nuestros-proyectos-e1a</guid>
      <description>&lt;p&gt;.gitignore es un archivo muy importante cuando trabajamos con repositorios git. Ya sea porque tengamos variables de entorno con información delicada por proteger o no deseemos subir a nuestro repositorio archivos que surgen a partir del desarrollo de nuestro proyecto como node_modules. Cada lenguaje/tecnologia tiene archivos que por uno u otro motivo es mejor no subirlos a tu repositorio remoto. &lt;/p&gt;

&lt;p&gt;Al crear un repositorio de Github se nos da la opción de incluir un template de .gitignore, si por algún motivo necesitamos agregarlo a un repo local o manualmente podemos usar el sitio: &lt;a href="https://www.toptal.com/developers/gitignore"&gt;https://www.toptal.com/developers/gitignore&lt;/a&gt;, el funcionamiento es sencillo, simplemente ponemos en el buscador la tecnología que necesitamos y darle al botón create para obtener nuestro archivo .gitignore. &lt;br&gt;
Tenemos múltiples templates que contemplan sistemas operativos, IDEs o lenguajes de programación. &lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
      <category>webdev</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Cómo comparar strings en Solidity.</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Thu, 23 Mar 2023 16:12:59 +0000</pubDate>
      <link>https://dev.to/retronauta/como-comparar-strings-en-solidity-1093</link>
      <guid>https://dev.to/retronauta/como-comparar-strings-en-solidity-1093</guid>
      <description>&lt;p&gt;Cuando estás iniciando en Solidity en algún momento puede ser que necesites comparar Strings. Tan acostumbrado que estoy a javaScript, quería aplicar una manera similar en Solidity, resultando que la manera difiere bastante.&lt;/p&gt;

&lt;p&gt;Los &lt;strong&gt;operadores de comparación (== y !=) no son compatibles con strings.&lt;/strong&gt;&lt;br&gt;
La solución es comparar los hashes de keccak256, los strings no pueden ser pasados directamente a keccak256, por lo que nos valdremos de abi.encodePacked() para que tomen el string a comparar.&lt;br&gt;
Aquí tenemos un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight solidity"&gt;&lt;code&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="n"&gt;comparison&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="k"&gt;memory&lt;/span&gt; &lt;span class="n"&gt;_nombre&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
  &lt;span class="nb"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;keccak256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encodePacked&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_nombre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nb"&gt;keccak256&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;encodePacked&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'Carla'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s"&gt;"El nombre debe ser Carla."&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;&lt;strong&gt;PD:&lt;/strong&gt; Estoy aprendiendo Solidity y es muy probable que halle mejores maneras de hacer comparaciones luego, especialmente por el costo que puedan tener. Dejo por aquí el enlace original de donde aprendí este método: &lt;a href="https://soliditytips.com/articles/compare-strings-solidity/"&gt;https://soliditytips.com/articles/compare-strings-solidity/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>solidity</category>
      <category>programming</category>
      <category>blockchain</category>
      <category>spanish</category>
    </item>
    <item>
      <title>¿Qué son los argumentos de la línea de comandos y para qué nos sirven en nodejs?</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Tue, 14 Mar 2023 03:09:53 +0000</pubDate>
      <link>https://dev.to/retronauta/que-son-los-argumentos-de-la-linea-de-comandos-y-para-que-nos-sirven-en-nodejs-2n13</link>
      <guid>https://dev.to/retronauta/que-son-los-argumentos-de-la-linea-de-comandos-y-para-que-nos-sirven-en-nodejs-2n13</guid>
      <description>&lt;p&gt;Hace unos días trabajaba con unos repositorios que tenían una extraña manera de ser inicializados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start &amp;lt;auth_token&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analizando mejor el código di con &lt;code&gt;process.argv&lt;/code&gt; que es un array que contiene los argumentos que le pasemos en la línea de comandos. &lt;/p&gt;

&lt;p&gt;Al inicio puede sonar algo que no tenga mucha utilidad, pero en ciertos casos puede ahorrarnos tiempo al ejecutar node. &lt;br&gt;
Te daré dos ejemplos.&lt;/p&gt;

&lt;p&gt;Imaginemos que tenemos este sencillo código:&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;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;express&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&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;port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&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;works!&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="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;port&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;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Servidor levantado en puerto:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;port&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 manera de cambiar el número de puerto es directamente en el código o con el uso de variables de entorno. Pero también podemos definirlo directamente cuando iniciamos el servidor desde la línea de comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start 4001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;express&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&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;express&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;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;express&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&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;argv&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/&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="nx"&gt;req&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;res&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="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;send&lt;/span&gt;&lt;span class="p"&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;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;listen&lt;/span&gt;&lt;span class="p"&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;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&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;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Servidor levantado en puerto:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&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 nuestra app inicia en el puerto 4001 ¿Qué pasó? Cómo indique anteriormente process.argv es un array que contiene los argumentos que le pasemos. Pueden ser uno o más argumentos y son tomados a partir del índice 2 (los dos primeros índices están reservados). &lt;br&gt;
Ahora podemos iniciar la app desde el puerto que queramos sin modificar ninguna línea de código. &lt;/p&gt;

&lt;p&gt;En el segundo ejemplo, supongamos que tenemos una API que necesita de un token para trabajar, hasta aquí nada del otro mundo, pero este token debe ser renovado cada hora. &lt;br&gt;
Podemos ejecutar la renovación, copiar y pegar el token en el código cada hora o simplemente aprovechar la facilidad que nos da process.argv.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm start &lt;span class="nv"&gt;uVMjbebCEFnj3&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zl?Ha91fbddeoXjPcu!rO!aCd-UdbbNjWAVEVthegd5HEbgYs!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí inicio el servidor con un token random. Guardo este token en una variable y funciona correctamente.&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;token&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;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Espero te haya servido este dato, si no lo usas activamente quizá te lo encuentres en algún momento y no está demás conocerlo. &lt;/p&gt;

</description>
      <category>node</category>
      <category>spanish</category>
      <category>beginners</category>
      <category>backend</category>
    </item>
    <item>
      <title>Cómo controlar tus gastos en aws</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Sat, 31 Dec 2022 22:00:42 +0000</pubDate>
      <link>https://dev.to/retronauta/como-controlar-tus-gastos-en-aws-1ape</link>
      <guid>https://dev.to/retronauta/como-controlar-tus-gastos-en-aws-1ape</guid>
      <description>&lt;p&gt;Cuando empezamos a aprender AWS y optamos por su nivel gratuito (free tier), tenemos muchísimos servicios sin costo o con bastante margen para ser probados. &lt;br&gt;
Para darnos una idea tienen este enlace con todos los beneficios de la &lt;a href="https://aws.amazon.com/free/?nc1=h_ls"&gt;capa gratuita de AWS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Si nos dejamos llevar por la emoción probando todo tipo de servicios, podemos acabar con una buena factura a fin de mes.&lt;br&gt;
Para evitarlo podemos poner un límite de gastos, que nos envíe una notificación cuando es superado.&lt;/p&gt;

&lt;p&gt;Para hacerlo vamos a la esquina superior derecha, clickeamos en nuestro &lt;strong&gt;nombre de usuario &amp;gt; billing dashboard &amp;gt; budgets&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Clickeamos en create budget:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cGQfUvKO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8jtfsc9a2616455fa2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cGQfUvKO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m8jtfsc9a2616455fa2a.png" alt="budget" width="880" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dejamos seleccionadas las opciones por defecto para usar templates y zero spend budget:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p_nira0Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ljgfqc3wln44ic2zcqco.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p_nira0Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ljgfqc3wln44ic2zcqco.png" alt="zero spend budget" width="706" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En &lt;strong&gt;budget name&lt;/strong&gt; le damos el nombre que queramos o dejamos el que tiene puesto por defecto. &lt;br&gt;
Muy importante es poner el email donde queramos recibir las alertas de gasto en &lt;strong&gt;email recipients&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Por último damos al botón create budget y eso sería todo. &lt;/p&gt;

&lt;p&gt;Ahora recibiremos alertas cuando nuestro gasto en AWS supere 1 dólar 😃.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>spanish</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Cómo instalar y usar distintas versiones de node en ubuntu y derivados.</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Fri, 23 Dec 2022 23:43:00 +0000</pubDate>
      <link>https://dev.to/retronauta/como-instalar-y-usar-distintas-versiones-de-node-en-ubuntu-y-derivados-3pdm</link>
      <guid>https://dev.to/retronauta/como-instalar-y-usar-distintas-versiones-de-node-en-ubuntu-y-derivados-3pdm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Antes de empezar:&lt;/strong&gt; Mi máquina tenía instalado Node mediante NodeSource, desinstale fácilmente esa versión para proceder al método de este tutorial. Si tienes Node instalado por otro método, toma tus previsiones antes de continuar. &lt;/p&gt;

&lt;p&gt;En algunas ocasiones necesitaremos manejar una versión distinta de Node a la instalada actualmente en nuestra máquina. Ya sea que estés aprendiendo algo nuevo, trabajando en el proyecto de otra persona o cualquier otro motivo.&lt;/p&gt;

&lt;p&gt;Esta situación la viví hace poco, por lo que averiguando di con &lt;strong&gt;Node Version Manager (NVM)&lt;/strong&gt;. Una manera de tener distintas versiones de Node instaladas y la posibilidad de usar la que desees según tu necesidad. &lt;/p&gt;

&lt;p&gt;La instalación es sencilla, supongamos que quiero instalar la versión LTS más actual (a fecha de hoy la 18) y la anterior LTS (la 16).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-o-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;o también:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.2/install.sh | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego procedemos a ejecutar estas líneas que cargaran NVM:&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="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;NVM_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-z&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/.nvm"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;printf&lt;/span&gt; %s &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;XDG_CONFIG_HOME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/nvm"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="se"&gt;\.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$NVM_DIR&lt;/span&gt;&lt;span class="s2"&gt;/nvm.sh"&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nos queda un solo paso, si no cambiaste la shell de tu terminal lo más seguro es que utilices bash, por lo que necesitas ejecutar este comando para recargar la configuración &lt;code&gt;source ~/.bashrc&lt;/code&gt;, yo soy fiel usuario de zsh por lo que tendré que usar &lt;code&gt;source ~/.zshrc&lt;/code&gt; y listo ya tendría que estar funcionando. &lt;/p&gt;

&lt;p&gt;Ahora que tengo todo listo, proceso a instalar la última LTS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para instalar la anterior versión pongo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--lts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gallium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gallium es el nombre de la versión 16 que era la anterior. &lt;br&gt;
&lt;strong&gt;Recuerden que la primera versión que instalemos será la que se utilizara por defecto.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Ahora, cuando quiera usar la versión 16 simplemente pongo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use &lt;span class="nt"&gt;--lts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;gallium
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;También funciona poner el número mayor de la version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nvm use 16
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto ya estaría, recuerden que pueden instalar números específicos de versión, así como solo poner el número mayor de versión, tipo &lt;code&gt;nvm install 14&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Un último tip, si quieren la lista completa de nombres de versiones lts o numeros de versiones disponibles, pueden usar el comando &lt;code&gt;nvm ls-remote&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Para más comandos y ejemplos tienen el enlace de NVM:&lt;br&gt;
&lt;a href="https://github.com/nvm-sh/nvm"&gt;Documentación de NVM&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ubuntu</category>
      <category>node</category>
      <category>nvm</category>
      <category>spanish</category>
    </item>
    <item>
      <title>Tip rápido: Cambiar el puerto en React</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Wed, 30 Nov 2022 20:01:38 +0000</pubDate>
      <link>https://dev.to/retronauta/tip-rapido-cambiar-el-puerto-en-react-2jhl</link>
      <guid>https://dev.to/retronauta/tip-rapido-cambiar-el-puerto-en-react-2jhl</guid>
      <description>&lt;p&gt;Por defecto cuando ejecutamos &lt;code&gt;npm run start&lt;/code&gt; en nuestro proyecto de React, se toma el puerto 3000 por defecto. &lt;br&gt;
Si por algún motivo queremos que corra en otro puerto, por ejemplo el 3001, simplemente añadimos ese numero de puerto a nuestras variables de entorno:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creamos un archivo .env en la raíz del proyecto&lt;/li&gt;
&lt;li&gt;Dentro del archivo añadimos lo siguiente:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3001&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y listo, ¡ya lo tenemos! Ahora cada vez que corras &lt;code&gt;npm run start&lt;/code&gt; se tomara el puerto 3001. &lt;/p&gt;

</description>
      <category>showdev</category>
      <category>webdev</category>
    </item>
    <item>
      <title>¿Como convertir un objeto en query strings?</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Sun, 20 Nov 2022 22:06:22 +0000</pubDate>
      <link>https://dev.to/retronauta/como-convertir-un-objeto-en-query-strings-44dg</link>
      <guid>https://dev.to/retronauta/como-convertir-un-objeto-en-query-strings-44dg</guid>
      <description>&lt;p&gt;Cuando hacemos consultas a una API, puede que queramos almacenar las query strings en un objeto para posteriormente ser usadas en la URL de la consulta en la API. &lt;/p&gt;

&lt;p&gt;Por ejemplo tenemos esta url de la api de TMDB:&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="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//api.themoviedb.org/3/find/21?api_key=qe879fds9a&amp;amp;language=en-US&amp;amp;external_source=imdb_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aquí tenemos 3 query string:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;api_key&lt;/li&gt;
&lt;li&gt;language&lt;/li&gt;
&lt;li&gt;external_source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Podríamos hacer lo siguiente para recibir las query strings:&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="s2"&gt;`https://api.themoviedb.org/3/find/21?api_key=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;language=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;language&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;external_source=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;external_source&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta es una manera válida pero si la url base es extensa y manejamos demasiadas queries se hará mas difícil de mantener y escalar. Podemos solucionarlo almacenando las queries en un objeto.&lt;br&gt;
Entonces, ¿como convertimos un objeto en query strings?&lt;/p&gt;

&lt;p&gt;Pues, utilizando un módulo nativo de nodejs llamado &lt;strong&gt;querystring&lt;/strong&gt;.&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;querystring&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="s1"&gt;querystring&lt;/span&gt;&lt;span class="dl"&gt;'&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;queries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;qe879fds9a&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;en-US&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;external_source&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;imdb_id&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;base_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.themoviedb.org/3/find/21?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;queryparams&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;querystring&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;queries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;queryparams&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="nx"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;qe879fds9a&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;language&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;en&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;US&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;external_source&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;imdb_id&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;`&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;base_url&lt;/span&gt;&lt;span class="p"&gt;}${&lt;/span&gt;&lt;span class="nx"&gt;queryparams&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&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="err"&gt;\\&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://api.themoviedb.org/3/find/21?api_key=qe879fds9a&amp;amp;language=en-US&amp;amp;external_source=imdb_id&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Ahora tenemos un código mas escalable. Pudiendo manejar toda la lógica de las queries desde este objeto. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Cómo crear un array de x longitud relleno de 0s en javascript.</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Wed, 09 Nov 2022 00:50:01 +0000</pubDate>
      <link>https://dev.to/retronauta/como-crear-un-array-de-x-longitud-relleno-de-0s-en-javascript-4i9n</link>
      <guid>https://dev.to/retronauta/como-crear-un-array-de-x-longitud-relleno-de-0s-en-javascript-4i9n</guid>
      <description>&lt;p&gt;Hace unos días necesitaba crear un array relleno de números 0. 🤔&lt;br&gt;
Podía hacerlo de una manera literal declarándolo y contando los 0 que vaya ingresando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let arr = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;¿Está perfecto no?👌&lt;br&gt;
¿Pero qué pasa si debo rellenar con 100 números 0 o cualquier otro valor? 😅&lt;/p&gt;

&lt;p&gt;Entonces puedo apoyarme en el objeto &lt;code&gt;Array()&lt;/code&gt; y el metodo &lt;code&gt;.fill()&lt;/code&gt; de esta manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let nuevoArr = Array(90).fill(0)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro de &lt;code&gt;Array()&lt;/code&gt; pongo la cantidad de elementos que quiero tener y en &lt;code&gt;fill()&lt;/code&gt; el contenido que rellenará el array.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SIz_efAv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bvq825o8vnn7ffvwe57q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SIz_efAv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bvq825o8vnn7ffvwe57q.png" alt="Array relleno de 0s" width="445" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aplica a cualquier tipo de contenido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let emojiArr = Array(42).fill(String.fromCodePoint(0x1F914))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SBxXF0Xs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1opktdenbchv9jbttdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SBxXF0Xs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t1opktdenbchv9jbttdg.png" alt="Array relleno de emojis" width="456" height="133"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let arrObjs = Array(12).fill({})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--r27rykAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xeogex7z0rng6fvv4i4j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--r27rykAY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xeogex7z0rng6fvv4i4j.png" alt="Array relleno de objetos vacios" width="442" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>beginners</category>
      <category>tutorial</category>
      <category>codenewbie</category>
    </item>
    <item>
      <title>¿Cómo podemos mantener directorios vacíos en git/github?</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Mon, 17 Oct 2022 18:52:50 +0000</pubDate>
      <link>https://dev.to/retronauta/como-podemos-mantener-directorios-vacios-en-gitgithub-119l</link>
      <guid>https://dev.to/retronauta/como-podemos-mantener-directorios-vacios-en-gitgithub-119l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Tenemos la siguiente situación:&lt;/strong&gt; Estamos armando la estructura de nuestro proyecto en git, carpetas y sub carpetas, muchas de estas vacías, pero que a futuro serán llenadas con los archivos del proyecto. &lt;br&gt;
Cuando queremos subir el repositorio a github nos encontramos con la sorpresa de que ¡toda carpeta vacía desapareció!&lt;br&gt;
Lo que sucede es que &lt;strong&gt;git solo añade archivos al stage y cualquier carpeta vacía será descartada.&lt;/strong&gt;&lt;br&gt;
Si no queremos agregar en ese momento los archivos que estarán en esas carpetas, &lt;strong&gt;podemos crear un archivo vacío llamado&lt;/strong&gt; &lt;code&gt;.keepgit&lt;/code&gt;, &lt;strong&gt;de esta manera conservaremos la estructura de nuestro proyecto sin mucho problema.&lt;/strong&gt;&lt;br&gt;
Algunas veces este archivo tendrá el nombre de &lt;code&gt;.keep&lt;/code&gt;, por lo que es bueno saberlo si estamos explorando repositorios ajenos. &lt;br&gt;
Algunos sugieren que es mejor usar &lt;code&gt;.gitignore&lt;/code&gt;, lo "malo" de esta solución es que podemos llegar a confundir a las personas que tengan que trabajar con el proyecto, ya que .gitignore tiene otra función. &lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Guía rápida para usar Markdown</title>
      <dc:creator>Lino Mattos</dc:creator>
      <pubDate>Thu, 13 Oct 2022 21:36:31 +0000</pubDate>
      <link>https://dev.to/retronauta/guia-rapida-para-usar-markdown-2928</link>
      <guid>https://dev.to/retronauta/guia-rapida-para-usar-markdown-2928</guid>
      <description>&lt;p&gt;Markdown es sencillo de aplicar para dar formato a nuestro texto. Muy útil en la creación de archivos README.md en github. &lt;br&gt;
Aquí tienen una guía básica con ejemplos, más unos enlaces interesantes para profundizar en este lenguaje de marcado. &lt;/p&gt;
&lt;h2&gt;
  
  
  Líneas separadoras
&lt;/h2&gt;






&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;---&lt;/span&gt;
&lt;span class="ge"&gt;__&lt;/span&gt;_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Citas
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;"Esta es una cita."&lt;br&gt;
&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gt"&gt;&amp;gt; "Esta es una cita."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Encabezados
&lt;/h2&gt;

&lt;h1&gt;
  
  
  h1
&lt;/h1&gt;

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

&lt;h3&gt;
  
  
  h3
&lt;/h3&gt;

&lt;h4&gt;
  
  
  h4
&lt;/h4&gt;

&lt;h5&gt;
  
  
  h5
&lt;/h5&gt;

&lt;h6&gt;
  
  
  h6
&lt;/h6&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# h1&lt;/span&gt;
&lt;span class="gu"&gt;## h2&lt;/span&gt;
&lt;span class="gu"&gt;### h3&lt;/span&gt;
&lt;span class="gu"&gt;#### h4&lt;/span&gt;
&lt;span class="gu"&gt;##### h5&lt;/span&gt;
&lt;span class="gu"&gt;###### h6&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Imágenes
&lt;/h2&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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fd%2Fdb%2FMarkdown-mark-half.svg%2F320px-Markdown-mark-half.svg.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%2Fupload.wikimedia.org%2Fwikipedia%2Fcommons%2Fthumb%2Fd%2Fdb%2FMarkdown-mark-half.svg%2F320px-Markdown-mark-half.svg.png" alt="Logo Markdown"&gt;&lt;/a&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="p"&gt;![&lt;/span&gt;&lt;span class="nv"&gt;Logo Markdown&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;url&lt;/span&gt; de la imagen)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Itálica
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Itálica 1&lt;/em&gt; Itálica 2_&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="ge"&gt;*Itálica 1*&lt;/span&gt; _Itálica 2_
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Negrita
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;negrita 1&lt;/strong&gt; &lt;strong&gt;negrita 2&lt;/strong&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="gs"&gt;**negrita 1**&lt;/span&gt; __negrita 2__
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tachado
&lt;/h2&gt;

&lt;p&gt;&lt;del&gt;tachado&lt;/del&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;~~tachado~~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Listas
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ordenadas
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;uno

&lt;ol&gt;
&lt;li&gt;sub uno&lt;/li&gt;
&lt;li&gt;sub dos&lt;/li&gt;
&lt;/ol&gt;


&lt;/li&gt;

&lt;li&gt;dos&lt;/li&gt;

&lt;li&gt;tres
&lt;/li&gt;

&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;1.&lt;/span&gt; uno
&lt;span class="p"&gt; 1.&lt;/span&gt; sub uno
&lt;span class="p"&gt; 2.&lt;/span&gt; sub dos
&lt;span class="p"&gt;2.&lt;/span&gt; dos
&lt;span class="p"&gt;3.&lt;/span&gt; tres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  desordenadas
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;uno&lt;/li&gt;
&lt;li&gt;dos&lt;/li&gt;
&lt;li&gt;tres
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; uno
&lt;span class="p"&gt;-&lt;/span&gt; dos
&lt;span class="p"&gt;-&lt;/span&gt; tres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Código
&lt;/h2&gt;

&lt;p&gt;Para mostrar bloques de código, lo encerramos dentro de 3 backticks de apertura y cierre. Adicionalmente, si en los primeros tres backticks ponemos el nombre del código del bloque, nos resaltará la sintaxis que este tiene.&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="w"&gt;   &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"nombre"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pepe"&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;h2&gt;
  
  
  Enlaces
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//www.google.com"&gt;google&lt;/a&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="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;google&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;www.google.com&lt;/span&gt; &lt;span class="nn"&gt;"la pagina de google"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Email
&lt;/h2&gt;

&lt;p&gt;&lt;a href="mailto:linomattos7@gmail.com"&gt;linomattos7@gmail.com&lt;/a&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="nv"&gt;&amp;lt;linomattos7@gmail.com&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Tablas
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;uno&lt;/th&gt;
&lt;th&gt;dos&lt;/th&gt;
&lt;th&gt;tres&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;| uno |  dos  | tres  |
| --- |  ---  |  ---  |
|  1  |   2   |   3   |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Enlaces interesantes:
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Lenguajes soportados para el resaltado de sintaxis.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.rubycoloredglasses.com/2013/04/languages-supported-by-github-flavored-markdown/" rel="noopener noreferrer"&gt;https://www.rubycoloredglasses.com/2013/04/languages-supported-by-github-flavored-markdown/&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Sintaxis básica de Markdown.
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.markdownguide.org/basic-syntax" rel="noopener noreferrer"&gt;https://www.markdownguide.org/basic-syntax&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Sintaxis extendida de Markdown
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.markdownguide.org/extended-syntax/" rel="noopener noreferrer"&gt;https://www.markdownguide.org/extended-syntax/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>markdown</category>
      <category>spanish</category>
      <category>guia</category>
    </item>
  </channel>
</rss>
