<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: equimancho</title>
    <description>The latest articles on Forem by equimancho (@equimancho).</description>
    <link>https://forem.com/equimancho</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%2Forganization%2Fprofile_image%2F4341%2Fc86a35c2-7954-4ca3-a2d9-9bc0aeac358f.png</url>
      <title>Forem: equimancho</title>
      <link>https://forem.com/equimancho</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/equimancho"/>
    <language>en</language>
    <item>
      <title>Usar múltiples usuarios con Git</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Wed, 19 Oct 2022 22:42:30 +0000</pubDate>
      <link>https://forem.com/equimancho/usar-multiples-usuarios-con-git-1fci</link>
      <guid>https://forem.com/equimancho/usar-multiples-usuarios-con-git-1fci</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/how-to-use-multiple-users-with-git-2e9l"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/usar-multiples-usuarios-con-git-1fci"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Si estás trabajando con múltiples usuarios de Git, por ejemplo, con uno para proyectos personales y otro para los proyectos del trabajo.&lt;/p&gt;

&lt;p&gt;Entonces &lt;strong&gt;no es buena idea definir un usuario global&lt;/strong&gt; porque todos los proyectos van a usar el mismo y puede ser muy fácil terminar haciendo un &lt;code&gt;commit&lt;/code&gt; con el usuario incorrecto.&lt;/p&gt;

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

&lt;p&gt;Si ese es tu caso, no te preocupes. No es realmente un problema porque se puede enmendar (ammend) con este comando.&lt;/p&gt;

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

git commit --author="First Last &amp;lt;first.last@company.org&amp;gt;" --amend --no-edit 


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

&lt;/div&gt;

&lt;p&gt;Pero seamos sinceros, ¿quién quiere estar ejecutando este comando frecuentemente?. Seguramente casi nadie. Es una de esas cosas que solo queremos tener en cuenta en casos de emergencia.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configuración de Git
&lt;/h2&gt;

&lt;p&gt;Lo primero que me gusta hacer es cambiar el editor por defecto de git de &lt;code&gt;vim&lt;/code&gt; a &lt;code&gt;VSCode&lt;/code&gt;. Aunque es algo opcional, si te sientes bien editando directamente desde la terminal.&lt;/p&gt;

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

git config &lt;span class="nt"&gt;--global&lt;/span&gt; core.editor &lt;span class="s1"&gt;'code --wait'&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Y lo otro es crear dos alias, para acceder y editar fácilmente las configuraciones.&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;alias &lt;/span&gt;&lt;span class="nv"&gt;gcg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --global"&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;gcl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"git config --edit --local"&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;La diferencia entre ellas es que &lt;code&gt;global&lt;/code&gt; aplica para todos los proyectos de Git en tu máquina y &lt;code&gt;local&lt;/code&gt; solo aplica al proyecto en la ruta actual.&lt;/p&gt;




&lt;p&gt;Ahora vamos a aprender como usar diferentes usuarios en cada proyecto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Remover el Global 👌
&lt;/h2&gt;

&lt;p&gt;Este paso es recomendado, pero también es opcional. En mi caso prefiero no tener un usuario por defecto para todos los proyectos.&lt;/p&gt;

&lt;p&gt;Vamos a abrir la configuración &lt;code&gt;global&lt;/code&gt; utilizando el alias &lt;code&gt;gcg&lt;/code&gt; o con el comando &lt;code&gt;git config --edit --global&lt;/code&gt; y eliminar todas las configuraciones que tengan que ver con &lt;code&gt;[credential]&lt;/code&gt; y &lt;code&gt;[user]&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  La complicada 👎
&lt;/h2&gt;

&lt;p&gt;Una forma es que después de crear o clonar un repositorio, definas manualmente la configuración con estos comandos.&lt;/p&gt;

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

git config user.name &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;
git config user.email &lt;span class="s2"&gt;"&amp;lt;user@mail.com&amp;gt;"&lt;/span&gt;
git config credential.username &lt;span class="s2"&gt;"&amp;lt;user&amp;gt;"&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Puede ser buena idea si no tienes una ruta específica para crear o clonar tus proyectos, pero... toma muchísimo tiempo y es muy fácil de olvidar, créeme, además vas a necesitar &lt;strong&gt;repetir lo mismo&lt;/strong&gt; con cada repositorio que clones.&lt;/p&gt;

&lt;h2&gt;
  
  
  La recomendada 👍
&lt;/h2&gt;

&lt;p&gt;Lo primero es definir una ruta específica para diferenciar nuestros proyectos y crear un archivo &lt;code&gt;.gitconfig&lt;/code&gt; para cada &lt;strong&gt;perfil de usuario&lt;/strong&gt;, tantos como sean necesarios.&lt;/p&gt;

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

~
├── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; global
└── Developer/
   ├── personal/
   │   ├── proyecto_1/
   │   ├── proyecto_2/
   │   ├── proyecto_#/
   │   └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; personal
   └── empresa/
       ├── proyecto_1/
       ├── proyecto_2/
       ├── proyecto_#/
       └── .gitconfig &amp;lt;&lt;span class="nt"&gt;--&lt;/span&gt; empresa


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Personal
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;usuario-github&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;usuario-github&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;usuario-github&amp;gt;@users.noreply.github.com&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Empresa
&lt;/h3&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/Developer/company/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;credential&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;username = &amp;lt;user&amp;gt;&lt;/span&gt;
&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;name = &amp;lt;Nombre Apellido&amp;gt;&lt;/span&gt;
    &lt;span class="s"&gt;email = &amp;lt;usuario&amp;gt;@empresa.org&lt;/span&gt;


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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Global
&lt;/h3&gt;

&lt;p&gt;Ahora vamos a abrir la configuración &lt;code&gt;global&lt;/code&gt; usando el alias &lt;code&gt;gcg&lt;/code&gt; o el comando &lt;code&gt;git config --edit --global&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;

&lt;span class="c1"&gt;# ~/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/personal/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/personal/.gitconfig&lt;/span&gt;

&lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;includeIf "gitdir/i&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;~/Developer/empresa/"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="s"&gt;path = ~/Developer/empresa/.gitconfig&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Así, tomará la configuración del usuario de cada "perfil" dependiendo de la ruta y podrás crear o clonar proyectos dentro de cada uno de ellos sin tener que estar lidiando con configuraciones manuales y evitando tener que usar el comando &lt;code&gt;amend&lt;/code&gt; para corregir errores.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Agradecimientos especiales a &lt;strong&gt;&lt;a href="https://twitter.com/feregri_no" rel="noopener noreferrer"&gt;feregri_no&lt;/a&gt;&lt;/strong&gt; y &lt;strong&gt;&lt;a href="https://twitter.com/ChrisFt25" rel="noopener noreferrer"&gt;ChrisFt25&lt;/a&gt;&lt;/strong&gt; de Twitter por enseñarme estos trucos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>git</category>
      <category>github</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Vite: Configuración para React</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Mon, 09 May 2022 15:56:35 +0000</pubDate>
      <link>https://forem.com/equimancho/vite-configuracion-para-react-3hf2</link>
      <guid>https://forem.com/equimancho/vite-configuracion-para-react-3hf2</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/vite-powerful-react-project-g4m"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/vite-configuracion-para-react-3hf2"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;a href="https://vitejs.dev/" rel="noopener noreferrer"&gt;Vite&lt;/a&gt; es de lejos la mejor alternativa para crear proyectos de React hoy en día.&lt;/p&gt;

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

npm create vite@latest &amp;lt;project-name&amp;gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--template&lt;/span&gt; &amp;lt;react-swc|react-swc-ts&amp;gt;
&lt;span class="c"&gt;# npm 7+, extra double guion es requerido&lt;/span&gt;

&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;project-name&amp;gt;
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev


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

&lt;/div&gt;

&lt;p&gt;Con estos comandos creamos un proyecto muy básico y limpio que sirve como punto de inicio, pero que va a necesitar algunas herramientas extras para automatizar tareas que pueden facilitar tu vida y la de tu equipo de desarrollo.&lt;/p&gt;




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

&lt;p&gt;Se recomienda hacer estas configuraciones en los &lt;strong&gt;ajustes del proyecto&lt;/strong&gt; y no en los ajustes globales.&lt;/p&gt;

&lt;p&gt;Empezaremos creando una carpeta &lt;code&gt;.vscode&lt;/code&gt; con un archivo &lt;code&gt;settings.json&lt;/code&gt; dentro.&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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Archivo:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/.vscode/settings.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"explorer.fileNesting.patterns"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"*.js"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$(capture).js.map, $(capture).*.js, $(capture)_*.js, $(capture)*.snap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"*.jsx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$(capture).js, $(capture).*.jsx, $(capture)_*.js, $(capture)_*.jsx, $(capture)*.snap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"*.ts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$(capture).js, $(capture).d.ts.map, $(capture).*.ts, $(capture)_*.js, $(capture)_*.ts, $(capture)*.snap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"*.tsx"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$(capture).ts, $(capture).*.tsx, $(capture)_*.ts, $(capture)_*.tsx, $(capture)*.snap"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emmet.excludeLanguages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emmet.includeLanguages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"markdown"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"html"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"javascript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"javascriptreact"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"typescript"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"typescriptreact"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emmet.showSuggestionsAsSnippets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"emmet.triggerExpansionOnTab"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"files.exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"**/*.js.map"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$(basename)"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"**/node_modules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"html.autoClosingTags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"javascript.autoClosingTags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"javascript.suggest.completeFunctionCalls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript.suggest.completeFunctionCalls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"javascript.inlayHints.functionLikeReturnTypes.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript.inlayHints.functionLikeReturnTypes.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"javascript.inlayHints.parameterNames.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript.inlayHints.parameterNames.enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"javascript.suggest.autoImports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"search.exclude"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"**/coverage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"**/node_modules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript.autoClosingTags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"typescript.suggest.autoImports"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Existen muchas extensiones y configuraciones para VSCode por ahí. Si necesitas un toque extra, les recomiendo darle una mirada a &lt;a href="https://dev.to/equiman/my-essential-visual-studio-code-extensions-and-configurations-5197"&gt;VSCode - Essentials&lt;/a&gt; y &lt;a href="https://dev.to/equiman/vscode-react-flavored-134h"&gt;VSCode - React Flavored&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;No hay necesidad de instalar una extension extra para hacer depuración de React desde VSCode. &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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;File:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/.vscode/launch.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"0.2.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"configurations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chrome"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"msedge"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"request"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"launch"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Launch Chrome against localhost"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"http://localhost:3000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nl"&gt;"webRoot"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"${workspaceFolder}"&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;Desactive la apertura automática del navegador adicionando &lt;code&gt;BROWSER=none&lt;/code&gt; al archivo &lt;code&gt;.env&lt;/code&gt; en tu proyecto. También hay que cambiar el script &lt;code&gt;dev&lt;/code&gt; para que use el mismo puerto.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: package.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "scripts": {
&lt;span class="gd"&gt;-   "dev": "vite",
&lt;/span&gt;&lt;span class="gi"&gt;+   "dev": "vite --port 3000",
&lt;/span&gt;  }
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Ejecute el comando &lt;code&gt;npm run dev&lt;/code&gt; e inicie el navegador desde el panel de Depuración. Ahora puedes adicionar puntos de interrupción (break points) directamente en VSCode.&lt;/p&gt;

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

&lt;p&gt;Si quiere que VSCode muestre extensions recomendadas cuando abra el proyecto.&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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;File:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/.vscode/extentions.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"recommendations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"dbaeumer.vscode-eslint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"esbenp.prettier-vscode"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"stylelint.vscode-stylelint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"ZixuanChen.vitest-explorer"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;




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

&lt;ul&gt;
&lt;li&gt;Extensión &lt;a href="https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint" rel="noopener noreferrer"&gt;ES Lint&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: /.vscode/settings.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{ 
&lt;span class="gi"&gt;+    "editor.formatOnSave": true,
+    "javascript.format.enable": false,
+    "javascript.validate.enable": true,
+    "typescript.format.enable": false,
+    "typescript.validate.enable": true,
+    "editor.codeActionsOnSave": {
+        "source.fixAll.eslint": true
+    }
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Instale este paquete en la carpeta del proyecto:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; eslint
npm init @eslint/config


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

&lt;/div&gt;

&lt;p&gt;Pueden elegir la configuración que deseen, pero la que recomiendo es:&lt;/p&gt;

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

Use: To check syntax, find problems, and enforce code style
Type of modules: JavaScript modules &lt;span class="o"&gt;(&lt;/span&gt;import/export&lt;span class="o"&gt;)&lt;/span&gt;
Framework: React
Typescript: No &lt;span class="c"&gt;#o Yes si tu proyecto lo usa&lt;/span&gt;
Run: Browser &lt;span class="c"&gt;#y Node si usa Next.js&lt;/span&gt;
Style guide: Popular -&amp;gt; Standard &lt;span class="c"&gt;#JS sin punto y coma ;&lt;/span&gt;
Format: JSON


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Excepción de los punto y coma&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Debido a que la guía de estilos &lt;code&gt;standard&lt;/code&gt; no usa puno y como debes tener presente los siguiente. Si la línea de código siguiente comienza con alguno de los siguientes operadores &lt;code&gt;[&lt;/code&gt;, &lt;code&gt;(&lt;/code&gt;, &lt;code&gt;+&lt;/code&gt;, &lt;code&gt;\&lt;/code&gt;*, &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;-&lt;/code&gt;, &lt;code&gt;,&lt;/code&gt;, &lt;code&gt;.&lt;/code&gt;, será reconocida como una expresión perteneciente a la línea anterior. Por lo tanto, vas a necesitar empezar la línea con &lt;code&gt;;&lt;/code&gt; si quieres que la reconozca como una nueva sentencia de código.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Al finalizar va preguntar si desea instalar uno paquetes extras. La respuesta debe ser: &lt;strong&gt;yes&lt;/strong&gt; (si). Cuando finalice, actualice las configuraciones de las reglas así:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "rules": {
&lt;span class="gi"&gt;+     "no-console": "warn",
+     "react/prop-types": "off",
+     "react/self-closing-comp": "warn",
+     "react/react-in-jsx-scope": "off"
&lt;/span&gt;    },
&lt;span class="gi"&gt;+   "settings": {
+     "react": {
+       "version": "detect"
+     }
+   }
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Si estas usando &lt;code&gt;TypeScript&lt;/code&gt; también debes adicionar esta configuración:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "parserOptions": {
&lt;span class="gi"&gt;+     "project": ["tsconfig.json"],
+     "createDefaultProgram": true
&lt;/span&gt;    },
    "rules": {
      "no-console": "warn",
      "react/prop-types": "off",
      "react/self-closing-comp": "warn",
&lt;span class="gi"&gt;+     "@typescript-eslint/consistent-type-definitions": ["error", "type"],
+     "@typescript-eslint/explicit-function-return-type": "off",
&lt;/span&gt;  },
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Cree un archivo &lt;code&gt;.eslintignore&lt;/code&gt; en la raíz del proyecto:&lt;/p&gt;

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

&lt;span class="c"&gt;# 📄 Archivo: .eslintignore
&lt;/span&gt;-----------------------------------

&lt;span class="n"&gt;build&lt;/span&gt;
&lt;span class="n"&gt;coverage&lt;/span&gt;
&lt;span class="n"&gt;dist&lt;/span&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;No es necesario adicionar los &lt;code&gt;node_modules&lt;/code&gt; porque los ignora por defecto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si no quieres usar la extensión de &lt;code&gt;ES Lint&lt;/code&gt;, adicione los comandos &lt;code&gt;list&lt;/code&gt; (listar) y &lt;code&gt;fix&lt;/code&gt; (corregir) &lt;em&gt;al final&lt;/em&gt; de la lista de &lt;code&gt;scripts&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: package.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "scripts": {
&lt;span class="gi"&gt;+    "lint": "eslint .",
+    "lint:fix": "eslint . --fix --ext .js,.jsx,.ts,.tsx"
&lt;/span&gt;  }
}
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Evitar error import React
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Desde React 17, no es necesario usar &lt;code&gt;import React&lt;/code&gt; cuando solo se usa JSX, pero si lo debemos hacer para usar Hooks o los otros métodos que provee React.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para evitar que &lt;code&gt;ES Lint&lt;/code&gt; nos alerte sobre el &lt;code&gt;import React&lt;/code&gt; debemos adicionar el siguiente plugin a la configuración:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "extends": [
      "plugin:react/recommended",
      "standard-with-typescript",
&lt;span class="gi"&gt;+     "plugin:react/jsx-runtime",    
&lt;/span&gt;    ],
}
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Lineas en Blanco
&lt;/h3&gt;

&lt;p&gt;Si quiere preservar líneas en blanco después de las definiciones.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "rules": {
&lt;span class="gi"&gt;+       "padding-line-between-statements": [
+           "error",
+           {
+               "blankLine": "always",
+               "prev": "*",
+               "next": "return"
+           },
+           {
+               "blankLine": "always",
+               "prev": [
+                   "const",
+                   "let",
+                   "var"
+               ],
+               "next": "*"
+           },
+           {
+               "blankLine": "any",
+               "prev": [
+                   "const",
+                   "let",
+                   "var"
+               ],
+               "next": [
+                   "const",
+                   "let",
+                   "var"
+               ]
+           }
+       ]
&lt;/span&gt;    },
}
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Auto ordenar
&lt;/h3&gt;

&lt;p&gt;Si no quieres lidiar manualmente con el ordenamiento de propiedades o imports, o que cada persona en el equipo lo haga de forma diferente, adiciona estas configuraciones.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "rules": {
&lt;span class="gi"&gt;+       "import/order": [
+           "warn",
+           {
+               "pathGroups": [
+                   {
+                       "pattern": "~/**",
+                       "group": "external",
+                       "position": "after"
+                   }
+               ],
+               "newlines-between": "always-and-inside-groups"
+           }
+       ],
+       "react/jsx-sort-props": [
+           "warn",
+           {
+               "callbacksLast": true,
+               "shorthandFirst": true,
+               "noSortAlphabetically": false,
+               "reservedFirst": true
+           }
+       ]
&lt;/span&gt;    },
}
&lt;span class="err"&gt;

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

&lt;/div&gt;




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

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;ES Lint&lt;/code&gt; podría ser suficiente y Prettier es totalmente opcional, pero recomiendo usarlo porque tiene mejor rendimiento a la hora de hacer formateo que &lt;code&gt;ES Lint&lt;/code&gt;. El problema es que a veces se "pelean" entre ellos, así que hay que saber configurarlos para que trabajen juntos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si también lo quieres usar estos son los pasos.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extensión &lt;a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode" rel="noopener noreferrer"&gt;Prettier - Code formatter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: /.vscode/settings.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
&lt;span class="gd"&gt;-    "editor.codeActionsOnSave": {
-        "source.fixAll.eslint": true
-    }
&lt;/span&gt;&lt;span class="gi"&gt;+    "eslint.probe": [
+        "javascript",
+        "javascriptreact",
+        "typescript",
+        "typescriptreact"
+    ],
+    "[javascript][typescript]": {
+        "editor.defaultFormatter": "esbenp.prettier-vscode",
+        "editor.formatOnSave": false,
&lt;/span&gt;         // Corre primero Prettier y luego ESLint
&lt;span class="gi"&gt;+        "editor.codeActionsOnSave": [
+            "source.formatDocument",
+            "source.fixAll.eslint"
+        ],
+    }
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Instalar Prettier:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; prettier 


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

&lt;/div&gt;

&lt;p&gt;Y ESLint (JS) para prettier:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; eslint-config-prettier


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

&lt;/div&gt;

&lt;p&gt;O TSLint (TS) para prettier:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; tslint-config-prettier


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

&lt;/div&gt;

&lt;p&gt;Cree un archivo &lt;code&gt;.prettierignore&lt;/code&gt; en la raíz del proyecto:&lt;/p&gt;

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

&lt;span class="c"&gt;# 📄 Archivo: .prettierignore
&lt;/span&gt;-----------------------------------

&lt;span class="n"&gt;build&lt;/span&gt;
&lt;span class="n"&gt;coverage&lt;/span&gt;
&lt;span class="n"&gt;dist&lt;/span&gt;
&lt;span class="n"&gt;package&lt;/span&gt;-&lt;span class="n"&gt;lock&lt;/span&gt;.&lt;span class="n"&gt;json&lt;/span&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;No es necesario adicionar los &lt;code&gt;node_modules&lt;/code&gt; porque los ignora por defecto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cree un archivo &lt;code&gt;.prettierrc.json&lt;/code&gt; en la raíz del proyecto&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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Archivo:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;.prettierrc.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"semi"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;Adicione la siguiente configuración &lt;em&gt;al final&lt;/em&gt; de &lt;code&gt;extends&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="p"&gt;---
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "extends": [
        "plugin:react/recommended",
        "standard-with-typescript",
        "plugin:react/jsx-runtime",
&lt;span class="gi"&gt;+       "prettier", //de ultimo
&lt;/span&gt;    ],
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Si no quieres usar la extensión de &lt;code&gt;Prettier&lt;/code&gt;, adicione los comandos &lt;code&gt;check&lt;/code&gt; (chequear) y &lt;code&gt;write&lt;/code&gt; (escribir) &lt;em&gt;al final&lt;/em&gt; de la lista de &lt;code&gt;scripts&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: package.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "scripts": {
&lt;span class="gi"&gt;+    "format": "prettier . --check",
+    "format:fix": "prettier . --write"
&lt;/span&gt;  }
}
&lt;span class="err"&gt;

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

&lt;/div&gt;




&lt;h2&gt;
  
  
  HTML Linter
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=HTMLHint.vscode-htmlhint" rel="noopener noreferrer"&gt;HTMLHint&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; htmlhint


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

&lt;/div&gt;

&lt;p&gt;Si también desea que se haga revision del HTML con &lt;code&gt;eslint&lt;/code&gt; instale este plugin:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; eslint-plugin-html


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

&lt;/div&gt;

&lt;p&gt;Adicione &lt;code&gt;html&lt;/code&gt; a la lista de plugins&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "plugins": [
        "react",
&lt;span class="gi"&gt;+       "html"
&lt;/span&gt;    ],
}
&lt;span class="err"&gt;

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

&lt;/div&gt;




&lt;h2&gt;
  
  
  CSS Linter
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Extensión &lt;a href="https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint" rel="noopener noreferrer"&gt;Stylelint&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instale y configure en el proyecto:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; stylelint stylelint-config-standard stylelint-config-idiomatic-order


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

&lt;/div&gt;

&lt;p&gt;Cree un archivo de configuración llamado &lt;code&gt;.stylelintrc.json&lt;/code&gt; en la raíz del proyecto.&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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Archivo:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;.stylelintrc.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"extends"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"stylelint-config-standard"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"stylelint-config-idiomatic-order"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"rules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"declaration-colon-newline-after"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"always-multi-line"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ignoreFiles"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"build/**"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"coverage/**"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"dist/**"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"**/*.js"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"**/*.jsx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; 
    &lt;/span&gt;&lt;span class="s2"&gt;"**/*.ts"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"**/*.tsx"&lt;/span&gt;&lt;span class="w"&gt; 
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;p&gt;Si planea usar &lt;code&gt;styled components&lt;/code&gt; también instale&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; stylelint-config-styled-components


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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 File: .stylelintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "extends": [
    "stylelint-config-standard",
    "stylelint-config-idiomatic-order",
&lt;span class="gi"&gt;+   "stylelint-config-styled-components"
&lt;/span&gt;  ],
  "ignoreFiles": [
    "build/**",
    "coverage/**",
    "dist/**",
    "**/*.js",
&lt;span class="gd"&gt;-   "**/*.jsx", 
&lt;/span&gt;    "**/*.ts",
&lt;span class="gd"&gt;-   "**/*.tsx" 
&lt;/span&gt;  ] 
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Para prevenir que tanto VSCode como Stylelint reporten los mismos errores, debemos deshabilitar los que trae VSCode por defecto.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: /.vscode/settings.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{ 
&lt;span class="gi"&gt;+    "stylelint.enable": true,
+    "css.validate": false,
+    "less.validate": false,
+    "scss.validate": false,
+    "[css][scss]": {
+        "editor.defaultFormatter": "stylelint.vscode-stylelint",
+        "editor.codeActionsOnSave": [
+            "source.fixAll.stylelint"
+        ],
+    }
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Stylelint tiene cerca de 170 regalas. Algunas veces te va a mostrar errores que literalmente te van a causar problemas a futuro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Git Linter
&lt;/h2&gt;

&lt;p&gt;Si el proyecto aún no tiene configurado un repositorio de git, primero debe correr el comando:&lt;/p&gt;

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

git init


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

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/okonet/lint-staged" rel="noopener noreferrer"&gt;Lint Staged&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usa &lt;a href="https://github.com/typicode/husky" rel="noopener noreferrer"&gt;Husky&lt;/a&gt; por debajo y solo corre el linter contra los archivos en &lt;code&gt;staged&lt;/code&gt;. Con esto nos aseguramos que no se suban cambios sin ser revisados antes por los linters configurados.&lt;/p&gt;

&lt;p&gt;Instale y configure en el proyecto:&lt;/p&gt;

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

npx mrm@3 lint-staged


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

&lt;/div&gt;




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

&lt;p&gt;Usaremos &lt;a href="https://vitest.dev/" rel="noopener noreferrer"&gt;Vitest&lt;/a&gt; que es compatible con el API de Jest, así que no toca reaprender demasiado sobre la sintaxis.&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; vitest


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

&lt;/div&gt;

&lt;p&gt;Con la configuración &lt;code&gt;global&lt;/code&gt; no vas a necesitar importar las dependencias en cada archivo, adicionando automáticamente soporte a Jest.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vitest.config.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gd"&gt;- import { defineConfig } from 'vite'
&lt;/span&gt;&lt;span class="gi"&gt;+ import { defineConfig } from 'vitest/config'
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;&lt;span class="gi"&gt;+  test: {
+    globals: true,
+  },
&lt;/span&gt;})
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Si estas usando typescript, también adiciona esta configuración.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: tsconfig.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{ 
&lt;span class="gi"&gt;+  "compilerOptions": {
+    "types": ["vitest/globals"],
+  }
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;El siguiente paso no es requerido, pero si quieres sacar ventaja del IntelliSense es recomendado iniciar los archivos así:&lt;/p&gt;

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

&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="err"&gt;📄&lt;/span&gt; &lt;span class="nx"&gt;Archivos&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="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
&lt;span class="o"&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;it&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;describe&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="s2"&gt;vitest&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Actualiza los scripts para poder correr las pruebas desde la terminal:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: package.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "scripts": {
&lt;span class="gi"&gt;+    "test":    "vitest --run --reporter verbose",
+    "test:w":  "vitest",
+    "test:ui": "vitest --ui",
&lt;/span&gt;  }
}
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Instantáneas
&lt;/h3&gt;

&lt;p&gt;Si desea que las instantáneas (snapshots) se generen al mismo nivel que los archivos de prueba en lugar de la carpeta &lt;code&gt;__snapshots__&lt;/code&gt;. Adicione esta propiedad.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vitest.config.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;   test: {
     globals: true,
&lt;span class="gi"&gt;+    resolveSnapshotPath: (testPath, snapExtension) =&amp;gt; testPath + snapExtension,
&lt;/span&gt;   },
})
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Cobertura
&lt;/h3&gt;

&lt;p&gt;Para los reportes de cobertura, necesitaremos instalar &lt;code&gt;@vitest/coverage-v8&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @vitest/coverage-v8


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

&lt;/div&gt;

&lt;p&gt;Actualiza los scripts con estos otros dos comandos:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: package.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "scripts": {
&lt;span class="gi"&gt;+    "test:c":  "vitest run --coverage",
+    "test:cw": "vitest watch --coverage"
&lt;/span&gt;  }
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Y adiciona la siguiente configuración de &lt;code&gt;@vitest/coverage-v8&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vitest.config.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;import { defineConfig } from 'vitest/config'
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;   test: {
     globals: true,
&lt;span class="gi"&gt;+    reporters: ['verbose'],
+    coverage: {
+     all: true,
+      reporter: ['text', 'html', 'lcov'],
+      include: ['**/src/**/*.{js,jsx,ts,tsx}'],
+      exclude: [
+        '**/src/main.{js,jsx,ts,tsx}',
+        '**/*.types.{ts,tsx}',
+        '**/*.test.{js,jsx,ts,tsx}',
+        '**/src/vite-env*',
+      ],
+      statements: 0,
+      branches: 0,
+      functions: 0,
+      lines: 0,
+    },
&lt;/span&gt;  },
})
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  RTL (React Testing Library)
&lt;/h3&gt;

&lt;p&gt;Ejecute este comando para instalar &lt;code&gt;RTL&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @testing-library/react @testing-library/dom @testing-library/user-event @testing-library/jest-dom


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

&lt;/div&gt;

&lt;p&gt;También se necesita instalar &lt;code&gt;jsdom&lt;/code&gt; (o &lt;code&gt;happy-dom&lt;/code&gt;)&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; jsdom


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

&lt;/div&gt;

&lt;p&gt;Y adicionarlo como &lt;code&gt;environment&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vitest.config.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;import { defineConfig } from 'vitest/config'
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;   test: {
     globals: true,
&lt;span class="gi"&gt;+    environment: 'jsdom',
&lt;/span&gt;   },
})
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Con el &lt;code&gt;setupFiles&lt;/code&gt; se pueden extender los &lt;code&gt;matchers&lt;/code&gt; de &lt;code&gt;jest-dom&lt;/code&gt; forma global sin la necesidad importarlas en cada archivo.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .vitest/setup.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ /* Extend Matchers */
+ import '@testing-library/jest-dom'
&lt;/span&gt;&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vitest.config.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;import { defineConfig } from 'vitest/config'
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;  test: {
    globals: true,
&lt;span class="gi"&gt;+   setupFiles: '.vitest/setup.ts',
&lt;/span&gt;  },
})
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Si elegiste user &lt;code&gt;eslint&lt;/code&gt; es buena idea adicionar estos linters de RTL con este comando:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--D&lt;/span&gt; eslint-plugin-testing-library eslint-plugin-jest-dom


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

&lt;/div&gt;

&lt;p&gt;Y adicionar estas condiciones al archivo de configuración de &lt;code&gt;eslint&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .eslintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
    "extends": [
        "plugin:react/recommended",
        "standard-with-typescript",
        "plugin:react/jsx-runtime",
        "prettier",
&lt;span class="gi"&gt;+       "plugin:testing-library/react",
+       "plugin:jest-dom/recommended"
&lt;/span&gt;    ],
    "plugins": [
        "react",
        "html",
&lt;span class="gi"&gt;+       "testing-library",
+       "jest-dom"
&lt;/span&gt;    ],
    "rules": {
&lt;span class="gi"&gt;+       "testing-library/await-async-query": "error",
+       "testing-library/no-await-sync-query": "error",
+       "testing-library/no-debugging-utils": "warn",
+       "testing-library/no-dom-import": "off",
+       "jest-dom/prefer-checked": "error",
+       "jest-dom/prefer-enabled-disabled": "error",
+       "jest-dom/prefer-required": "error",
+       "jest-dom/prefer-to-have-attribute": "error"
&lt;/span&gt;    },
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Adicionar al &lt;code&gt;setupFiles&lt;/code&gt; la configuración para que los matchers globales no colisionen con los de &lt;code&gt;jest-dom&lt;/code&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .vitest/setup.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;/* Extend Matchers */
&lt;span class="p"&gt;import '@testing-library/jest-dom'
&lt;/span&gt;&lt;span class="gi"&gt;+ import '@testing-library/jest-dom/extend-expect'
&lt;/span&gt;&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Mock Service Worker
&lt;/h3&gt;

&lt;p&gt;Si también vas a usar &lt;a href="https://mswjs.io/" rel="noopener noreferrer"&gt;msw&lt;/a&gt; para probar los HTTP requests necesitas correr este comando.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; msw cross-fetch


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

&lt;/div&gt;

&lt;p&gt;Y adicionar esta configuración global.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .vitest/setup.ts
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ /* Mock Service Worker */
+ import { afterAll, afterEach, beforeAll } from 'vitest'
+ import { fetch } from 'cross-fetch'
+ import { server } from './mocks/server'
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ // Add `fetch` polyfill.
+ global.fetch = fetch
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ // Establish API mocking before all tests
+ beforeAll(() =&amp;gt; server.listen({ onUnhandledRequest: `error` }))
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ // Reset any request handlers that we may add during the tests,
+ // so they don't affect other tests
+ afterEach(() =&amp;gt; server.resetHandlers())
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="gi"&gt;+ // Clean up after the tests are finished
+ afterAll(() =&amp;gt; server. Close())
&lt;/span&gt;&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Depuración
&lt;/h3&gt;

&lt;p&gt;Para una depuración visual de las pruebas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extensión &lt;a href="https://marketplace.visualstudio.com/items?itemName=ZixuanChen.vitest-explorer" rel="noopener noreferrer"&gt;Vitest - Test Explorer Adapter&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/ericclemmons/click-to-component" rel="noopener noreferrer"&gt;clic-to-component&lt;/a&gt; ⭐&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esta no es una extensión. Se trata de un paquete de &lt;code&gt;npm&lt;/code&gt; que se debe instalar en el proyecto y que ayuda en el proceso de depuración.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-S&lt;/span&gt; click-to-react-component


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

&lt;/div&gt;

&lt;p&gt;Aun cuando &lt;code&gt;click-to-react-component&lt;/code&gt; es adicionado como &lt;code&gt;dependencies&lt;/code&gt;, al crear el &lt;code&gt;build&lt;/code&gt; de producción el paquete va a ser removido con la ayuda de &lt;a href="https://esbuild.github.io/api/#tree-shaking" rel="noopener noreferrer"&gt;tree-shaking&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclcw1jzihrlwzx3dfq7t.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fclcw1jzihrlwzx3dfq7t.gif" alt="beam me up"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Usando la tecla &lt;code&gt;alt&lt;/code&gt; (u &lt;code&gt;option&lt;/code&gt; en macOS) y con una combinación de identificadores y clicks sobre el componente en el navegador, nos vamos a poder &lt;strong&gt;transportar&lt;/strong&gt; al código del componente en el editor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fericclemmons%2Fclick-to-component%2Fraw%2Fmain%2F.github%2Fvite.gif" 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%2Fgithub.com%2Fericclemmons%2Fclick-to-component%2Fraw%2Fmain%2F.github%2Fvite.gif" alt="clic-to-component"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Funciona con &lt;code&gt;vite&lt;/code&gt; agregando estas configuraciones al proyecto:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: /src/main.jsx
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;import React from "react"
import ReactDOM from "react-dom/client"
&lt;/span&gt;&lt;span class="gi"&gt;+import { ClickToComponent } from "click-to-react-component"
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;import App from "./App"
import "./index.css"
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;ReactDOM.createRoot(document.getElementById("root")!).render(
&lt;/span&gt;  &amp;lt;React.StrictMode&amp;gt;
    &amp;lt;App /&amp;gt;
&lt;span class="gi"&gt;+   &amp;lt;ClickToComponent /&amp;gt;
&lt;/span&gt;  &amp;lt;/React.StrictMode&amp;gt;
)
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠ Desafortunadamente, no es compatible con WSL&lt;/p&gt;
&lt;/blockquote&gt;




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

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://postcss.org/" rel="noopener noreferrer"&gt;PostCSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Actualmente prefiero usar &lt;code&gt;PostCSS&lt;/code&gt; que &lt;code&gt;Sass&lt;/code&gt; porque es muchísimo más rápido y sigue más de cerca el estándar de CSS (presente o futuro) y no necesita renombrar las extensiones de los archivos. Así que, en un futuro, inclusive podrías remover &lt;code&gt;PostCSS&lt;/code&gt; de tu proyecto y continuaría trabajando sin la necesidad de hacer una  migración.&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; postcss-cli postcss


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

&lt;/div&gt;

&lt;p&gt;Para mi estos son los plugins esenciales:&lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; @csstools/postcss-nesting-experimental autoprefixer


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Instale &lt;code&gt;Autoprefixer&lt;/code&gt; solamente si necesita darles soporte a navegadores antiguos. Hay muchos plugins &lt;code&gt;PostCSS&lt;/code&gt;, traten de no instalar demasiados o algunos que hagan cosas demasiado raras que se alejen del estándar actual o propuesto de CSS.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cree un archivo &lt;code&gt;postcss.config.cjs&lt;/code&gt; en la raíz del proyecto:&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="err"&gt;#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;📄&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Archivo:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;postcss.config.cjs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;-----------------------------------&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="err"&gt;module.exports&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"plugins"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"@csstools/postcss-nesting-experimental"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"autoprefixer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;El orden de los plugin es importante porque se requiere que el &lt;code&gt;nesting&lt;/code&gt; corra antes del &lt;code&gt;autoprefixer&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si también estas usando Stylelint. Agrega este paquete: &lt;/p&gt;

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

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--D&lt;/span&gt; postcss-syntax


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

&lt;/div&gt;

&lt;p&gt;Agrégalo como &lt;code&gt;customSyntax&lt;/code&gt; en el archivo &lt;code&gt;.stylelintrc.json&lt;/code&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .stylelintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "extends": [
    "stylelint-config-standard"
  ],
&lt;span class="gi"&gt;+ "customSyntax": "postcss-syntax"
&lt;/span&gt;}
&lt;span class="err"&gt;

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

&lt;/div&gt;
&lt;h3&gt;
  
  
  Sass
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://sass-lang.com/" rel="noopener noreferrer"&gt;Sass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Extension &lt;a href="https://marketplace.visualstudio.com/items?itemName=Syler.sass-indented" rel="noopener noreferrer"&gt;Sass&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Si en vez de PostCSS quieres seguir usando Sass. Vite tiene soporte de &lt;code&gt;SCSS&lt;/code&gt; incorporado, pero necesita que se instale este paquete:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; sass


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Tener cuidado de usar el paquete &lt;code&gt;sass&lt;/code&gt; y no &lt;code&gt;node-sass&lt;/code&gt; porque ya está obsoleto.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si decidiste usar Stylelint. Reemplaza estos paquetes: &lt;/p&gt;

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

npm remove stylelint-config-standard
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--D&lt;/span&gt; stylelint-config-standard-scss


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

&lt;/div&gt;

&lt;p&gt;Reemplázalos como &lt;code&gt;extends&lt;/code&gt; en el archivo &lt;code&gt;.stylelintrc.json&lt;/code&gt; &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: .stylelintrc.json
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;{
  "extends": [
&lt;span class="gd"&gt;-    "stylelint-config-standard",
&lt;/span&gt;&lt;span class="gi"&gt;+    "stylelint-config-standard-scss"
&lt;/span&gt;  ]
}
&lt;span class="err"&gt;

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

&lt;/div&gt;

&lt;p&gt;Luego renombra manualmente todos los archivos con extensión &lt;code&gt;.css&lt;/code&gt; a &lt;code&gt;.scss&lt;/code&gt; y actualiza &lt;code&gt;src/App.js&lt;/code&gt; para que importe &lt;code&gt;src/App.scss&lt;/code&gt;.&lt;/p&gt;




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

&lt;p&gt;Si va a publicar el proyecto en GitHub pages sin usar un dominio personalizado se deben cambiar algunas rutas.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="err"&gt;

&lt;/span&gt;# 📄 Archivo: vite.config.js
&lt;span class="gd"&gt;-----------------------------------
&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;span class="p"&gt;export default defineConfig({
&lt;/span&gt;  plugins: [react()],
&lt;span class="gi"&gt;+ base: "./",
+ build: {
+   outDir: './docs'
+ }
&lt;/span&gt;})
&lt;span class="err"&gt;

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

&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Fuentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://lenguajecss.com/css/calidad-de-codigo/stylelint/" rel="noopener noreferrer"&gt;Stylelint: Linter CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

</description>
      <category>spanish</category>
      <category>react</category>
      <category>vscode</category>
      <category>vite</category>
    </item>
    <item>
      <title>Mover el Sistema de Archivos de WSL a otro disco</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Mon, 29 Nov 2021 16:25:54 +0000</pubDate>
      <link>https://forem.com/equimancho/mover-el-sistema-de-archivos-de-wsl-a-otro-disco-3fbi</link>
      <guid>https://forem.com/equimancho/mover-el-sistema-de-archivos-de-wsl-a-otro-disco-3fbi</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/move-wsl-file-system-to-another-drive-2a3d"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equiman/mover-el-sistema-de-archivos-de-wsl-a-otro-disco-3fbi"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Si tu disco &lt;code&gt;C:&lt;/code&gt; se está quedando sin espacio o prefieres tener tus archivos en un lugar diferente a tu Sistema operativo, es posible mover el Sistema de Archivos de &lt;strong&gt;WSL2&lt;/strong&gt; a otro disco en unos cuantos pasos.&lt;/p&gt;

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

&lt;p&gt;Si estamos usando un usuario diferente a &lt;code&gt;root&lt;/code&gt;, necesitamos saber cuál es corriendo el siguiente comando (al lado de WSL):&lt;/p&gt;

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

&lt;span class="c"&gt;# Linux Terminal&lt;/span&gt;
&lt;span class="nb"&gt;whoami&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6kvdb7puzscbb96q0k5.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6kvdb7puzscbb96q0k5.png" alt="who am I"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;También necesitamos conocer el nombre de la &lt;strong&gt;distribución&lt;/strong&gt; y la &lt;strong&gt;versión&lt;/strong&gt; de WSL, ejecutando el siguiente comando en PowerShell (al lado de Windows):&lt;/p&gt;

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

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
wsl &lt;span class="nt"&gt;--list&lt;/span&gt; &lt;span class="nt"&gt;--verbose&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2xke436r85ci0t2aqgs.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2xke436r85ci0t2aqgs.png" alt="wsl list"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conociendo el &lt;strong&gt;usuario:&lt;/strong&gt; &lt;code&gt;equiman&lt;/code&gt;, la &lt;strong&gt;distribución:&lt;/strong&gt; &lt;code&gt;Ubuntu&lt;/code&gt; y confirmando que estamos usando la &lt;strong&gt;versión&lt;/strong&gt; &lt;code&gt;WSL 2&lt;/code&gt;, estaríamos listos para la...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9luo23t87clkxk1wzhpx.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9luo23t87clkxk1wzhpx.gif" alt="moving day"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Todos los pasos que se describen a continuación se deben ejecutar en PowerShell (al lado de Windows).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Primero necesitamos cerrar todas la terminales que estén usando WSL y luego apagarlo para evitar cualquier corrupción de datos usando el comando.&lt;/p&gt;

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

&lt;span class="c"&gt;# PowerShell&lt;/span&gt;
wsl &lt;span class="nt"&gt;--shutdown&lt;/span&gt;


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

&lt;/div&gt;

&lt;p&gt;Luego procedemos a crear una copia de seguridad (backup) de la &lt;strong&gt;distribución&lt;/strong&gt; &lt;code&gt;Ubuntu&lt;/code&gt;.&lt;/p&gt;

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

&lt;span class="c"&gt;# PowerShell &lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;D:&lt;span class="se"&gt;\b&lt;/span&gt;ackup
wsl &lt;span class="nt"&gt;--export&lt;/span&gt; Ubuntu D:&lt;span class="se"&gt;\b&lt;/span&gt;ackup&lt;span class="se"&gt;\u&lt;/span&gt;buntu.tar


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

&lt;/div&gt;

&lt;p&gt;No te preocupes si no ves algún indicador de progreso. Esto va a tomar un buen tiempo dependiendo de la cantidad de datos que tengas. Tal vez sea buena idea que vayas a tomar un descanso mientras tanto.&lt;/p&gt;

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

&lt;p&gt;Cuando termine, nececitamos &lt;strong&gt;asegurarnos&lt;/strong&gt; de que el archivo &lt;code&gt;D:\backup\ubuntu.tar&lt;/code&gt; fue creado. Luego podemos dar de baja la distribución linux del disco &lt;code&gt;C:&lt;/code&gt;. Esto va a liberar el espacio tomado por WSL.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ Tenga presente que todo lo que tenga almacenado en el disco virtual de WSL será eliminado, el siguiente comando no solicita ninguna confirmación, así que asegúrese de hacer una copia de respaldo con todo lo que necesite antes!&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;span class="c"&gt;# Power Shell&lt;/span&gt;
wsl &lt;span class="nt"&gt;--unregister&lt;/span&gt; Ubuntu


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

&lt;/div&gt;

&lt;p&gt;Ahora, vamos a importarla en un nuevo disco. Yo voy a usar el disco &lt;code&gt;D:&lt;/code&gt; como ejemplo. &lt;/p&gt;

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

&lt;span class="c"&gt;# Power Shell&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;D:&lt;span class="se"&gt;\W&lt;/span&gt;SL
wsl &lt;span class="nt"&gt;--import&lt;/span&gt; Ubuntu D:&lt;span class="se"&gt;\W&lt;/span&gt;SL&lt;span class="se"&gt;\ &lt;/span&gt;D:&lt;span class="se"&gt;\b&lt;/span&gt;ackup&lt;span class="se"&gt;\u&lt;/span&gt;buntu.tar


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

&lt;/div&gt;

&lt;p&gt;Por defecto Ubuntu va a usar por defecto el usuario &lt;code&gt;root&lt;/code&gt;, para cambiarlo a nuestro usuario necesitamos correr este comando.&lt;/p&gt;

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

&lt;span class="c"&gt;# Power Shell&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$env&lt;/span&gt;:USERPROFILE&lt;span class="se"&gt;\A&lt;/span&gt;ppData&lt;span class="se"&gt;\L&lt;/span&gt;ocal&lt;span class="se"&gt;\M&lt;/span&gt;icrosoft&lt;span class="se"&gt;\W&lt;/span&gt;indowsApps
ubuntu config &lt;span class="nt"&gt;--default-user&lt;/span&gt; equiman


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

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Asegúrese de reemplazar &lt;code&gt;equiman&lt;/code&gt; con el suyo.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Reinicie WSL ejecutando el siguiente comando &lt;code&gt;wsl&lt;/code&gt;.&lt;/p&gt;


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

&lt;p&gt;&lt;span class="c"&gt;# PowerShell&lt;/span&gt;&lt;br&gt;
wsl &lt;span class="nt"&gt;--distribution&lt;/span&gt; Ubuntu&lt;/p&gt;

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

&lt;/div&gt;
&lt;h1&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Recuperación&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;Si algo sale mal en el proceso, no te preocupes, podemos restaurar nuestro disco WSL desde la copia de seguridad (bakcup).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿No te saltaste este paso? ¿cierto?&lt;/p&gt;
&lt;/blockquote&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft27z7tqemo0j75hh8ayw.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft27z7tqemo0j75hh8ayw.gif" alt="right"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Solo repite los pasos después de la copia de seguridad.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>wsl</category>
      <category>terminal</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>VSCode - Crear Archivos y Directorios sin usar el ratón</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Sun, 31 Oct 2021 02:51:40 +0000</pubDate>
      <link>https://forem.com/equimancho/vscode-crear-archivos-y-directorios-sin-usar-el-raton-1c19</link>
      <guid>https://forem.com/equimancho/vscode-crear-archivos-y-directorios-sin-usar-el-raton-1c19</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/vscode-create-files-and-folders-on-the-go-2hd6"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/vscode-crear-archivos-y-directorios-sin-usar-el-raton-1c19"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;¡Mira má, sin &lt;del&gt;manos&lt;/del&gt; ratón!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Si estás intentando reducir la interacción con el ratón durante el desarrollo para aumentar la productividad, estás en el lugar correcto.&lt;/p&gt;

&lt;p&gt;Hace un tiempo cuando trabajaba haciendo reportes y macros en Excel me convertí en una especie de maniático por los atajos de teclado porque prácticamente las fechas límite que me daba mi jefe era: "Necesito ese reporte para ayer".&lt;/p&gt;

&lt;p&gt;Cuando alguien me pedía ayuda para aprender Excel orientado a negocios, la primera lección que les daba era desconectar el mouse. Obviamente al principio les daba muy duro, pero era necesario si en realidad querían aprender a moverse rápido.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;⚠️ Yo uso VSCode en inglés y la distribución de teclado en-US, algo que les recomiendo hacer. Los atajos de este artículo están diseñados para ese idioma, pero fácilmente los puedes acomodar al lenguaje que uses.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equimancho" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4341%2Fc86a35c2-7954-4ca3-a2d9-9bc0aeac358f.png" alt="equimancho"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Migrando a teclado en Inglés para desarrollo&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez for equimancho ・ Jun 25 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#productividad&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#teclado&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#tutorial&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;





&lt;p&gt;En VSCode la opción por defecto para crear archivos y directorios requiere un montón de interacción con el ratón, y yo sinceramente lo odio. Así que te voy a compartir una forma que encontré de hacerlo a toda velocidad, obviamente, sin usar el ratón.&lt;/p&gt;

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

&lt;p&gt;Primero que todo necesitamos aprender este útil atajo. Se usa para intercambiar el foco entre la ventana de código y el explorador de archivos. &lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;OS&lt;/th&gt;
&lt;th&gt;Atajo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mac&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Command + Shift + E&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;win/linux&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ctrl + Shift + E&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Adicionando esta configuración puedes hacer que automáticamente el explorador de archivos seleccione en el árbol el archivo en el que estás trabajando.&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="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"explorer.autoReveal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;
settings.json


&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7xhy52t7f80l8dp29mp0.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7xhy52t7f80l8dp29mp0.gif" alt="auto-reveal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A mi me gusta esta opción porque así no tengo la necesidad de estar usando tanto las teclas de navegación dentro del explorador de archivos. Algunas veces es bueno, otras no tanto, así que lo mejor es que lo pruebes para saber si te gusta o no.&lt;/p&gt;
&lt;h2&gt;
  
  
  Crear
&lt;/h2&gt;

&lt;p&gt;El próximo paso es adicionar mis atajos de teclado secretos a la configuración.&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="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explorer.newFile"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explorerViewletFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explorer.newFolder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"explorerViewletFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fycd0einx7mkgnu7n7lq3.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fycd0einx7mkgnu7n7lq3.gif" alt="keyboard-config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En Windows y Linux, adicionalmente necesitas esta configuración para desactivar la creación de una &lt;code&gt;nueva ventana&lt;/code&gt; option when it's focused on file explorer.&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="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ctrl+shift+n"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"workbench.action.newWindow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"when"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"!explorerViewletFocus"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;


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

&lt;/div&gt;
&lt;h2&gt;
  
  
  Usar
&lt;/h2&gt;

&lt;p&gt;Eso fue todo. Ahora desconecta tu ratón y disfruta!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffu4sf4xv4zjb023ulud5.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffu4sf4xv4zjb023ulud5.gif" alt="demo"&gt;&lt;/a&gt;&lt;/p&gt;


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

&lt;p&gt;También amo la terminal. Si aún no usas &lt;code&gt;ZSH&lt;/code&gt;, te recomiendo que le des una oportunidad y creeme nunca más vas a querer regresar.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equiman" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt="equiman"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equiman/iterm2--oh-my-zsh--powerlevel9k-best-terminal-combination-for-geeks-58l5" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;iTerm2 + Oh My Zsh! + Powerlevel10K best terminal combination for Geeks!&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez ・ Sep 25 '18&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#productivity&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terminal&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#macos&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#zsh&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Este artículo está en inglés (espero traducirlo pronto) y dirigido a usuario de macOS, pero &lt;code&gt;ZSH&lt;/code&gt; también se puede usar en Linux y ahora en Windows a través de WSL.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;En ZSH tenemos dos comando mágicos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;take&lt;/code&gt; crea un directorio y se cambia de ruta automáticamente. En vez de correr los comandos &lt;code&gt;mkdir&lt;/code&gt; y luego &lt;code&gt;cd&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;touch&lt;/code&gt; crea un archivo o múltiples archivos al tiempo.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El truco para crear un componente en una sola línea es:&lt;/p&gt;

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

take Name &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;touch &lt;/span&gt;name&lt;span class="o"&gt;{&lt;/span&gt;.css,.js,.test.js&lt;span class="o"&gt;}&lt;/span&gt; 


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

&lt;/div&gt;

&lt;p&gt;Explicación: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;take Name&lt;/code&gt; este comando crea un directorio llamando &lt;code&gt;Name&lt;/code&gt; y cambia la ruta automáticamente. &lt;/li&gt;
&lt;li&gt;Luego dentro de ese directorio el comando &lt;code&gt;touch name{.css,.js,.test.js}&lt;/code&gt; usa el mismo prefijo &lt;code&gt;name&lt;/code&gt; y crea 3 archivos &lt;code&gt;name.css&lt;/code&gt;, &lt;code&gt;name.js&lt;/code&gt; y &lt;code&gt;name.test.js&lt;/code&gt; con los valores indicados entre las llaves.&lt;/li&gt;
&lt;/ul&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg24j8nkx0g9tzv2zqfni.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fg24j8nkx0g9tzv2zqfni.gif" alt="command-line"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>vscode</category>
      <category>productivity</category>
      <category>webdev</category>
    </item>
    <item>
      <title>CodeSignal: el reto de calcular el área de una figura</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Wed, 11 Aug 2021 13:55:11 +0000</pubDate>
      <link>https://forem.com/equimancho/codesignal-el-reto-de-calcular-el-area-de-una-figura-3o5k</link>
      <guid>https://forem.com/equimancho/codesignal-el-reto-de-calcular-el-area-de-una-figura-3o5k</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/the-challenge-to-make-a-shape-area-calculation-in-codefights-3fjn"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/codesignal-el-reto-de-calcular-el-area-de-una-figura-3o5k"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Desde la universidad, no me había metido en retos se programación hasta que recibí una invitación a &lt;a href="https://app.codesignal.com/signup/8qEwaRfZDeActXZsW/main" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; una pagina donde puedes "competir" contra tus amigos resolviendo algoritmos.&lt;/p&gt;

&lt;p&gt;Lo que más me ha gustado de esta plataforma con respecto a las otras de retos como &lt;a href="https://codewars.com/" rel="noopener noreferrer"&gt;CodeWars&lt;/a&gt; es que esta muy bien segmentadas y los retos van subiendo progresivamente de nivel.&lt;/p&gt;




&lt;h1&gt;
  
  
  El problema
&lt;/h1&gt;

&lt;p&gt;Cuando alcancé el segundo nivel del modo arcade, me encontré con un ejercicio sobre el cálculo del área de una figura geométrica y como es debido antes de sentarme a tirar código, había que pensar antes una solución. Trate de hacer memoria de lo que vi en la universidad y me di cuenta de que habían al menos 3 formas de resolverlo: ciclos, recursión y matemáticamente.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Abajo vamos a definir un polígono de tamaño &lt;code&gt;n&lt;/code&gt;. Tu misión es encontrar el área del polígono dada una &lt;code&gt;n&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Un polígono de tamaño &lt;code&gt;1&lt;/code&gt; es solo un cuadro con una longitud lateral de &lt;code&gt;1&lt;/code&gt;. Un polígono de tamaño &lt;code&gt;n&lt;/code&gt; se obtiene tomando el tamaño &lt;code&gt;n - 1&lt;/code&gt; y adicionando &lt;code&gt;1&lt;/code&gt; hasta el borde en cada uno de los lados. En la siguiente imágen vas a encontrar polígonos de tamaño &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, &lt;code&gt;3&lt;/code&gt; y &lt;code&gt;4&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eksbikqlqtc4k0ahzrr.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7eksbikqlqtc4k0ahzrr.png" alt="Shape Area"&gt;&lt;/a&gt;Image taken from &lt;a href="https://codesignal.com" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; &lt;/p&gt;

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

&lt;p&gt;Para &lt;code&gt;n = 2&lt;/code&gt;, la respuesta debería ser: &lt;code&gt;shapeArea(n) = 5&lt;/code&gt;.&lt;br&gt;
Para &lt;code&gt;n = 3&lt;/code&gt;, la respuesta debería ser: &lt;code&gt;shapeArea(n) = 13&lt;/code&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Solución
&lt;/h1&gt;

&lt;p&gt;Como reto personal decidí resolverlo por las 3 formas que se me ocurrieron y adicionalmente ver entre ellos cual era el mas eficiente.&lt;/p&gt;

&lt;p&gt;Pude resolver en el mismo día hacerlo con ciclos y usando recursividad, pero la solución matemática me tomó más de un día y hasta tuve que ir a mirar los apuntes de la materia de Métodos Numéricos, que ya había visto varios años atrás.&lt;/p&gt;

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

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

&lt;span class="nx"&gt;loopShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;let&lt;/span&gt; &lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &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;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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;area&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&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="nx"&gt;area&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;h2&gt;
  
  
  Recursividad
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;recursionShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nf"&gt;recursionShapeArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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;h2&gt;
  
  
  Matemática
&lt;/h2&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="nx"&gt;mathShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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;Ésta es la más corta pero también la más críptica y para no dejar la intriga, trataré de explicar el proceso de cómo encontré la formula.&lt;/p&gt;

&lt;p&gt;Use una técnica de métodos numéricos que consiste en solucionar paso a paso cada iteración y luego tratar de encontrar algo común o familiar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8sdvqdsd22v4mc1o2adc.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F8sdvqdsd22v4mc1o2adc.png" alt="Explained"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un cuadrado tiene 4 lados, por eso es que necesitamos multiplicar el valor por &lt;code&gt;n * 4&lt;/code&gt;. A partir de la tercera interaction se hace visible que cada lado tiene un punto de intersección donde se unen (color rojo) por eso no podemos contar esos puntos y es el motivo por el cual debemos restar 4 al resultado total, 1 por cada esquinas. &lt;/p&gt;

&lt;p&gt;Así fue como encontré la formula: &lt;code&gt;n * 4 - 4&lt;/code&gt; que para mi sorpresa se parecía a la de solución recursiva. Le aplique un poco de álgebra de secundaria y terminó en un bonito &lt;code&gt;n^2 + (n - 1)^2&lt;/code&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  Midiendo el rendimiento
&lt;/h1&gt;

&lt;p&gt;Todo muy bonito, ya tenemos 3 soluciones al mismo problema, pero entonces ¿cuál de ellos usar?.&lt;/p&gt;

&lt;p&gt;Al mejor estilo de los Juegos Olímpicos, vamos a poner en una carrera los 3 métodos y descubrir cuál se lleva la medalla de oro.&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loopShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;let&lt;/span&gt; &lt;span class="nx"&gt;area&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;for &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;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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;area&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&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="nx"&gt;area&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;recursionShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="mi"&gt;1&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="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recursionShapeArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mathShapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;return&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shapeArea&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&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;let&lt;/span&gt; &lt;span class="nx"&gt;solution&lt;/span&gt; &lt;span class="o"&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="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&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;obj&lt;/span&gt; &lt;span class="o"&gt;=&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;loopShapeArea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;recursionShapeArea&lt;/span&gt;&lt;span class="dl"&gt;"&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mathShapeArea&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
    &lt;span class="k"&gt;for &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;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&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;fx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
      &lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&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="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&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;hrstart&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="nf"&gt;hrtime&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;for &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;i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&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="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&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;hrend&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="nf"&gt;hrtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;hrstart&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;execution&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{};&lt;/span&gt;
      &lt;span class="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hrend&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="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;fx&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;hrend&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000000&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="nx"&gt;solution&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Not a valid number&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




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

&lt;p&gt;En &lt;a href="https://app.codesignal.com/signup/8qEwaRfZDeActXZsW/main" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; van a encontrar que varios de los ejercicios no solo te piden resolverlos, sino que adicionalmente también lo hagas en un límite de tiempo, para este caso nos dan 4000ms, asi que despues de todo es buena idea medir su ejecución.&lt;/p&gt;

&lt;p&gt;¿Cuál crees que va ganar la medalla de oro? para descubrirlo solo debes ejecutar esta solución.&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;let&lt;/span&gt; &lt;span class="nx"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//Cambia este valor&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;shapeArea&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;n&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &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;item&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&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="nf"&gt;log&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="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; -&amp;gt; Execution time (hr): &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;s &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;execution&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;ms.`&lt;/span&gt;
  &lt;span class="p"&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="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


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

&lt;/div&gt;




&lt;h1&gt;
  
  
  Conclusión
&lt;/h1&gt;

&lt;p&gt;Me di cuenta que si uno no repasa las habilidades aprendidas fácilmente se van olvidando y por eso me costó más resolver la opción matemática. Por eso es que trato de resolver al menos un reto cada semana para así mantenerme en forma.&lt;/p&gt;

&lt;p&gt;Lo mejor de &lt;a href="https://app.codesignal.com/signup/8qEwaRfZDeActXZsW/main" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; es que una vez resuelves el problema tienes acceso a la lista de todas las respuestas ordenadas por las más votadas. Te vas a dar cuenta que a veces elaboramos soluciones demasiado complicadas y ellxs lo hacen de una forma tan estúpidamente sencilla.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿maldita sea porque no pensé en eso antes?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Vas a decir eso una y otra vez, pero no tiene nada de malo, al contrario va expandir tu capacidad para resolver problemas y aprender de cómo los resuelven los otros.&lt;/p&gt;

&lt;p&gt;Pero además &lt;a href="https://app.codesignal.com/signup/8qEwaRfZDeActXZsW/main" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; no está limitado a un solo lenguaje de programación, nos reta a lxs de habla hispana a enfrentarnos al inglés, nos hace una acercamiento al tema de pruebas unitarias y también a tener en cuenta que el rendimiento es una métrica importante. Hasta tiene retos creados por las empresas top de desarrollo como preparación para las entrevistas de trabajo.&lt;/p&gt;

&lt;p&gt;A mi este ejercicio en especial, me regresó a la época de los retos con mis compañerxs de la universidad y me picó de nuevo el gusto por resolver retos de programación que no fueran los del trabajo.&lt;/p&gt;

&lt;p&gt;¿Qué esperas? unete a &lt;a href="https://app.codesignal.com/signup/8qEwaRfZDeActXZsW/main" rel="noopener noreferrer"&gt;CodeSignal&lt;/a&gt; y disfruta haciendo lo que nos encanta... tirar código!&lt;/p&gt;

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

&lt;p&gt;La primera vez que ejecute estas pruebas, inyecte sin querer un error al incluir unos &lt;code&gt;console.log&lt;/code&gt; entre &lt;code&gt;hrstart&lt;/code&gt; y &lt;code&gt;hrstart&lt;/code&gt; lo que causaba que la impresión en consola fuera contabilizada. El resultado era tan dudoso que daba como ganador el método de recursión sobre el matemático. &lt;/p&gt;

&lt;p&gt;Una vez elimine los &lt;code&gt;console.log&lt;/code&gt; pude ver el verdadero resultado. Asi que, &lt;strong&gt;eviten adiciona cualquier operación que interactúe con la pantalla&lt;/strong&gt; cuando vayan a realizar mediciones de rendimiento.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>javascript</category>
      <category>node</category>
      <category>challenge</category>
    </item>
    <item>
      <title>Como probar media queries con Chrome (o Edge)</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Mon, 02 Aug 2021 21:42:48 +0000</pubDate>
      <link>https://forem.com/equimancho/como-probar-media-queries-con-chrome-4kb5</link>
      <guid>https://forem.com/equimancho/como-probar-media-queries-con-chrome-4kb5</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/how-to-test-media-queries-with-chrome-5d8c"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/como-probar-media-queries-con-chrome-4kb5"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Lo quieras o no, el desarrollo web moderno está directamente relacionado al diseño responsivo (responsive design). &lt;/p&gt;

&lt;p&gt;Tenemos media queries en todos lados inclusive &lt;a href="https://getbootstrap.com/" rel="noopener noreferrer"&gt;Bootstrap&lt;/a&gt; y &lt;a href="http://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind&lt;/a&gt; tienen un sistema de rejillas para poder adaptar con mayor facilidad el contenido según la pantalla o dispositivo.&lt;/p&gt;

&lt;h1&gt;
  
  
  Visor de Media Query
&lt;/h1&gt;

&lt;p&gt;Algunas veces pensamos que los Media Query son difíciles de probar, pero las Herramientas de Desarrollo (DevTools) de Chrome/Edge tiene escondida una gema para lidiar y probar fácilmente esos puntos de inflexión (breakpoints).&lt;/p&gt;

&lt;p&gt;Para activar ese superpoder debemos realizar los siguientes pasos.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abrir las Herramientas de Desarrollo (DevTools) de Chrome/Edge&lt;/li&gt;
&lt;li&gt;Activar la vista Mobile&lt;/li&gt;
&lt;li&gt;Asegurarse de seleccionar "Responsive" en la lista de dispositivos.&lt;/li&gt;
&lt;li&gt;Mostrar media queries (show media queries)&lt;/li&gt;
&lt;/ol&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj3fen7pj43z35xiop63.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgj3fen7pj43z35xiop63.gif" alt="media-queries"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Barras de Consulta (Query Bars)
&lt;/h1&gt;

&lt;p&gt;Dependiendo de la cantidad de media queries definidos en los estilos de la página vas a poder ver 4 barras de diferentes colores.&lt;/p&gt;

&lt;p&gt;Tamaño preestablecido (Gris):&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffftkagwy6tbxb1n6ao0h.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffftkagwy6tbxb1n6ao0h.gif" alt="preset"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ancho máximo (Azul):&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7ovbpktpxtxa39ygpgwu.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F7ovbpktpxtxa39ygpgwu.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ancho máximo y mínimo (Verde):&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsly1zfodefwo5h5auzft.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsly1zfodefwo5h5auzft.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ancho mínimo (Naranja)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyhk81mlqklzcvrrsajkd.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fyhk81mlqklzcvrrsajkd.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;La página de Bootstrap nos da una excelente oportunidad para ver esta utilidad en acción porque tiene definidos múltiples tipos de de media queries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc2b2gqfc1xos5sn34tat.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fc2b2gqfc1xos5sn34tat.gif" alt="example"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Código Fuente
&lt;/h1&gt;

&lt;p&gt;Además también puedes sobre el media query seleccionado hacer click con el botón secundario y ver el código fuente.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6u2ck7sbxv0b7kxh4xao.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F6u2ck7sbxv0b7kxh4xao.png" alt="source"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Si también quieres ver todos los media query en acción al mismo tiempo te recomiendo darle una mirada a &lt;a href="https://responsively.app/" rel="noopener noreferrer"&gt;Responsively&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4nbmm85xniooghsv59bu.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F4nbmm85xniooghsv59bu.png" alt="responsively"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Es un increíble proyecto código abierto (open source) que nos puede hacer el trabajo más fácil en el desarrollo.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>chrome</category>
      <category>webdev</category>
      <category>css</category>
    </item>
    <item>
      <title>Truco con console.log para hacer Debug</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Mon, 28 Jun 2021 22:09:00 +0000</pubDate>
      <link>https://forem.com/equimancho/truco-con-console-log-para-hacer-debug-9j2</link>
      <guid>https://forem.com/equimancho/truco-con-console-log-para-hacer-debug-9j2</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/console-log-hack-for-debugging-3cfi"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/truco-con-console-log-para-hacer-debug-9j2"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Algunas veces necesitamos mostrar en la consola múltiples valores de las variables con &lt;code&gt;console.log&lt;/code&gt; y para poderlos identificar adicionamos algún texto inicial el cual indica la salida a la que corresponde cada variable.&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;name: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&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;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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;age: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;age&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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;language: &lt;/span&gt;&lt;span class="dl"&gt;"&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="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="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;isDev: &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;isDev&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsymvddqmsl0h040vi5v4.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fsymvddqmsl0h040vi5v4.png" alt="console.log"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Una forma de hacer lo mismo sin tener que escribir esos textos de identificación es meter todas esas variables dentro de un &lt;code&gt;{}&lt;/code&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;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="p"&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;age&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="nx"&gt;isDev&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;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjlagkde8ofy00ui3wyvg.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjlagkde8ofy00ui3wyvg.png" alt="console.log"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero espera un momento, si cambiamos una sola palabra puede ser aún mejor.&lt;/p&gt;

&lt;h1&gt;
  
  
  Super truco
&lt;/h1&gt;

&lt;p&gt;Cambia &lt;code&gt;.log&lt;/code&gt; por &lt;code&gt;.table&lt;/code&gt; y ya está. Vamos a poder ver el resultado tanto de nombres como de valores de forma más legible.&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;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;table&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="p"&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;age&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="nx"&gt;isDev&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;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F70rlfbb8wa2pctn1jzjb.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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F70rlfbb8wa2pctn1jzjb.png" alt="console.table"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  VS Code
&lt;/h1&gt;

&lt;p&gt;Existe una extension llamada &lt;a href="https://marketplace.visualstudio.com/items?itemName=deinsoftware.debug-snippets" rel="noopener noreferrer"&gt;Debug Snippets&lt;/a&gt; que se dedica al tema de depuración e incluye varias opciones para usar &lt;code&gt;console.log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=deinsoftware.debug-snippets" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2F8vd2etexv2eswzd1lcit.png" alt="Debug Snippets"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dos de los snippets están relacionados con los trucos mencionados anteriormente.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Trigger&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Result JS/TS&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;cld→&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;log with destructuring&lt;/td&gt;
&lt;td&gt;&lt;code&gt;console.log({$name})█&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ctd→&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;table with destructuring&lt;/td&gt;
&lt;td&gt;&lt;code&gt;console.table({$name})█&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Indicadores de Estado con AutoHotKey</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 25 Jun 2021 23:31:09 +0000</pubDate>
      <link>https://forem.com/equimancho/indicadores-de-estado-con-autohotkey-49jl</link>
      <guid>https://forem.com/equimancho/indicadores-de-estado-con-autohotkey-49jl</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/light-indicator-status-4jge"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/indicadores-de-estado-con-autohotkey-49jl"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Si tu teclado o computadora no cuenta con indicadores luminosos AutoHotKey puede venir al rescate y con un simple script podremos conocer el estado de esas teclas modificadoras.&lt;/p&gt;

&lt;p&gt;Crea un archivo llamado &lt;code&gt;key-indicator.ahk&lt;/code&gt; con este script:&lt;/p&gt;

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

&lt;span class="o"&gt;~*&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;
&lt;span class="o"&gt;~*&lt;/span&gt;&lt;span class="n"&gt;NumLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;
&lt;span class="o"&gt;~*&lt;/span&gt;&lt;span class="n"&gt;ScrollLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;
&lt;span class="o"&gt;~*&lt;/span&gt;&lt;span class="n"&gt;Insert&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;
&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;drastically&lt;/span&gt; &lt;span class="n"&gt;improves&lt;/span&gt; &lt;span class="n"&gt;reliability&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;slower&lt;/span&gt; &lt;span class="n"&gt;systems&lt;/span&gt;

&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="s"&gt;""&lt;/span&gt;
&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="s"&gt;"Caps: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetKeyState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"CapsLock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"T"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"ON"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"OFF"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s"&gt;"`n"&lt;/span&gt;
&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="s"&gt;"Num: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetKeyState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"NumLock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"T"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"ON"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"OFF"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s"&gt;"`n"&lt;/span&gt;
&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="s"&gt;"Scroll: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetKeyState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"ScrollLock"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"T"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"ON"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"OFF"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="s"&gt;"`n"&lt;/span&gt;
&lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;:=&lt;/span&gt; &lt;span class="n"&gt;msg&lt;/span&gt; &lt;span class="s"&gt;"Insert: "&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;GetKeyState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Insert"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"T"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="s"&gt;"ON"&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"OFF"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;ToolTip&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;msg&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;
&lt;span class="n"&gt;Sleep&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;750&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;SPECIFY&lt;/span&gt; &lt;span class="n"&gt;DISPLAY&lt;/span&gt; &lt;span class="n"&gt;TIME&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ms&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;ToolTip&lt;/span&gt;     &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;remove&lt;/span&gt;
&lt;span class="k"&gt;return&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="n"&gt;Guarda&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="n"&gt;archivo&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;abrelo&lt;/span&gt; &lt;span class="n"&gt;con&lt;/span&gt; &lt;span class="n"&gt;AutoHotkey&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="n"&gt;Cada&lt;/span&gt; &lt;span class="n"&gt;vez&lt;/span&gt; &lt;span class="n"&gt;que&lt;/span&gt; &lt;span class="n"&gt;cambies&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="n"&gt;estado&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="n"&gt;alguna&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="n"&gt;estas&lt;/span&gt; &lt;span class="n"&gt;teclas&lt;/span&gt; &lt;span class="n"&gt;vas&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;visualizar&lt;/span&gt; &lt;span class="n"&gt;cerca&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;puntero&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;mouse&lt;/span&gt; &lt;span class="n"&gt;un&lt;/span&gt; &lt;span class="n"&gt;indicador&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="n"&gt;Alt&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//dev-to-uploads.s3.amazonaws.com/uploads/articles/ls81ne640b7hoeoij276.png)&lt;/span&gt;

&lt;span class="o"&gt;---&lt;/span&gt;

&lt;span class="n"&gt;Si&lt;/span&gt; &lt;span class="n"&gt;est&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;usando&lt;/span&gt; &lt;span class="n"&gt;la&lt;/span&gt; &lt;span class="n"&gt;variante&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Bloq&lt;/span&gt; &lt;span class="n"&gt;May&lt;/span&gt;&lt;span class="err"&gt;ú&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;reempl&lt;/span&gt;&lt;span class="err"&gt;á&lt;/span&gt;&lt;span class="n"&gt;zandola&lt;/span&gt; &lt;span class="n"&gt;con&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;Backspace&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;retorno&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;des&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;activas&lt;/span&gt; &lt;span class="n"&gt;el&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;con&lt;/span&gt; &lt;span class="n"&gt;la&lt;/span&gt; &lt;span class="n"&gt;tecla&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="err"&gt;```&lt;/span&gt;&lt;span class="n"&gt;cpp&lt;/span&gt;
&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Backspace&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Enable&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Disable&lt;/span&gt; &lt;span class="n"&gt;Caps&lt;/span&gt; &lt;span class="n"&gt;Lock&lt;/span&gt;
&lt;span class="err"&gt;```&lt;/span&gt;

&lt;span class="n"&gt;Debes&lt;/span&gt; &lt;span class="n"&gt;cambiar&lt;/span&gt; &lt;span class="n"&gt;la&lt;/span&gt; &lt;span class="n"&gt;primera&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="err"&gt;í&lt;/span&gt;&lt;span class="n"&gt;nea&lt;/span&gt; &lt;span class="n"&gt;del&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="n"&gt;de&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;~*&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;~*!&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;---&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Fuentes&lt;/span&gt;&lt;span class="o"&gt;:**&lt;/span&gt;

&lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;AHK&lt;/span&gt; &lt;span class="n"&gt;Board&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;Another&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;screen&lt;/span&gt; &lt;span class="n"&gt;caps&lt;/span&gt; &lt;span class="n"&gt;lock&lt;/span&gt; &lt;span class="n"&gt;indicator&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//autohotkey.com/board/topic/100990-another-on-screen-caps-lock-indicator/)&lt;/span&gt;

&lt;span class="o"&gt;---&lt;/span&gt;

&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;That&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;All&lt;/span&gt; &lt;span class="n"&gt;Folks&lt;/span&gt;&lt;span class="o"&gt;!**&lt;/span&gt;
&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="n"&gt;Happy&lt;/span&gt; &lt;span class="n"&gt;Coding&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="err"&gt;🖖&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="n"&gt;cerveza&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//dev-to-uploads.s3.amazonaws.com/uploads/articles/h4zle20oa7anpfjvap8n.png)](https://github.com/sponsors/deinsoftware)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>spanish</category>
      <category>productividad</category>
      <category>teclado</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Operadores de Javascript con AutoHotKey</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 25 Jun 2021 22:52:04 +0000</pubDate>
      <link>https://forem.com/equimancho/operadores-de-javascript-con-autohotkey-3o74</link>
      <guid>https://forem.com/equimancho/operadores-de-javascript-con-autohotkey-3o74</guid>
      <description>&lt;p&gt;Idiomas: [🇺🇸] &lt;a href="https://dev.to/equiman/javascript-operators-with-autohotkey-37kn"&gt;English&lt;/a&gt; - [🇪🇸] &lt;a href="https://dev.to/equimancho/operadores-de-javascript-con-autohotkey-3o74"&gt;Español&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Si trabajas en desarrollo de software y la mayor parte del tiempo la pasas escribiendo código en JavaScript (o TypeScript) este artículo te puede ser de utilidad.&lt;/p&gt;

&lt;p&gt;Con AutoHotKey puedes re-mapear el comportamiento de algunas teclas para escribir de forma fácil y rápida todos esos operadores que usamos en el día a día.&lt;/p&gt;




&lt;p&gt;Debes tener instalado &lt;a href="https://www.autohotkey.com/"&gt;AutoHotKey&lt;/a&gt; y crear un archivo llamado &lt;code&gt;js-remapkeys.ahk&lt;/code&gt; con este script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;&lt;span class="cp"&gt;#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;Warn&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Enable&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;assist&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;detecting&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;SendMode&lt;/span&gt; &lt;span class="n"&gt;Input&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Recommended&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;scripts&lt;/span&gt; &lt;span class="n"&gt;due&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;its&lt;/span&gt; &lt;span class="n"&gt;superior&lt;/span&gt; &lt;span class="n"&gt;speed&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;reliability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;SetWorkingDir&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;A_ScriptDir&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Ensures&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;consistent&lt;/span&gt; &lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                             &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;         &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;          &lt;span class="n"&gt;Logical&lt;/span&gt; &lt;span class="n"&gt;AND&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&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="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;   &lt;span class="o"&gt;&amp;amp;&amp;amp;=&lt;/span&gt;         &lt;span class="n"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;Assignment&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&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="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                             &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;         &lt;span class="o"&gt;**&lt;/span&gt;          &lt;span class="n"&gt;Math&lt;/span&gt; &lt;span class="n"&gt;Power&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&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="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                             &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;         &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;          &lt;span class="n"&gt;Arrow&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{(}{)}{&lt;/span&gt;&lt;span class="n"&gt;space&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="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;              &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;   &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;       &lt;span class="n"&gt;Arrow&lt;/span&gt; &lt;span class="n"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;implicit&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;
&lt;span class="o"&gt;!^&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{(}{)}{&lt;/span&gt;&lt;span class="n"&gt;space&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="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;space&lt;/span&gt;&lt;span class="p"&gt;}{{}{}}&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&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="n"&gt;Arrow&lt;/span&gt; &lt;span class="n"&gt;Function&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;explicit&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&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="o"&gt;|&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                             &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;         &lt;span class="o"&gt;||&lt;/span&gt;          &lt;span class="n"&gt;Logical&lt;/span&gt; &lt;span class="n"&gt;OR&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&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="o"&gt;|&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="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;   &lt;span class="o"&gt;||=&lt;/span&gt;         &lt;span class="n"&gt;OR&lt;/span&gt; &lt;span class="n"&gt;Assignment&lt;/span&gt;
&lt;span class="o"&gt;!=::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;=&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="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;         &lt;span class="o"&gt;===&lt;/span&gt;         &lt;span class="n"&gt;Strict&lt;/span&gt; &lt;span class="n"&gt;Equality&lt;/span&gt;
&lt;span class="o"&gt;!+=::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;=&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="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;   &lt;span class="o"&gt;!==&lt;/span&gt;         &lt;span class="n"&gt;Strict&lt;/span&gt; &lt;span class="n"&gt;Inequality&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&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="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                 &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="o"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;         &lt;span class="n"&gt;HTML&lt;/span&gt; &lt;span class="n"&gt;Close&lt;/span&gt; &lt;span class="n"&gt;Tag&lt;/span&gt;
&lt;span class="o"&gt;!^&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&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="n"&gt;left&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="n"&gt;Ctrl&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="o"&gt;&amp;lt;/&amp;gt;&lt;/span&gt;         &lt;span class="n"&gt;React&lt;/span&gt; &lt;span class="n"&gt;Component&lt;/span&gt; &lt;span class="n"&gt;Tag&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&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="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&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="n"&gt;Optional&lt;/span&gt; &lt;span class="n"&gt;Chaining&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                           &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt;          &lt;span class="n"&gt;Less&lt;/span&gt; &lt;span class="n"&gt;than&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;equal&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                           &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&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="n"&gt;Greater&lt;/span&gt; &lt;span class="n"&gt;than&lt;/span&gt; &lt;span class="n"&gt;or&lt;/span&gt; &lt;span class="n"&gt;equal&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;:&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="o"&gt;?:&lt;/span&gt;          &lt;span class="n"&gt;Ternary&lt;/span&gt; &lt;span class="n"&gt;Operator&lt;/span&gt;
&lt;span class="o"&gt;!/::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;?&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;                            &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+/&lt;/span&gt;         &lt;span class="o"&gt;??&lt;/span&gt;          &lt;span class="n"&gt;Nullish&lt;/span&gt; &lt;span class="n"&gt;Coalescing&lt;/span&gt;
&lt;span class="o"&gt;!+/::&lt;/span&gt; &lt;span class="n"&gt;Send&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="o"&gt;?&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="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+/&lt;/span&gt;   &lt;span class="o"&gt;??=&lt;/span&gt;         &lt;span class="n"&gt;Nullish&lt;/span&gt; &lt;span class="n"&gt;Coalescing&lt;/span&gt; &lt;span class="n"&gt;Assignment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Guarde el archivo y ábralo con AutoHotkey. &lt;/p&gt;

&lt;p&gt;Así de fácil, puedes tener un teclado vitaminado para escribir código JS/TS a toda velocidad.&lt;/p&gt;

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




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza" width="534" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>javascript</category>
      <category>typescript</category>
      <category>teclado</category>
    </item>
    <item>
      <title>Migrando a teclado en Inglés para desarrollo</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Fri, 25 Jun 2021 22:26:47 +0000</pubDate>
      <link>https://forem.com/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91</link>
      <guid>https://forem.com/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91</guid>
      <description>&lt;p&gt;Idiomas: [🇪🇸] &lt;a href="https://dev.to/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91"&gt;Español&lt;/a&gt; - [🇺🇸] &lt;a href="https://dev.to/equiman/switching-to-en-us-keyboard-layout-for-development-4b5a"&gt;English&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Cuando empecé a trabajar en desarrollo de software, recuerdo que uno de los desarrolladores senior me dio uno de los mejores consejos que me han dado: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Instale y use &lt;strong&gt;todo&lt;/strong&gt; en Inglés, acostumbrese de una vez porque todo el ecosistema de desarrollo se enfoca en ese idioma. Todo sale primero en inglés, las nuevas versiones, la documentación y hasta las noticias. Si se queda esperando a que salga en español va vivir con lag, desactualizado y atrasado.&lt;/p&gt;

&lt;p&gt;Además su vida va ser muchísimo más fácil porque cuando le salga un error de programación solo va tener que copiar y pegarlo en un buscador y seguro va encontrar la respuesta de una, si la busca en español o la traduce se va demorar horas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&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="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="s2"&gt;`https://stackoverflow.com/search?q={error.message}`&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;Y asi, la primera vez que vi ese chiste, de repente todas sus palabras cobraron sentido. 😎&lt;/p&gt;



&lt;p&gt;Hace unos días, empecé a ver a varios desarrolladores no americanos (Latam, España, Francia, Alemania, India, y Hungria) que recomendaban usar el teclado con la distribución en inglés, especificamente la de &lt;strong&gt;en-US&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Y una nueva revelación se plasmó ante mis ojos: &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si estamos usando software en inglés y escribiendo código en inglés ¿por qué no usar también hardware en inglés?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Los lenguajes de programación, IDEs y editores de código fueron diseñados y desarrollados para usarse en inglés como idioma principal; y si no me equivoco estoy casi seguro que fueron creados usando un teclado en inglés.&lt;/p&gt;

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

&lt;p&gt;Todos estas personas que cambiaron a esta distribución de teclado  decían que ahora sentían todo más fluido, natural, cómodo y hasta les ayudaba con la productividad. Creo que esto es debido a que los símbolos y atajos de teclado fueron creados usando un teclado con distribución &lt;strong&gt;en-US&lt;/strong&gt;. La verdad, no se si es correcto o no asumir eso, pero para mi tiene mucho sentido.&lt;/p&gt;

&lt;p&gt;¿Alguna vez han tratado de comprar un teclado mecánico con distribución en español y peor aun con distribución español de latinoamérica?, es prácticamente imposible. Por eso hacer el cambio a un distribución &lt;strong&gt;en-US&lt;/strong&gt; viene beneficios adicionales porque ya vas a comprar el teclado que quieras y no el que te toca. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si si, eso suena muy bueno pero... ¿qué hago con las tildes y con la letra Ñ?&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h1&gt;
  
  
  Solución Rápida
&lt;/h1&gt;

&lt;p&gt;Todxs los que necesiten cualquier clase de acentos o marcas diacríticas pueden usar la distribucíon &lt;strong&gt;US International&lt;/strong&gt; en vez de la &lt;strong&gt;en-US&lt;/strong&gt;.&lt;/p&gt;

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

&lt;p&gt;Esta distribución &lt;strong&gt;US International&lt;/strong&gt; también usa el modificador AltGr (Alt+Ctrl) para ingresar caracteres especiales y convierte los caracteres &lt;code&gt;`&lt;/code&gt; (acento grave), &lt;code&gt;~&lt;/code&gt; (virgulilla), &lt;code&gt;^&lt;/code&gt; (circunflejo), &lt;code&gt;"&lt;/code&gt; (comilla doble, para hacer diéresis), y &lt;code&gt;'&lt;/code&gt; (apóstrofe , para hacer acentos agudos) en &lt;strong&gt;teclas muertas&lt;/strong&gt; para producir caracteres con acento.&lt;/p&gt;

&lt;p&gt;Los de habla hispana ya estamos acostumbrados a usar el &lt;code&gt;´&lt;/code&gt; (acento agudo) que es una teclas muerta para tildar las vocales, pero en esta distribución por ejemplo se debe presionar el apóstrofe &lt;code&gt;'&lt;/code&gt; (liberarla) y después presionar la letra &lt;code&gt;a&lt;/code&gt; para producir la &lt;code&gt;á&lt;/code&gt; con acento. &lt;/p&gt;

&lt;p&gt;Pero esta distribución tiene un &lt;strong&gt;problema crítico&lt;/strong&gt; (al menos en Windows) para los que nos dedicamos al desarrollo de software debido a estas &lt;strong&gt;teclas muertas&lt;/strong&gt;. Vamos a perder velocidad porque para producir algunos caracteres que usamos frecuentemente como &lt;code&gt;"&lt;/code&gt; (comilla doble) o &lt;code&gt;'&lt;/code&gt; (comilla sencilla) vamos a tener que presionar dos teclas: primero la tecla muerta y luego un carácter de finalización como (espacio, tabulador o enter).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;¿Entonces como que hacemos ahí?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No hay de otra que regresar a la distribución &lt;strong&gt;en-US&lt;/strong&gt; y crear un script personalizado para los acentos. &lt;/p&gt;


&lt;h1&gt;
  
  
  Solución Personalizada
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Si no está interesado en el conocer toda la parte divertida y explicación, puede ir directamente al &lt;a href="https://dev.to/equimancho/migrando-a-teclado-en-ingles-para-desarrollo-a91#resumen"&gt;Resumen&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Voy a &lt;strong&gt;detallar&lt;/strong&gt; el proceso para crear un script de &lt;a href="https://www.autohotkey.com/" rel="noopener noreferrer"&gt;AutoHotKey&lt;/a&gt; para crear acentos en español. Ustedes lo pueden usar como ejemplo para crear el suyo y personalizarlo a gusto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primero, necesitamos reconocer los acentos como &lt;code&gt;áéíóúñ&lt;/code&gt; y símbolos como &lt;code&gt;¡¿&lt;/code&gt; que queremos re-mapear para así buscar su correspondiente valor decimal en la &lt;a href="https://www.ascii-code.com/" rel="noopener noreferrer"&gt;tabla ASCII&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Caracter&lt;/th&gt;
&lt;th&gt;Decimal&lt;/th&gt;
&lt;th&gt;Caracter&lt;/th&gt;
&lt;th&gt;Decimal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;á&lt;/td&gt;
&lt;td&gt;0225&lt;/td&gt;
&lt;td&gt;Á&lt;/td&gt;
&lt;td&gt;0193&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;é&lt;/td&gt;
&lt;td&gt;0233&lt;/td&gt;
&lt;td&gt;É&lt;/td&gt;
&lt;td&gt;0201&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;í&lt;/td&gt;
&lt;td&gt;0237&lt;/td&gt;
&lt;td&gt;Í&lt;/td&gt;
&lt;td&gt;0205&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ó&lt;/td&gt;
&lt;td&gt;0243&lt;/td&gt;
&lt;td&gt;Ó&lt;/td&gt;
&lt;td&gt;0211&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ú&lt;/td&gt;
&lt;td&gt;0250&lt;/td&gt;
&lt;td&gt;Ú&lt;/td&gt;
&lt;td&gt;0218&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ñ&lt;/td&gt;
&lt;td&gt;0241&lt;/td&gt;
&lt;td&gt;Ñ&lt;/td&gt;
&lt;td&gt;0209&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;¿&lt;/td&gt;
&lt;td&gt;0191&lt;/td&gt;
&lt;td&gt;?&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;¡&lt;/td&gt;
&lt;td&gt;0161&lt;/td&gt;
&lt;td&gt;!&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Luego, vamos a re-mapear cada tecla con el destino deseado siguiendo este formato &lt;code&gt;OriginKey::DestinationKey&lt;/code&gt; prestando especial atención en las &lt;a href="https://www.autohotkey.com/docs/KeyList.htm#modifier" rel="noopener noreferrer"&gt;teclas modificadoras&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Caracter&lt;/th&gt;
&lt;th&gt;Modificador&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;^&lt;/td&gt;
&lt;td&gt;Ctrl&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;!&lt;/td&gt;
&lt;td&gt;Alt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;+&lt;/td&gt;
&lt;td&gt;Shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;#&lt;/td&gt;
&lt;td&gt;Win&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;lt;&lt;/td&gt;
&lt;td&gt;Izquierda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;gt;&lt;/td&gt;
&lt;td&gt;Derecha&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Crear un archivo con el nombre &lt;code&gt;en-US_accents.ahk&lt;/code&gt; y adicionar la siguiente configuración.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0225&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;á&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="mi"&gt;93&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Á&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0233&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;é&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0201&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;É&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0237&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;í&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0205&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Í&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0243&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ó&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0211&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ó&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0250&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ú&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;021&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ú&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0241&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ñ&lt;/span&gt;
&lt;span class="o"&gt;!+&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;020&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ñ&lt;/span&gt;


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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Pero que fácil!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;No tan rápido mi amigx. Acabamos de crear el acceso rápido &lt;code&gt;Alt+Shift+A&lt;/code&gt;, pero por ejemplo &lt;strong&gt;VSCode&lt;/strong&gt; también usar el mismo acceso rápido para alternar la opción de activar y desactivar commentarios.&lt;/p&gt;

&lt;p&gt;Así que lo mejor es cambiar nuestro script para que los &lt;code&gt;Alt+Shift+&lt;/code&gt; solo funcione con el Alt de la derecha &lt;code&gt;(Der)Alt+Shift+&lt;/code&gt;. Para ello debemos cambiar los modificadores &lt;code&gt;!+&lt;/code&gt; por &lt;code&gt;&amp;gt;!+&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Con esa pequeña corrección VScode podrá seguir funcionando con el &lt;code&gt;(Izq)Alt+Shift+a&lt;/code&gt; y nosotros podremos usar el &lt;code&gt;(Der)Alt+Shift+a&lt;/code&gt; para escribir la &lt;code&gt;Á&lt;/code&gt; (con acento). Yo prefiero cambiar de una vez todas las letras para conservar el estándar, pero vos podes decidir si cambias únicamente las teclas que generen conflictos.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0225&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;á&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="mi"&gt;93&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Á&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0233&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;é&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0201&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;É&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0237&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;í&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0205&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RightAlt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Í&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0243&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ó&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0211&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ó&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0250&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ú&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;021&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ú&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0241&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ñ&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;020&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ñ&lt;/span&gt;


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

&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;¡Oh si! ¡Excelente!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Adicionalmente en español usamos los símbolos de exclamación y apertura de forma emparejada, es decir, siempre deben tener símbolo de apertura y de cierre.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="o"&gt;!/::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mi"&gt;63&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+/&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;¿&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0161&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;¡&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrambmp175octsbv55o8.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrambmp175octsbv55o8.gif" alt="accents"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lo buenos de usar scripts de este tipo, es que podemos sobre cargarlos con más trucos. En este caso podemos hacer que escriba la pareja de símbolos y con el comando &lt;code&gt;{left 1}&lt;/code&gt; mueva el cursor entre ellos.&lt;/p&gt;


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

&lt;p&gt;Aún conservo unos cuantos trucos más bajo las mangas, pero los considero opcionales.&lt;/p&gt;

&lt;p&gt;Si tienes un teclado numérico a la derecha ¿por qué no usar la fila superior de números directamente con los símbolos cuando el &lt;code&gt;Num Lock&lt;/code&gt; se encuentre activo?&lt;/p&gt;

&lt;p&gt;Les debo confesar que fue uno de los cambios a los que mas me costó acostumbrarme, pero una vez la mente lo asimila es una dicha poder codear sin tener que estar presionando constantemente el modificador &lt;code&gt;Shift&lt;/code&gt; (Mayús).&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="cp"&gt;#if GetKeyState("NumLock", "T")
&lt;/span&gt;    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::!&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;::^&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&amp;amp;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="cp"&gt;#if
&lt;/span&gt;

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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fielb5m23bvosj35gw570.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fielb5m23bvosj35gw570.gif" alt="numpad"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Si tienes un laptop o un teclado TKL (Ten Key Less) puedes usar la tecla &lt;code&gt;Insert&lt;/code&gt; en vez de &lt;code&gt;NumLock&lt;/code&gt; para activar o desactivar esta opción.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Y ahora hágase esta pregunta ¿cuántas veces usan la tecla &lt;code&gt;Caps Lock&lt;/code&gt; (Bloq Mayús)? ne mi caso casi nunca. Cuando estuve probando otras distribuciones como &lt;strong&gt;Dvorak&lt;/strong&gt; y especificamente &lt;strong&gt;Workman&lt;/strong&gt; descubrí las maravillas de intercambiarla por el &lt;code&gt;Backspace&lt;/code&gt; (retroceso) y poder hacer correcciones sin salir de la Fila Guía (Home Row) del teclado.&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Backspace&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;


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

&lt;/div&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdj6gfodm0if3m5rxk29.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvdj6gfodm0if3m5rxk29.gif" alt="caps"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pero en todo caso, si en algún momento necesitan activar el &lt;code&gt;Caps Lock&lt;/code&gt; (Bloq Mayús), por ejemplo para escribir SQL lo pueden activar y desactivar usando &lt;code&gt;Alt+CapsLock&lt;/code&gt;.&lt;/p&gt;


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

&lt;p&gt;Finalmente, tenemos una distribución de teclado &lt;strong&gt;en-US&lt;/strong&gt; para desarrollo completamente compatible, rápida, confiable y que puede ser usada por los Hispanohablantes sin dejar de usar &lt;strong&gt;Qwerty&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbrvg5qoaqs66p91jc7x.gif" 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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjbrvg5qoaqs66p91jc7x.gif" alt="en-us"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todo con un simple script de AutoHotkey:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cpp"&gt;&lt;code&gt;

&lt;span class="cp"&gt;#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="n"&gt;Warn&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Enable&lt;/span&gt; &lt;span class="n"&gt;warnings&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;assist&lt;/span&gt; &lt;span class="n"&gt;with&lt;/span&gt; &lt;span class="n"&gt;detecting&lt;/span&gt; &lt;span class="n"&gt;common&lt;/span&gt; &lt;span class="n"&gt;errors&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;SendMode&lt;/span&gt; &lt;span class="n"&gt;Input&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Recommended&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;scripts&lt;/span&gt; &lt;span class="n"&gt;due&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;its&lt;/span&gt; &lt;span class="n"&gt;superior&lt;/span&gt; &lt;span class="n"&gt;speed&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;reliability&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;SetWorkingDir&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;A_ScriptDir&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Ensures&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;consistent&lt;/span&gt; &lt;span class="n"&gt;starting&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Modifiers&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;Ctrl&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Win&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;Left&lt;/span&gt;
&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Right&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Action&lt;/span&gt;
&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Backspace&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt;     &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;CapsLock&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Enable&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Disable&lt;/span&gt; &lt;span class="n"&gt;Caps&lt;/span&gt; &lt;span class="n"&gt;Lock&lt;/span&gt;
&lt;span class="n"&gt;PrintScreen&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="err"&gt;#&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Accents&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0225&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;á&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="mi"&gt;93&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Á&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0233&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;é&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0201&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;É&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0237&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;í&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0205&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RightAlt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Í&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0243&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ó&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0211&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ó&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0250&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ú&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;021&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ú&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0241&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;ñ&lt;/span&gt;
&lt;span class="o"&gt;&amp;gt;!+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;020&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;  &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Shift&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Right&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;Ñ&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Symbols&lt;/span&gt;
&lt;span class="o"&gt;!/::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;01&lt;/span&gt;&lt;span class="mi"&gt;91&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mi"&gt;63&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+/&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;¿&lt;/span&gt;&lt;span class="o"&gt;?&lt;/span&gt;
&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt; &lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mo"&gt;0161&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;Asc&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;}{&lt;/span&gt;&lt;span class="n"&gt;left&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;    &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Alt&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="err"&gt;¡&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;

&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;Swap&lt;/span&gt; &lt;span class="n"&gt;Numbers&lt;/span&gt; &lt;span class="n"&gt;Row&lt;/span&gt;
&lt;span class="cp"&gt;#if GetKeyState("NumLock", "T")
&lt;/span&gt;    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::!&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;@&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;#&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;::^&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&amp;amp;&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="err"&gt;`&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;9&lt;/span&gt;
    &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;Send&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="cp"&gt;#if
&lt;/span&gt;

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

&lt;/div&gt;
&lt;p&gt;Como les mencioné mas arriba, se que existen otras distribuciones de teclado como Dvorak, Colemak, Workman, Norman y otro montón más. He probado varias de ellas y termine por convencerme que no hay una distribución perfecta para todo. Si eres escritor podría ser un factor clave par aumentar la velocidad, pero en desarrollo no es un aspecto tan importante.&lt;/p&gt;

&lt;p&gt;Por eso creo que con los cambio que estamos introduciendo con AutoHotkey, puedes seguir usando &lt;strong&gt;Qwerty&lt;/strong&gt; y no vas a tener que enfrentar demasiados problemas en caso de que necesites usar el computador de alguien más o alguien necesite usar el tuyo.&lt;/p&gt;

&lt;p&gt;Lo bueno de todo esto es que tenemos múltiples opciones y podemos elegir la que más nos guste acorde a las necesidades y gustos. Escoge con sabiduría lo que creas que es mejor para tí y concédete el permiso de probar cosas nuevas, te puedes llegar a sorprender.&lt;/p&gt;



&lt;p&gt;Una última recomendación. Si trabajas en desarrollo de software, también podrías darle superpoderes a tu teclado para que escriba los operadores de JS/TS por ti.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/equimancho" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&gt;
      &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4341%2Fc86a35c2-7954-4ca3-a2d9-9bc0aeac358f.png" alt="equimancho"&gt;
      &lt;div class="ltag__link__user__pic"&gt;
        &lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F60846%2Fa7b57cd0-916f-408e-ad8e-86c03c941327.jpg" alt=""&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/equimancho/operadores-de-javascript-con-autohotkey-3o74" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Operadores de Javascript con AutoHotKey&lt;/h2&gt;
      &lt;h3&gt;Camilo Martinez for equimancho ・ Jun 25 '21&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#spanish&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#javascript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#typescript&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#teclado&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;






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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Keyboard_layout" rel="noopener noreferrer"&gt;Wikipedia - Keyboard Layouts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/British_and_American_keyboards" rel="noopener noreferrer"&gt;Wikipedia - British and American Keyboards&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;That’s All Folks!&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinsoftware" rel="noopener noreferrer"&gt;&lt;img src="https://media.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%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>productividad</category>
      <category>teclado</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Curso JSON - 8. Finalización</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Tue, 28 Apr 2020 15:47:00 +0000</pubDate>
      <link>https://forem.com/equimancho/curso-json-8-finalizacion-298d</link>
      <guid>https://forem.com/equimancho/curso-json-8-finalizacion-298d</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/pCeZv0kNTTg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Curso sobre JSON de novato a experto (&lt;strong&gt;versión GRATIS&lt;/strong&gt;)&lt;br&gt;
Presentación: &lt;a href="https://slides.com/equimancho/json/#/8"&gt;https://slides.com/equimancho/json/#/8&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Evaluación: &lt;a href="https://forms.gle/WtPKfEMgTffm9KrQ6"&gt;https://forms.gle/WtPKfEMgTffm9KrQ6&lt;/a&gt;&lt;br&gt;
Encuesta: &lt;a href="https://forms.gle/mA3SgMXZ9BY8dUsA9"&gt;https://forms.gle/mA3SgMXZ9BY8dUsA9&lt;/a&gt; 🙏&lt;/p&gt;

&lt;p&gt;Redes Sociales:&lt;br&gt;
Twitter: &lt;a href="https://twitter.com/equiman/"&gt;https://twitter.com/equiman/&lt;/a&gt;&lt;br&gt;
Dev.to: &lt;a href="https://dev.to/equiman"&gt;https://dev.to/equiman&lt;/a&gt;&lt;br&gt;
YouTube: &lt;a href="https://www.youtube.com/c/equimancho"&gt;https://www.youtube.com/c/equimancho&lt;/a&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/equiman/"&gt;https://www.linkedin.com/in/equiman/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That's All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinacademy"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza" width="534" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>vscode</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Curso JSON - 7. Reto</title>
      <dc:creator>Camilo Martinez</dc:creator>
      <pubDate>Tue, 28 Apr 2020 15:43:53 +0000</pubDate>
      <link>https://forem.com/equimancho/curso-json-7-reto-352f</link>
      <guid>https://forem.com/equimancho/curso-json-7-reto-352f</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/xX5uRAEC7Lg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Curso sobre JSON de novato a experto (&lt;strong&gt;versión GRATIS&lt;/strong&gt;)&lt;br&gt;
Presentación: &lt;a href="https://slides.com/equimancho/json/#/7"&gt;https://slides.com/equimancho/json/#/7&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositorio:&lt;br&gt;
&lt;a href="https://github.com/equiman/playground-json"&gt;https://github.com/equiman/playground-json&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;API de Game of Thrones:&lt;br&gt;
&lt;a href="https://api.got.show/doc/"&gt;https://api.got.show/doc/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Descargas:&lt;br&gt;
Postman: &lt;a href="https://www.postman.com/"&gt;https://www.postman.com/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That's All Folks!&lt;br&gt;
Happy Coding&lt;/strong&gt; 🖖&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/sponsors/deinacademy"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh4zle20oa7anpfjvap8n.png" alt="cerveza" width="534" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>spanish</category>
      <category>vscode</category>
      <category>node</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
