<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erick Vasquez </title>
    <description>The latest articles on DEV Community by Erick Vasquez  (@erickvasm).</description>
    <link>https://dev.to/erickvasm</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F722038%2F78b9d729-41ef-477b-8170-b95250d58dc9.jpeg</url>
      <title>DEV Community: Erick Vasquez </title>
      <link>https://dev.to/erickvasm</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erickvasm"/>
    <language>en</language>
    <item>
      <title>Comparativa de preprocesadores de textos CSS</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Wed, 17 Dec 2025 00:31:19 +0000</pubDate>
      <link>https://dev.to/erickvasm/comparativa-de-preprocesadores-de-textos-css-3ini</link>
      <guid>https://dev.to/erickvasm/comparativa-de-preprocesadores-de-textos-css-3ini</guid>
      <description>&lt;p&gt;El CSS moderno ha evolucionado enormemente, pero durante años careció de funcionalidades básicas como variables, funciones o reutilización de código. Para cubrir estas limitaciones surgieron los &lt;strong&gt;preprocesadores CSS&lt;/strong&gt;, herramientas que extienden la sintaxis de CSS y luego la compilan a CSS estándar compatible con los navegadores.&lt;/p&gt;

&lt;p&gt;En este artículo comparamos los preprocesadores más conocidos: &lt;strong&gt;Sass&lt;/strong&gt;, &lt;strong&gt;Less&lt;/strong&gt; y &lt;strong&gt;Stylus&lt;/strong&gt;, analizando sus ventajas, desventajas y casos de uso reales.&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es un preprocesador CSS?
&lt;/h2&gt;

&lt;p&gt;Un preprocesador CSS permite escribir estilos con características avanzadas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;Anidamiento de selectores&lt;/li&gt;
&lt;li&gt;Mixins y funciones&lt;/li&gt;
&lt;li&gt;Modularización del código&lt;/li&gt;
&lt;li&gt;Operaciones matemáticas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;El navegador &lt;strong&gt;no entiende&lt;/strong&gt; este código directamente; primero debe compilarse a CSS plano.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Sass (SCSS)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Descripción
&lt;/h3&gt;

&lt;p&gt;Sass es el preprocesador más utilizado y el estándar de facto en proyectos profesionales. Su sintaxis más popular es &lt;strong&gt;SCSS&lt;/strong&gt;, muy similar al CSS tradicional.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Amplia adopción y comunidad&lt;/li&gt;
&lt;li&gt;Excelente documentación&lt;/li&gt;
&lt;li&gt;Compatible con frameworks modernos (Angular, React, Vue)&lt;/li&gt;
&lt;li&gt;Soporte nativo en muchas herramientas de build&lt;/li&gt;
&lt;li&gt;Sintaxis clara y mantenible&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Puede volverse complejo si se abusa del anidamiento&lt;/li&gt;
&lt;li&gt;Curva de aprendizaje moderada para principiantes&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight scss"&gt;&lt;code&gt;&lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#3498db&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;darken&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$primary-color&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="m"&gt;10%&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;h3&gt;
  
  
  Cuándo usarlo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proyectos medianos o grandes&lt;/li&gt;
&lt;li&gt;Equipos de trabajo&lt;/li&gt;
&lt;li&gt;Código que debe mantenerse a largo plazo&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Less
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Descripción
&lt;/h3&gt;

&lt;p&gt;Less fue muy popular en sus inicios y es más simple que Sass. Bootstrap lo utilizó durante varias versiones.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Sintaxis sencilla&lt;/li&gt;
&lt;li&gt;Fácil de aprender&lt;/li&gt;
&lt;li&gt;Compilación rápida&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Menor comunidad actualmente&lt;/li&gt;
&lt;li&gt;Menos funcionalidades avanzadas que Sass&lt;/li&gt;
&lt;li&gt;Ecosistema en declive&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@primary-color: #3498db;

.button {
  background: @primary-color;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cuándo usarlo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proyectos pequeños&lt;/li&gt;
&lt;li&gt;Mantenimiento de proyectos antiguos&lt;/li&gt;
&lt;li&gt;Equipos con necesidades simples&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. Stylus
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Descripción
&lt;/h3&gt;

&lt;p&gt;Stylus apuesta por una sintaxis muy flexible y minimalista, incluso eliminando llaves y punto y coma.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Muy expresivo&lt;/li&gt;
&lt;li&gt;Código más corto&lt;/li&gt;
&lt;li&gt;Gran libertad sintáctica&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Menos legible para equipos grandes&lt;/li&gt;
&lt;li&gt;Comunidad pequeña&lt;/li&gt;
&lt;li&gt;Inconsistencias entre estilos de código&lt;/li&gt;
&lt;/ul&gt;

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



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;primary-color = #3498db

.button
  background primary-color
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Cuándo usarlo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Proyectos personales&lt;/li&gt;
&lt;li&gt;Desarrolladores que priorizan rapidez sobre estandarización&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Comparativa rápida
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Sass&lt;/th&gt;
&lt;th&gt;Less&lt;/th&gt;
&lt;th&gt;Stylus&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Popularidad&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;td&gt;Media/Baja&lt;/td&gt;
&lt;td&gt;Baja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Comunidad&lt;/td&gt;
&lt;td&gt;Muy activa&lt;/td&gt;
&lt;td&gt;Limitada&lt;/td&gt;
&lt;td&gt;Reducida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Escalabilidad&lt;/td&gt;
&lt;td&gt;Alta&lt;/td&gt;
&lt;td&gt;Media&lt;/td&gt;
&lt;td&gt;Baja&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Curva de aprendizaje&lt;/td&gt;
&lt;td&gt;Media&lt;/td&gt;
&lt;td&gt;Baja&lt;/td&gt;
&lt;td&gt;Media&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uso profesional&lt;/td&gt;
&lt;td&gt;Sí&lt;/td&gt;
&lt;td&gt;Poco&lt;/td&gt;
&lt;td&gt;Raro&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ¿Siguen siendo necesarios los preprocesadores en 2025?
&lt;/h2&gt;

&lt;p&gt;Con la evolución reciente de CSS, esta pregunta ya no es retórica. Hoy &lt;strong&gt;muchas de las razones históricas para usar preprocesadores han desaparecido o se han debilitado considerablemente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CSS moderno incorpora de forma nativa funcionalidades que antes solo existían en herramientas como Sass:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variables nativas (&lt;code&gt;custom properties&lt;/code&gt;) con scope y runtime&lt;/li&gt;
&lt;li&gt;Funciones avanzadas como &lt;code&gt;calc()&lt;/code&gt;, &lt;code&gt;clamp()&lt;/code&gt;, &lt;code&gt;min()&lt;/code&gt;, &lt;code&gt;max()&lt;/code&gt; y &lt;code&gt;color-mix()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Anidamiento nativo de selectores&lt;/li&gt;
&lt;li&gt;Selectores relacionales como &lt;code&gt;:has()&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Queries más expresivas (&lt;code&gt;@media&lt;/code&gt;, &lt;code&gt;@container&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Condicionales nativos en valores mediante &lt;code&gt;if()&lt;/code&gt; (con soporte progresivo)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Entonces, ¿qué problemas ya resuelve bien CSS nativo?&lt;/p&gt;

&lt;p&gt;Para muchos proyectos actuales, CSS moderno cubre sin fricción:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Temas y diseño dinámico sin recompilar&lt;/li&gt;
&lt;li&gt;Responsive design complejo sin mixins&lt;/li&gt;
&lt;li&gt;Lógica condicional basada en estado, soporte o contexto&lt;/li&gt;
&lt;li&gt;Reutilización mediante variables y composición&lt;/li&gt;
&lt;li&gt;Componentes verdaderamente encapsulados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;La pregunta correcta ya no es “¿CSS o preprocesador?” La pregunta correcta es:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;¿Este proyecto necesita lógica en tiempo de compilación o se beneficia más de lógica en tiempo de ejecución?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Si la respuesta es &lt;em&gt;runtime, flexibilidad y adaptación&lt;/em&gt; → CSS moderno&lt;/li&gt;
&lt;li&gt;Si la respuesta es &lt;em&gt;estructura, generación y control estricto&lt;/em&gt; → Sass&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Scanner vs BufferedReader</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sun, 09 Nov 2025 18:16:03 +0000</pubDate>
      <link>https://dev.to/erickvasm/scanner-vs-bufferedreader-2m25</link>
      <guid>https://dev.to/erickvasm/scanner-vs-bufferedreader-2m25</guid>
      <description>&lt;h2&gt;
  
  
  Comparación de Características
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Característica&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Scanner&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;BufferedReader&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Facilidad de uso&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Más simple y directo para leer distintos tipos de datos (&lt;code&gt;nextInt()&lt;/code&gt;, &lt;code&gt;nextLine()&lt;/code&gt;, etc.)&lt;/td&gt;
&lt;td&gt;Solo lee texto como &lt;code&gt;String&lt;/code&gt;, se necesita &lt;code&gt;Integer.parseInt()&lt;/code&gt; para números.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Velocidad&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Más lento&lt;/td&gt;
&lt;td&gt;Más rápido, especialmente con muchos datos.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Parsers incluidos&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sí, métodos como &lt;code&gt;nextInt()&lt;/code&gt;, &lt;code&gt;nextDouble()&lt;/code&gt;, etc.&lt;/td&gt;
&lt;td&gt;No, debes convertir manualmente (&lt;code&gt;Integer.parseInt()&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Lectura de líneas&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Con &lt;code&gt;nextLine()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Con &lt;code&gt;readLine()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Uso con consola&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ideal para programas interactivos&lt;/td&gt;
&lt;td&gt;Menos cómodo, requiere más código.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sincronización&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No sincronizado&lt;/td&gt;
&lt;td&gt;Sincronizado (&lt;em&gt;thread-safe&lt;/em&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;h3&gt;
  
  
  Con &lt;strong&gt;Scanner&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.util.Scanner&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ScannerExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;Scanner&lt;/span&gt; &lt;span class="n"&gt;sc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Scanner&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter your name: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextLine&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter your age: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;nextInt&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;", age "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Con &lt;strong&gt;BufferedReader&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.BufferedReader&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.InputStreamReader&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;java.io.IOException&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BufferedReaderExample&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="kd"&gt;throws&lt;/span&gt; &lt;span class="nc"&gt;IOException&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;BufferedReader&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;BufferedReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;InputStreamReader&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;in&lt;/span&gt;&lt;span class="o"&gt;));&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter your name: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readLine&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;print&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Enter your age: "&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Integer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;parseInt&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;br&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;readLine&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;", age "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ¿Cuál deberías usar?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Usa Scanner si:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Estás haciendo prácticas de algoritmos en consola.&lt;/li&gt;
&lt;li&gt;En programas donde la &lt;strong&gt;facilidad de lectura&lt;/strong&gt; es más importante que la velocidad.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Usa BufferedReader si:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Necesitas &lt;strong&gt;máximo rendimiento&lt;/strong&gt; (por ejemplo, al leer grandes cantidades de datos).&lt;/li&gt;
&lt;li&gt;Estás haciendo &lt;strong&gt;parsing de archivos grandes&lt;/strong&gt; o &lt;em&gt;input&lt;/em&gt; de alta velocidad en línea.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>java</category>
    </item>
    <item>
      <title>Desplegando Backend + Frontend con Nginx</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sat, 11 Oct 2025 15:06:07 +0000</pubDate>
      <link>https://dev.to/erickvasm/desplegando-backend-frontend-con-nginx-1l7j</link>
      <guid>https://dev.to/erickvasm/desplegando-backend-frontend-con-nginx-1l7j</guid>
      <description>&lt;p&gt;Cuando tuve que desplegar un proyecto en una máquina virtual (VM) de Azure, terminé armando los pasos a partir de diferentes tutoriales y documentación. Dejo mis notas aquí por si le sirven a alguien más y le ahorran un buen rato. No es una guía perfecta, pero debería llevarte de cero a tener tu backend y frontend funcionando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuración de la VM en Azure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Crear la VM.&lt;/li&gt;
&lt;li&gt;Asegurarse de abrir los puertos &lt;strong&gt;HTTP (80), HTTPS (443) y SSH (22)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Guardar el archivo &lt;code&gt;.pem&lt;/code&gt; (lo vas a necesitar para conectarte).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Instalar Nginx
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalar Node.js (con nvm)
&lt;/h2&gt;

&lt;p&gt;Seguí &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04" rel="noopener noreferrer"&gt;este tutorial de DigitalOcean&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

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

nvm list-remote
nvm &lt;span class="nb"&gt;install &lt;/span&gt;v14.10.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Instalar Docker
&lt;/h2&gt;

&lt;p&gt;Seguir la &lt;a href="https://docs.docker.com/engine/install/ubuntu/" rel="noopener noreferrer"&gt;documentación oficial&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configurar Git + SSH
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen
&lt;span class="nb"&gt;cat&lt;/span&gt; ~/.ssh/id_rsa.pub   &lt;span class="c"&gt;# agregar esta clave a GitHub&lt;/span&gt;
&lt;span class="nb"&gt;eval&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;ssh-agent &lt;span class="nt"&gt;-s&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
ssh-add ~/.ssh/id_rsa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Clonar proyectos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;tu-repo&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;project
npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configurar tu &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desplegar el frontend (React sin framework adicional)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cnpm i
npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mover el build al directorio de Nginx:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/html/
&lt;span class="nb"&gt;sudo &lt;/span&gt;su
&lt;span class="nb"&gt;rm &lt;/span&gt;index.nginx-debian.html
&lt;span class="nb"&gt;cp&lt;/span&gt; &lt;span class="nt"&gt;-rv&lt;/span&gt; /home/radar/projects/frontend_aci/dist/&lt;span class="k"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Probar en el navegador con la IP pública del servidor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://&amp;lt;ip-del-servidor&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurar Nginx
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://vipinyadav.com/blog/deploy-frontend-backend-server-using-nginx-pm2/" rel="noopener noreferrer"&gt;este artículo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Ejemplo para el frontend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
   &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;aci.&lt;/span&gt;
&lt;span class="s"&gt;![&lt;/span&gt; &lt;span class="s"&gt;](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vdkfcnvegct8q7up9oqy.png)&lt;/span&gt;

&lt;span class="s"&gt;intern.org&lt;/span&gt; &lt;span class="s"&gt;www.aci.awaqintern.org&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="n"&gt;/var/www/html/frontend_aci&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

   &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kn"&gt;try_files&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;&lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="n"&gt;/index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
   &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejemplo para el backend:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight nginx"&gt;&lt;code&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="s"&gt;api.awaqintern.org&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="n"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_pass&lt;/span&gt; &lt;span class="s"&gt;http://localhost:8080&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
    &lt;span class="kn"&gt;proxy_http_version&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Upgrade&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Connection&lt;/span&gt; &lt;span class="s"&gt;'upgrade'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_set_header&lt;/span&gt; &lt;span class="s"&gt;Host&lt;/span&gt; &lt;span class="nv"&gt;$host&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kn"&gt;proxy_cache_bypass&lt;/span&gt; &lt;span class="nv"&gt;$http_upgrade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Activar las configuraciones y reiniciar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/api.domain.com.conf /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/domain.com.conf /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Revisar logs en caso de error:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /var/log/nginx/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Dockerizar el backend
&lt;/h2&gt;

&lt;p&gt;Referencia: &lt;a href="https://betterstack.com/community/guides/scaling-nodejs/dockerize-nodejs/" rel="noopener noreferrer"&gt;guía de BetterStack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl3ufknmg784z09f6ls1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbl3ufknmg784z09f6ls1.png" alt="Docker" width="800" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Compilar la imagen:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="nt"&gt;-t&lt;/span&gt; api-aci:1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ejecutar el contenedor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 8080:8080 &lt;span class="nt"&gt;--name&lt;/span&gt; api_aci api-aci:1
docker logs &lt;span class="nt"&gt;-f&lt;/span&gt; &amp;lt;id-del-contenedor&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configurar dominios y DNS
&lt;/h2&gt;

&lt;p&gt;En &lt;code&gt;/etc/hosts&lt;/code&gt;, probar mapeando tu IP con el dominio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;4.236.183.100   aci.somosawaq.com
4.236.183.100   api.aci.somosawaq.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Después configurar el dominio real en &lt;strong&gt;Cloudflare&lt;/strong&gt; (o tu proveedor DNS) apuntando a la IP pública de la VM.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Certificados SSL
&lt;/h2&gt;

&lt;p&gt;Al final, habilitar el firewall y configurar HTTPS con &lt;strong&gt;Certbot&lt;/strong&gt; (no lo detallo aquí, pero es altamente recomendable):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw &lt;span class="nb"&gt;enable&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Este fue el camino que seguí para poner en línea una API en Node.js y un frontend en React en una VM de Azure usando Nginx y Docker. Existen formas más elegantes de hacerlo (CI/CD, Kubernetes, etc.), pero si lo que necesitas es tener algo funcionando rápido, esta configuración cumple.&lt;/p&gt;

</description>
      <category>nginx</category>
      <category>azure</category>
      <category>virtualmachine</category>
    </item>
    <item>
      <title>IA en las aulas y mundo laboral</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sat, 16 Aug 2025 04:26:27 +0000</pubDate>
      <link>https://dev.to/erickvasm/ia-en-las-aulas-y-mundo-laboral-3l0l</link>
      <guid>https://dev.to/erickvasm/ia-en-las-aulas-y-mundo-laboral-3l0l</guid>
      <description>&lt;p&gt;En el mundo educativo, la pregunta incómoda es: ¿Se está evaluando lo que el estudiante sabe o solo su capacidad de usar bien la IA?&lt;/p&gt;

&lt;p&gt;En el mundo del desarrollo de software, la inquietud es parecida: ¿Seguimos entendiendo el código o solo sabemos copiar y pegar lo que la IA nos da? (Nistal, 2025).  &lt;/p&gt;

&lt;p&gt;Lo interesante es que ambas situaciones reflejan el mismo riesgo: la dependencia excesiva de la IA puede debilitar habilidades fundamentales, tanto en estudiantes como en profesionales.  &lt;/p&gt;




&lt;h2&gt;
  
  
  Cuando la comodidad pasa factura
&lt;/h2&gt;

&lt;p&gt;Un desarrollador que ya no lee un &lt;em&gt;stack trace&lt;/em&gt; y un estudiante que ya no consulta fuentes tienen mucho en común: ambos dejan de ejercitar el pensamiento crítico.  &lt;/p&gt;

&lt;p&gt;Como advierte Nistal (2025), al delegar de forma automática tareas como el &lt;em&gt;debugging&lt;/em&gt; o la comprensión de errores, el programador pierde no solo conocimientos técnicos, sino también una gimnasia mental clave para la vida: la capacidad de &lt;strong&gt;analizar, deducir y tolerar la frustración&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;Algo similar ocurre en la educación. Si una tarea puede resolverse pidiéndole todo a la IA, entonces lo que evaluamos no es el razonamiento del estudiante, sino su habilidad para redactar bien un &lt;em&gt;prompt&lt;/em&gt;. Y en ese camino se pierde lo esencial: &lt;strong&gt;la construcción auténtica de aprendizaje&lt;/strong&gt;.  &lt;/p&gt;




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

&lt;p&gt;No soy educador, pero aspiro a serlo. Y justamente por eso este tema me es interesante. He visto en mi propio caso, como en el ámbito profesional, la IA puede volverse una muleta que nos quita la oportunidad de aprender de los errores. Me ha pasado que por el uso excesivo de la IA, me enojo cuando no tengo una solución rápida, se me olvidan conceptos básicos y percibo que aprendo menos. Y no quiero que pase lo mismo en las aulas.  &lt;/p&gt;

&lt;p&gt;Me pregunto: &lt;strong&gt;¿cómo enseñar a la próxima generación a usar la IA como herramienta, sin que pierdan la capacidad de pensar por sí mismos?&lt;/strong&gt;  &lt;/p&gt;




&lt;h2&gt;
  
  
  Entonces, ¿qué hacemos?
&lt;/h2&gt;

&lt;p&gt;Ni prohibir ni aplaudir ciegamente. La respuesta está en &lt;strong&gt;usar la IA con conciencia&lt;/strong&gt;. Aquí hay aprendizajes cruzados entre el aula y el mundo laboral:  &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Promover la ética y la autoría&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En la universidad: abrir conversaciones sobre cuándo y cómo usar IA en las tareas. Se pueden definir buenas prácticas de cómo usar la IA como copiloto, las mejores fuentes y formas de preguntar dudas. &lt;/li&gt;
&lt;li&gt;En el trabajo: tratar el código de la IA como si fuera de un &lt;em&gt;compañero junior&lt;/em&gt;: revisarlo, cuestionarlo y mejorarlo.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fomentar el pensamiento crítico&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En clase: pedir a los estudiantes contrastar lo que dice la IA con fuentes confiables o con su experiencia personal.
&lt;/li&gt;
&lt;li&gt;En el desarrollo: preguntarse “¿por qué funciona esta solución?” o “¿qué pasa en casos extremos?”, antes de darla por buena.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rediseñar las actividades&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En educación: diseñar trabajos por etapas (borrador, revisión, defensa oral) que muestren el proceso y no solo el producto.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Una tarea puede ser así:  &lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;“Escribí un ensayo sobre la seguridad informática”  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Después:&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Identificá tres eventos relevantes de su país relacionados a la seguridad informática.
&lt;/li&gt;
&lt;li&gt;Consultá una IA sobre esos eventos.
&lt;/li&gt;
&lt;li&gt;Compará lo que sabías, lo que dijo la IA y lo que investigaste en fuentes confiables.
&lt;/li&gt;
&lt;li&gt;Elaborá una presentación breve o infografía para explicar tus hallazgos y reflexiones.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;En programación: reservar tiempo de &lt;em&gt;“No-AI days”&lt;/em&gt; para volver a leer documentación, practicar &lt;em&gt;debugging&lt;/em&gt; manual y ejercitar la memoria de los fundamentos.
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Reflexión final
&lt;/h2&gt;

&lt;p&gt;En vez de asumir una postura prohibitiva, creo que podemos —y debemos— ir más allá. La IA llegó para quedarse. No podemos simplemente ignorarla o combatirla como si fuera una amenaza externa. Más bien, el desafío está en &lt;strong&gt;adaptar nuestras prácticas, fomentar un uso ético y repensar lo que significa aprender en esta nueva realidad&lt;/strong&gt;.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;El peligro surge cuando las usamos como sustituto del pensamiento crítico, no como complemento. Nistal. (2025)&lt;/p&gt;
&lt;/blockquote&gt;




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

&lt;p&gt;Nistal. (2025). &lt;em&gt;¿La IA nos hace peores desarrolladores?&lt;/em&gt; Recuperado de &lt;a href="https://nikeyes.github.io/la-ia-nos-hace-peores-desarrolladores/" rel="noopener noreferrer"&gt;https://nikeyes.github.io/la-ia-nos-hace-peores-desarrolladores/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Agustín Gómez Meléndez (2025). &lt;em&gt;De la conectividad pionera al liderazgo en IA: la UCR ante su desafío centenario&lt;/em&gt;. Semanario Universidad. Recuperado de &lt;a href="https://semanariouniversidad.com/opinion/de-la-conectividad-pionera-al-liderazgo-en-ia-la-ucr-ante-su-desafio-centenario/" rel="noopener noreferrer"&gt;https://semanariouniversidad.com/opinion/de-la-conectividad-pionera-al-liderazgo-en-ia-la-ucr-ante-su-desafio-centenario/&lt;/a&gt;  &lt;/p&gt;

</description>
      <category>ai</category>
      <category>education</category>
    </item>
    <item>
      <title>Introducción al DevOps</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Thu, 26 Jun 2025 02:03:55 +0000</pubDate>
      <link>https://dev.to/erickvasm/devops-4na</link>
      <guid>https://dev.to/erickvasm/devops-4na</guid>
      <description>&lt;h2&gt;
  
  
  El inicio
&lt;/h2&gt;

&lt;p&gt;La tecnología avanza exponencialmente y eso hace que nuevos y cada vez más complejos problemas aparezcan, por lo que la humanidad necesita inventar nuevas maneras de trabajar para así llegar a una solución, de una manera más rápida y eficiente. De manera general DevOps surgió así. Como una metodología para el desarrollo de software de una manera automatizada y más eficiente y a su vez produciendo productos de calidad, confianza y sobre todo que genere satisfacción al usuario.&lt;/p&gt;

&lt;p&gt;Se dice que los antecedentes de DevOps se remonta al 2008, cuando en una convención de agilismo informal un Belga presentó este concepto de unificar roles y departamentos en el desarrollo de software, no obstante la idea no fue bautizada con el nombre que conocemos hoy en día (DevOps), posteriormente el término se popularizó en 2009, esto gracias a los "DevOps days" (Conferencias comunitarias mundiales para las mejores del TI) celebrado en Gante Bélgica y consecuentemente se expandió por el resto del mundo. (Cristina, 2015)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jyzcynd0h3sbw0vz0we.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0jyzcynd0h3sbw0vz0we.png" alt="Devops day bogota" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ¿Qué es DevOps y por qué es tan importante para las empresas tecnológicas actualmente?
&lt;/h2&gt;

&lt;p&gt;DevOps es un término en inglés de la unión de dos palabras, las cuales son: development, el cual es un desarrollador de software o bien un programador y operations, consiste en el profesional operacional de TI. &lt;/p&gt;

&lt;p&gt;Partiendo desde este punto, se podrá comprender de mejor manera este concepto. DevOps no es una cultura, ni una tecnología o una persona en sí. DevOps es un método que ayuda agilizar y unificar los procesos de desarrollo de un software, facilita la comunicación y colaboración entre los departamentos de la empresa. Este método necesita un cambio importante en la cultura de la comunicación y filosofía de la organización para poder ser implementado.&lt;/p&gt;

&lt;p&gt;Se cree que DevOps es una profesión o una ingeniería de informática, así lo explica el ingeniero José Ruiz Cristina:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Así que no, DevOps no es una profesión, y estrictamente no existen ni perfiles DevOps ni ingenieros DevOps, sino 'ingenieros de sistemas con capacidades específicas para integrarse en equipos DevOps'".&lt;br&gt;
(Cristina, 2015)&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  ¿En qué consiste DevOps?
&lt;/h2&gt;

&lt;p&gt;¿En qué consisten las distintas fases, procedimientos que posibilitan el correcto funcionamiento de esta metodología en cierta entidad?&lt;/p&gt;

&lt;p&gt;El término DevOps se fundamenta principalmente en seis fases (gestión y planificación, desarrollo, integración continua, despliegue automatizado, operaciones y monitorización), las cuales a través de este contenido se justifica y detalla las funciones y la relevancia de cada una.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhv6573msnks6onvixdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhv6573msnks6onvixdy.png" alt="Fases devops" width="326" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Fase de Gestión y Planificación
&lt;/h3&gt;

&lt;p&gt;Esta primera fase es una de las más críticas y de mayor importancia por el hecho de que se elabora una proyección procedimental para el nuevo proyecto, es decir, un plan de acción para los involucrados en dicho. El establecimiento de metas u objetivos para cada fase del proyecto representa una gran influencia en las fases de desarrollo y operaciones (Juan, 2018).&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Fase de Desarrollo
&lt;/h3&gt;

&lt;p&gt;Es la parte en la cual sucederá el diseño del código y de la infraestructura, así como también la automatización de ciertos procesos y realización de diversas pruebas. Cabe destacar que cada contribución hecha en este proceso deberá incorporar herramientas o mecanismos con los cuales se pueda asegurar o comprobar que se cumple con los requerimientos y que, además de su correcto funcionamiento, no afecte las demás partes. Esto con el fin de identificar posibles futuros fallos (Juan, 2018).&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fase de Integración Continua
&lt;/h3&gt;

&lt;p&gt;La finalidad de este proceso radica en que las contribuciones singulares realizadas en la anterior fase, con sus respectivos mecanismos de veracidad, se integren con el resto de la aplicación. En palabras generales, se puede definir como un proceso de revisión general de las contribuciones realizadas, de manera que si sucede algún inconveniente o desarmonía entre las características contribuidas, se puedan identificar de una forma más temprana (Juan, 2018).&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Fase de Despliegue Automatizado
&lt;/h3&gt;

&lt;p&gt;Entre más pasos tenga el proceso de despliegue, existe una mayor posibilidad de que tengan lugar fallos humanos. Por lo cual la metodología DevOps integra el concepto de "Despliegue Automatizado". Esto indica que se realizará una automatización de los despliegues mediante el uso de herramientas en las distintas áreas del trabajo (Juan, 2018).&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Fase de Operaciones
&lt;/h3&gt;

&lt;p&gt;En esta fase se tendrá en cuenta las operaciones que poseen conexión con el funcionamiento del software a lo largo de su vida operacional. De manera que se realicen ajustes a dicho considerando ciertas propiedades tales como rendimiento, disponibilidad y seguridad, basándose en el contexto (Juan, 2018).&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Fase de Monitorización
&lt;/h3&gt;

&lt;p&gt;La última etapa de la metodología DevOps. Lo que implica dicha fase es realizar un seguimiento del estado de las aplicaciones. Basado en su desarrollo en el contexto, se podrá ir ajustando o modificando ciertas características y, además, anticipar necesidades y riesgos (Juan, 2018).&lt;/p&gt;




&lt;h2&gt;
  
  
  Cómo se aplica en las empresas
&lt;/h2&gt;

&lt;p&gt;Hoy en día las empresas tecnológicas actuales utilizan el método de organización y comunicación DevOps; son imprescindibles para una mayor eficiencia en los procesos de programar o crear un nuevo software. Por esta razón, se desea saber cómo se aplica esta metodología en las empresas actuales.&lt;/p&gt;

&lt;p&gt;Se aplica de una manera que se busque despertar la cultura del desarrollo con el fin de aplicar la automatización y las metodologías necesarias para liberar tiempo de los desarrolladores de la empresa. De esta manera, se centra el trabajo en tareas mucho más importantes y esto garantiza el desarrollo del software de manera más segura y de mayor calidad.&lt;/p&gt;

&lt;p&gt;Sisternas nos dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Los equipos se tienen que acercar de forma real, de forma que se establezca una colaboración continua entre los técnicos de desarrollo y los de operaciones".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;De esta manera hace que todo esté más unido, que se unifiquen los procesos, compartir herramientas diferentes departamentos.&lt;/p&gt;

&lt;p&gt;Igualmente hay que tener en cuenta que hay que buscar lo mejor para las empresas, cómo mejorar la eficiencia, como nos dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Se reducen los tiempos que tardamos en culminar el proyecto, lo que también supone cierto ahorro económico".&lt;br&gt;
(Sisternas, 2019)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Dando referencia a que los diferentes departamentos de trabajo tienen una cierta competitividad, pero no de mala manera, sino demostrar quiénes son mejores. Esto trae como beneficio a la empresa que no van a estar mostrando proyectos o diferentes asignaciones simples; más bien van a tratar de diseñar-crear lo mejor.&lt;/p&gt;

&lt;p&gt;Aunado a ello, también está la parte grupal, que como nos dice:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Aumenta y mejora la comunicación entre equipos, algo que solo puede tener consecuencias positivas".&lt;br&gt;
(Sisternas, 2019)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ya que no solo se trata de ver quién es mejor, sino de promover el trabajo en equipo, como anteriormente se había hablado en las ventajas de DevOps.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Cristina, J. R. (26 de noviembre de 2015). Paradigma Digital. Obtenido de &lt;a href="https://www.paradigmadigital.com/techbiz/que-es-devops-y-sobre-todo-que-no-es-devops/" rel="noopener noreferrer"&gt;https://www.paradigmadigital.com/techbiz/que-es-devops-y-sobre-todo-que-no-es-devops/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;APLICANDO DEVOPS EN EMPRESAS. (11 de Enero de 2020). Recuperado de: &lt;a href="https://zemsaniaglobalgroup.com/ventajas-de-aplicar-devops-en-las-empresas/" rel="noopener noreferrer"&gt;https://zemsaniaglobalgroup.com/ventajas-de-aplicar-devops-en-las-empresas/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sisternas P. (30 de Mayo de 2019). ¿Qué es y cómo se aplica DevOps?. Obtenido de &lt;a href="https://www.emprendepyme.net/que-es-y-como-se-aplica-devops.html" rel="noopener noreferrer"&gt;https://www.emprendepyme.net/que-es-y-como-se-aplica-devops.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Juan, Q. (21 de Junio de 2018). El ciclo de DevOps, una guía para iniciarse en las fases que lo componen. Obtenido de GENBETA: &lt;a href="https://www.genbeta.com/desarrollo/el-ciclo-de-devops-una-guia-para-iniciarse-en-las-fases-que-lo-componen" rel="noopener noreferrer"&gt;https://www.genbeta.com/desarrollo/el-ciclo-de-devops-una-guia-para-iniciarse-en-las-fases-que-lo-componen&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Microsoft azure (2020). ¿Qué es DevOps? Seattle, EU: Microsoft. Recuperado de: &lt;a href="https://azure.microsoft.com/es-es/overview/what-is-devops/" rel="noopener noreferrer"&gt;https://azure.microsoft.com/es-es/overview/what-is-devops/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devops</category>
    </item>
    <item>
      <title>Business Intelligence</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Wed, 28 May 2025 02:32:27 +0000</pubDate>
      <link>https://dev.to/erickvasm/business-intelligence-2906</link>
      <guid>https://dev.to/erickvasm/business-intelligence-2906</guid>
      <description>&lt;h2&gt;
  
  
  Introducción
&lt;/h2&gt;

&lt;p&gt;En los últimos años, la &lt;strong&gt;Inteligencia Empresarial (BI)&lt;/strong&gt;&lt;sup id="fnref1"&gt;1&lt;/sup&gt; se ha consolidado como herramienta estratégica fundamental para las organizaciones en entornos tecnológicamente dinámicos. &lt;/p&gt;

&lt;p&gt;Como señala Hitachi Solutions Canada (2014) en su material audiovisual &lt;em&gt;"What is Business Intelligence?"&lt;/em&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"La inteligencia empresarial consiste en entregar información relevante y confiable a las personas adecuadas en el momento oportuno, con el objetivo de facilitar la toma de decisiones ágil y acertada. Esto requiere métodos y programas que seleccionan, estructuran y transforman datos en información accionable para mejorar los resultados del negocio."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Orígenes y Evolución Histórica
&lt;/h2&gt;

&lt;p&gt;El concepto de inteligencia empresarial ha experimentado una notable evolución, adaptándose a los avances tecnológicos mientras mantiene su esencia fundamental.&lt;/p&gt;

&lt;p&gt;El primer registro documentado del término se remonta a 1865 en la &lt;em&gt;Cyclopaedia of Commercial and Business Anecdotes&lt;/em&gt; de Richard Miller Devens (Lago, 2018). El autor describe cómo el banquero Sir Henry Furnese superó a su competencia mediante la recopilación, análisis y aplicación estratégica de información relevante para la toma de decisiones empresariales.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aspectos Tecnológicos Clave
&lt;/h2&gt;

&lt;p&gt;Los componentes tecnológicos más relevantes en BI incluyen:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Gestión del Rendimiento Empresarial (BPM)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análisis Predictivo y Prescriptivo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minería de Datos y Texto&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Gestión del Rendimiento Empresarial (BPM)
&lt;/h3&gt;

&lt;p&gt;La BPM es una especialidad de BI enfocada en metodologías para evaluar y mejorar el desempeño organizacional, frecuentemente asociada a Recursos Humanos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Herramientas destacadas:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Oracle EPM&lt;/em&gt;: Solución integral para planificación financiera y automatización de procesos (Medina, 2020)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Balanced Scorecard&lt;/em&gt;: Metodología de gestión estratégica multicriterio (Pérez, 2019)&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;"La integración entre software especializado y BPM permite maximizar la productividad, reducir costos y optimizar los tiempos de trabajo." (Medina, 2020)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  2. Análisis Predictivo y Prescriptivo
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Predictivo&lt;/strong&gt;: Utiliza datos históricos para proyectar futuros escenarios&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prescriptivo&lt;/strong&gt;: Proporciona recomendaciones accionables basadas en análisis&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;"Los modelos predictivos permiten tomar decisiones más precisas con menor costo. Aunque inicialmente adoptados por bancos, hoy tienen aplicaciones transversales" (Kio Networks, 2020)&lt;/p&gt;

&lt;p&gt;"El análisis prescriptivo ofrece 'recetas' accionables, requiriendo capacidad de respuesta ágil a los datos para impactar positivamente los resultados" (IT User, 2019)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Minería de Datos y Texto
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Característica&lt;/th&gt;
&lt;th&gt;Minería de Datos&lt;/th&gt;
&lt;th&gt;Minería de Texto&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enfoque&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cuantitativo&lt;/td&gt;
&lt;td&gt;Cualitativo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Aplicaciones&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predicciones, riesgos, clustering&lt;/td&gt;
&lt;td&gt;Análisis de sentimientos, reconocimiento de entidades&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Estructura&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Datos organizados&lt;/td&gt;
&lt;td&gt;Texto no estructurado&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;"La minería de datos permite extraer conclusiones valiosas para mejorar ventas y fidelización" (Ribas, 2018)&lt;/li&gt;
&lt;li&gt;"La minería de texto acelera la extracción de conocimiento de documentos, optimizando tiempo y recursos" (Universo Abierto, 2018)&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;La inteligencia empresarial sigue evolucionando, pero su objetivo central permanece: transformar datos en conocimiento accionable. La implementación estratégica de estas tecnologías diferencia a las organizaciones competitivas en la era digital.&lt;/p&gt;

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

&lt;p&gt;[2]: Lago, C. (2018). &lt;em&gt;Historia del Business Intelligence&lt;/em&gt;. Revista Tecnológica.&lt;br&gt;&lt;br&gt;
[3]: Medina, A. (2020). &lt;em&gt;Oracle EPM: Planificación Empresarial Integral&lt;/em&gt;. Blog TI.&lt;br&gt;&lt;br&gt;
[4]: Pérez, R. (2019). &lt;em&gt;Balanced Scorecard en la Gestión Moderna&lt;/em&gt;. Harvard Business Review.&lt;br&gt;&lt;br&gt;
[5]: Kio Networks. (2020). &lt;em&gt;Análisis Predictivo: Más Allá de los Datos&lt;/em&gt;. Whitepaper.  &lt;/p&gt;




&lt;ol&gt;

&lt;li id="fn1"&gt;
&lt;p&gt;Hitachi Solutions Canada. (2014). &lt;em&gt;What is Business Intelligence?&lt;/em&gt; [Video]. YouTube.   ↩&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Complejidad de un algoritmo</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sat, 26 Apr 2025 18:07:56 +0000</pubDate>
      <link>https://dev.to/erickvasm/complejidad-de-un-algoritmo-4ma6</link>
      <guid>https://dev.to/erickvasm/complejidad-de-un-algoritmo-4ma6</guid>
      <description>&lt;p&gt;Cuando empiezas a estudiar algoritmos, una de las primeras cosas que te encuentras es la notación &lt;strong&gt;Big-O&lt;/strong&gt;: O(n), O(log n), O(n^2)...&lt;/p&gt;

&lt;p&gt;Al inicio puede parecer algo abstracto o complicado, pero con la práctica, será fácil de entender. En este post explicaré &lt;strong&gt;qué es la complejidad algorítmica&lt;/strong&gt;, &lt;strong&gt;cómo se calcula&lt;/strong&gt;. &lt;/p&gt;




&lt;h3&gt;
  
  
  1. ¿Qué es la complejidad algorítmica?
&lt;/h3&gt;

&lt;p&gt;Es una forma de &lt;strong&gt;medir qué tan eficiente es un algoritmo&lt;/strong&gt;, tanto en &lt;strong&gt;tiempo&lt;/strong&gt; (cuánto tarda) como en &lt;strong&gt;espacio&lt;/strong&gt; (cuánta memoria usa), dependiendo del &lt;strong&gt;tamaño de la entrada&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Usamos notaciones como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;O(1)&lt;/strong&gt;: constante&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O(n)&lt;/strong&gt;: lineal&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O(log n)&lt;/strong&gt;: logarítmica&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O(n^2)&lt;/strong&gt;: cuadrática&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;O(2^n)&lt;/strong&gt;: exponencial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No se mide en segundos ni en kilobytes exactos, sino en cómo &lt;strong&gt;crece el tiempo/memoria a medida que crece el problema&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. La famosa "O" y el logaritmo
&lt;/h3&gt;

&lt;h4&gt;
  
  
  ▶ ¿Qué significa la O en O(n)?
&lt;/h4&gt;

&lt;p&gt;Es una forma de decir "el orden de crecimiento". Nos enfocamos en el &lt;strong&gt;peor caso&lt;/strong&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  ▶ ¿Y qué es log(n)?
&lt;/h4&gt;

&lt;p&gt;Es el &lt;strong&gt;logaritmo en base 2&lt;/strong&gt;. Se usa cuando un algoritmo &lt;strong&gt;divide en partes&lt;/strong&gt;, como la búsqueda binaria.&lt;/p&gt;

&lt;p&gt;Ejemplo: log₂(16) = 4, porque:&lt;/p&gt;

&lt;p&gt;16 → 8 → 4 → 2 → 1 (4 pasos)&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Tabla de complejidades comunes
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Complejidad&lt;/th&gt;
&lt;th&gt;Nombre&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;Constante&lt;/td&gt;
&lt;td&gt;&lt;code&gt;arr[0]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(log n)&lt;/td&gt;
&lt;td&gt;Logarítmica&lt;/td&gt;
&lt;td&gt;Búsqueda binaria&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;Lineal&lt;/td&gt;
&lt;td&gt;Recorrer un arreglo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n log n)&lt;/td&gt;
&lt;td&gt;Lineal logarítmica&lt;/td&gt;
&lt;td&gt;Merge Sort&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n^2)&lt;/td&gt;
&lt;td&gt;Cuadrática&lt;/td&gt;
&lt;td&gt;Bucles anidados&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(2^n)&lt;/td&gt;
&lt;td&gt;Exponencial&lt;/td&gt;
&lt;td&gt;Recursión sin control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n!)&lt;/td&gt;
&lt;td&gt;Factorial&lt;/td&gt;
&lt;td&gt;Permutaciones completas&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73q4p8meb6v4310elcwf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F73q4p8meb6v4310elcwf.jpeg" alt="Cheat" width="799" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[Referencia]: &lt;a href="https://www.scribd.com/document/510753315/Big-O-Algorithm-Complexity-Cheat-Sheet-Know-Thy-Complexities" rel="noopener noreferrer"&gt;https://www.scribd.com/document/510753315/Big-O-Algorithm-Complexity-Cheat-Sheet-Know-Thy-Complexities&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  4. Ejemplos paso a paso en Java
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="c1"&gt;// O(1)&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;obtenerPrimero&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;arr&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="c1"&gt;// Siempre es una sola operación&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="err"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// O(n): recorrer arreglo&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// O(log n): búsqueda binaria&lt;/span&gt;
&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;izq&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;der&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;izq&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="n"&gt;der&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;mid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;izq&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;der&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="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mid&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nf"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mid&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="n"&gt;izq&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mid&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="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;der&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mid&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="err"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;// O(n log n): Usando Arrays.sort &lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;ordenar&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;Arrays&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; 
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// O(n²) — Cuadrática&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;compararTodos&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&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;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;" vs "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// O(n!) — Factorial&lt;/span&gt;
&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;permutar&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&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="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resultado&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;
        &lt;span class="n"&gt;permutar&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&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;i&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;substring&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="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt; &lt;span class="n"&gt;resultado&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;charAt&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="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5. Regla para combinar complejidades
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Si están uno tras otro → se suman: O(n + n) = O(2n) → O(n)&lt;/li&gt;
&lt;li&gt;Si están anidados → se multiplican: O(n * n) = O(n^2)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ▶ Caso 1: operaciones &lt;strong&gt;una tras otra&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(...)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(...)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;  &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ O(n + n) = O(2n) = &lt;strong&gt;O(n)&lt;/strong&gt;  (constantes se ignoran)&lt;/p&gt;

&lt;h4&gt;
  
  
  ▶ Caso 2: operaciones &lt;strong&gt;anidadas&lt;/strong&gt;
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(...)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(...)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="o"&gt;...&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;→ O(n * n) = &lt;strong&gt;O(n^2)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Esto &lt;strong&gt;funciona para cualquier tipo de complejidad&lt;/strong&gt;: lineal, logarítmica, exponencial, etc.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Veamos ejemplos:
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Regla 1: Si las operaciones están una tras otra → se SUMAN
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;procesar&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Primera parte&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="o"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// Segunda parte&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="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="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;▶ Análisis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primer for: O(n)&lt;/li&gt;
&lt;li&gt;Segundo for: O(n)&lt;/li&gt;
&lt;li&gt;Total: O(n) + O(n) = O(2n)
▶ Pero en Big-O se eliminan constantes → O(2n) = O(n)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;▶ Otro ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;procesoMixto&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Inicio"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// O(1)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
        &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="o"&gt;}&lt;/span&gt;
    &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Fin"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// O(1)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Total: O(1) + O(n) + O(1) = O(n + 2) → O(n)&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Regla 2: Si las operaciones están anidadas → se MULTIPLICAN
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;compararTodos&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;        &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&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;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;    &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
            &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;arr&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="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;","&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;▶ Análisis:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El for interno se ejecuta n veces por cada iteración del externo.&lt;/li&gt;
&lt;li&gt;Total: O(n) * O(n) = O(n²)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;▶ Otro ejemplo anidado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;tripleBucles&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&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="o"&gt;{&lt;/span&gt;        &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&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;j&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;    &lt;span class="c1"&gt;// O(n)&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;k&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;k&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="c1"&gt;// O(n)&lt;/span&gt;
                &lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&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;j&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Total: O(n * n * n) = O(n³)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;▶ Otro ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kt"&gt;void&lt;/span&gt; &lt;span class="nf"&gt;algoritmoRamdon&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt;&lt;span class="o"&gt;[]&lt;/span&gt; &lt;span class="n"&gt;arr&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="kt"&gt;int&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;arr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;i&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;i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&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;i&lt;/span&gt;&lt;span class="o"&gt;++)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;            
        &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;j&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="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;                      
            &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;j&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="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
        &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;▶ Paso a paso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;El bucle externo (for) corre n veces: desde i = 0 hasta i = n-1 → O(n)&lt;/li&gt;
&lt;li&gt;Dentro de ese bucle, hay otro bucle (while) que divide j entre 2 en cada paso, es decir:
Para un valor i, el while hace:
i → i/2 → i/4 → ... → 1 → 0
Esto se ejecuta log₂(i) veces (porque estás dividiendo entre 2 hasta llegar a 0).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;▶ ¿Entonces cuánto tarda en total?&lt;br&gt;
Cada iteración del for hace log i pasos → debemos sumar eso para todos los i:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszcmerplunv98aqcegph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszcmerplunv98aqcegph.png" alt="Resultado final" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;▶ Resultado final: O(n log n)&lt;/p&gt;




&lt;h3&gt;
  
  
  7. Complejidad espacial (uso de memoria)
&lt;/h3&gt;

&lt;p&gt;No se mide en KB exactos, sino en &lt;strong&gt;proporción al tamaño de la entrada&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Notación&lt;/th&gt;
&lt;th&gt;Significado&lt;/th&gt;
&lt;th&gt;Ejemplo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;O(1)&lt;/td&gt;
&lt;td&gt;Memoria constante&lt;/td&gt;
&lt;td&gt;Solo variables simples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n)&lt;/td&gt;
&lt;td&gt;Memoria lineal&lt;/td&gt;
&lt;td&gt;Copiar arreglo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O(n^2)&lt;/td&gt;
&lt;td&gt;Memoria cuadrática&lt;/td&gt;
&lt;td&gt;Matriz &lt;code&gt;n x n&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h3&gt;
  
  
  8. Preguntas frecuentes que también tuve:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;¿Por qué se ignoran las constantes? Porque no afectan el crecimiento para &lt;code&gt;n&lt;/code&gt; grande.&lt;/li&gt;
&lt;li&gt;¿Y si hago tres bucles separados? Se &lt;strong&gt;suman&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;¿Y si hago uno dentro de otro? Se &lt;strong&gt;multiplican&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;¿Puedo sumar O(log n) + O(n)? Sí, pero el mayor gana: O(n + log n) = &lt;strong&gt;O(n)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




</description>
      <category>programming</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Herramientas que recomiendo para Developers</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sat, 19 Apr 2025 19:01:39 +0000</pubDate>
      <link>https://dev.to/erickvasm/herramientas-que-recomiendo-para-developers-1282</link>
      <guid>https://dev.to/erickvasm/herramientas-que-recomiendo-para-developers-1282</guid>
      <description>&lt;p&gt;Después de probar varias opciones, estas son las que se han quedado en mi día a día. También quiero aclarar que soy fan de lo minimalista. Entre menos distracción tenga un programa, mucho mejor para mí:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Editor de código&lt;/strong&gt;: WebStorm o IntelliJ. Son pesados, pero potentes. VSCode y Neovim los tengo de apoyo, aunque hoy en día prefiero los IDEs antes que los editores de códigos. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Una mencion especial a &lt;a href="https://zed.dev" rel="noopener noreferrer"&gt;Zed editor&lt;/a&gt;: me gusta su interfaz minimalista y su excelente integración con Vim. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Mis configs:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;InteliJ / WebStorm&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowc48hzrvabc31dea3c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fowc48hzrvabc31dea3c0.png" alt="InteliJ" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;VSCode&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh86kqsm9tu3686m9prm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh86kqsm9tu3686m9prm8.png" alt="VSCode" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Neovim&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmty6smyishohwv1jh283.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmty6smyishohwv1jh283.png" alt="Nvim1" width="800" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8xeds0wkcb97ydd6ycc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj8xeds0wkcb97ydd6ycc.png" alt="Nvim2" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Terminal:&lt;/strong&gt; iTerm2, simple, pero con todo lo que necesito. Me gusta tenerlo en modo compacto. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybxzm619zlaz7uuq5gvu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fybxzm619zlaz7uuq5gvu.png" alt="Iterm2" width="800" height="592"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Docker Desktop:&lt;/strong&gt; OrbStack. Más ligero que el Docker oficial y vuela.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9uso5qljjlk2kozlp84.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj9uso5qljjlk2kozlp84.png" alt="OrbStack" width="800" height="599"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Gestión de BD:&lt;/strong&gt; Si le gusta lo minimalista, definitivamente tienen que probar Dataflare, me encanta su interfaz limpia y sencilla. O directamente desde el BD Manager de WebStorm.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dataflare&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrngtiehiquf97tx4f66.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzrngtiehiquf97tx4f66.png" alt="Dataflare" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BD integrado en InteliJ / WebStorm&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqulenxbk8g3iuxzlwqit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqulenxbk8g3iuxzlwqit.png" alt="BD integrado en InteliJ / WebStorm" width="800" height="1238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. HTTP requests:&lt;/strong&gt; Uso httpie (según si prefiero CLI o UI ese día), pero también me es util para documentar request usar el HTTP Client de IntelliJ.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;httpie Interfaz&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eha6y0v6xyrmehqhaac.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5eha6y0v6xyrmehqhaac.png" alt="httpie Interfaz" width="800" height="546"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;httpie CLI&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqvl9n4tk1g46gsjuzzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqvl9n4tk1g46gsjuzzj.png" alt="CLI" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Documentación:&lt;/strong&gt; Markdown + Mermaid, todo guardado en una carpeta &lt;code&gt;/docs&lt;/code&gt; dentro del repo. Al tenerlo en .md, me es fácil poder pasarlo a cualquier editor de documentos que normalmente soportan markdown, como Google Docs, MS Word o Pages. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Navegador:&lt;/strong&gt; Safari para lo personal, Chrome cuando necesito herramientas de desarrollo.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Mencion especial a &lt;a href="https://zen-browser.app" rel="noopener noreferrer"&gt;Zen browser&lt;/a&gt;. Minimalista y similar a Arc Browser, pero basado en Firefox.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Espero que les haya funcionado alguna herramienta y cualquier duda, puede ponerlo en los comentarios :)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Aclaración: hay imagenes que tapo información por seguridad, aunque realmente los datos y codigos mostrados, son solo de práctica y sin un uso real.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>programming</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Introducción al PCA</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sun, 13 Apr 2025 16:46:40 +0000</pubDate>
      <link>https://dev.to/erickvasm/introduccion-al-pca-4k65</link>
      <guid>https://dev.to/erickvasm/introduccion-al-pca-4k65</guid>
      <description>&lt;p&gt;En la actualidad, los datos son uno de los recursos más valiosos. Nos ayudan a encontrar patrones, tomar decisiones e incluso predecir el futuro. Pero, como hay tantos datos, analizarlos uno por uno no es práctico. &lt;/p&gt;

&lt;p&gt;Con PCA, podemos representar la información de muchas variables en solo unas pocas que siguen siendo útiles y representativas.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es el análisis de componentes principales?
&lt;/h2&gt;

&lt;p&gt;El análisis de componentes principales (PCA, por sus siglas en inglés: Principal Components Analysis) es una técnica que reduce la cantidad de variables sin perder demasiada información. Se puede entender desde tres enfoques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enfoque descriptivo&lt;/strong&gt;: consiste en trazar una línea que atraviesa los puntos de los datos de forma que estén lo más cerca posible de esa línea. Así, se puede observar una dirección general de los datos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhk0lfo8c3czw0e9tuxj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhk0lfo8c3czw0e9tuxj.png" alt="Enfoque descriptivo" width="639" height="600"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fuente: &lt;a href="https://cutt.ly/AmJ3I9M" rel="noopener noreferrer"&gt;https://cutt.ly/AmJ3I9M&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enfoque estadístico&lt;/strong&gt;: busca transformar muchas variables en unas pocas, tratando de que estas nuevas variables tengan la mayor variación posible.
&amp;gt; La varianza es una medida que indica qué tanto varían los valores respecto a su promedio.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este enfoque se explica más adelante en la sección Enfoque estadístico.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enfoque geométrico&lt;/strong&gt;: representa visualmente los datos en gráficas, proyectándolos en planos en 2D o 3D para observar sus relaciones.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50xwwwmwueoazbhlkmn0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50xwwwmwueoazbhlkmn0.png" alt="Enfoque geométrico" width="507" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El propósito del PCA es obtener nuevas variables que resuman la información de muchas originales. Se parte de tener &lt;strong&gt;p variables&lt;/strong&gt; medidas en &lt;strong&gt;n elementos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esto se organiza en una matriz &lt;em&gt;X&lt;/em&gt; de tamaño &lt;em&gt;n x p&lt;/em&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;X = | p-variables₁₁  p-variables₁₂  ...  p-variables₁n |
    | n-elementos₂₁ n-elementos₂₂ ...  n-elementos₂n |
    |     ⋮              ⋮          ⋱         ⋮       |
    | n-elementosₙ₁ n-elementosₙ₂ ...  n-elementosₙn |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El objetivo es reducir estas &lt;em&gt;p&lt;/em&gt; columnas a un número menor, digamos &lt;em&gt;r&lt;/em&gt;, donde &lt;strong&gt;r &amp;lt; p&lt;/strong&gt;, y aun así conservar la mayoría de la información.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Por ejemplo: si tienes una tabla con 5 columnas, el PCA puede convertirla en una tabla de solo 2 columnas que sigan representando la mayoría de los datos originales.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ¿Cómo surge el PCA?
&lt;/h2&gt;

&lt;p&gt;Es difícil identificar un único origen del PCA, ya que distintos científicos trabajaron en ideas similares. En general, se buscaba encontrar líneas o planos que representaran bien los datos.&lt;/p&gt;

&lt;p&gt;Karl Pearson propuso métodos que, con la ayuda de la computación moderna, ahora se pueden aplicar fácilmente.&lt;/p&gt;

&lt;p&gt;Según Sánchez, los cuatro trabajos más importantes en los inicios del PCA fueron:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Anderson&lt;/strong&gt;: muy teórico, analiza muestras de componentes principales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rao&lt;/strong&gt;: aporta ideas sobre cómo interpretar y usar el PCA.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gower&lt;/strong&gt;: trabaja con combinaciones del PCA y otras técnicas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Jeffers&lt;/strong&gt;: compara resultados en casos prácticos.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El PCA es versátil porque no necesita saber para qué se usarán los datos, lo que lo hace útil en muchos campos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enfoque estadístico
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Según Castillo González, se pueden representar puntos de muchas dimensiones usando menos variables, siempre que se mantenga la mayoría de la información original.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto se logra al encontrar nuevas variables (componentes) con la mayor varianza posible y que no estén relacionadas entre sí (no correlacionadas).&lt;/p&gt;

&lt;h2&gt;
  
  
  Planos principales
&lt;/h2&gt;

&lt;p&gt;Cuando trabajamos con muchos datos, a veces queremos &lt;strong&gt;verlos en un gráfico&lt;/strong&gt; para entender mejor cómo se agrupan o se diferencian.&lt;/p&gt;

&lt;p&gt;Por ejemplo, si tenemos las calificaciones de varios estudiantes en distintas materias, el PCA nos permite &lt;strong&gt;dibujar un plano&lt;/strong&gt;, donde cada estudiante aparece como un punto, según sus resultados.&lt;/p&gt;

&lt;p&gt;Ese gráfico se llama &lt;strong&gt;plano principal&lt;/strong&gt; y muestra la posición de cada individuo (persona, producto, etc.) según dos nuevas variables que el PCA calcula: &lt;strong&gt;las componentes principales&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cada punto en ese plano tiene dos coordenadas, como si fuera un punto en el plano cartesiano:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(c_{i}^{1}, c_{i}^{2})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;( c_i^1 )&lt;/strong&gt; es la posición del individuo ( i ) en la primera componente principal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;( c_i^2 )&lt;/strong&gt; es su posición en la segunda componente principal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Estas coordenadas se calculan con fórmulas sencillas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;c_{i}^{1} = x_i^T u_1  
c_{i}^{2} = x_i^T u_2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;( x_i ): es el vector de datos del individuo ( i ) (por ejemplo, las notas de Pedro en varias materias).&lt;/li&gt;
&lt;li&gt;( x_i^T ): es la &lt;strong&gt;transpuesta&lt;/strong&gt; de ese vector (simplemente lo giramos para que se pueda multiplicar).&lt;/li&gt;
&lt;li&gt;( u_1 ) y ( u_2 ): son los vectores de dirección de las &lt;strong&gt;primeras dos componentes principales&lt;/strong&gt;. Se calculan en el proceso del PCA.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Antes de hacer estos cálculos, los datos deben estar &lt;strong&gt;centrados y estandarizados&lt;/strong&gt;, es decir, restando la media y dividiendo entre la desviación estándar. Esto asegura que todas las variables tengan la misma importancia.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tenemos las notas de Pedro y Sonia. Después de aplicar PCA, obtenemos las siguientes coordenadas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pedro&lt;/strong&gt; → (0.67, 1.64)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sonia&lt;/strong&gt; → (3.04, 1.25)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eso significa que Pedro y Sonia aparecen como puntos en un gráfico, en posiciones diferentes según su rendimiento.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1aauyufvglvblkjlmf0r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1aauyufvglvblkjlmf0r.png" alt="Primer plano principal" width="508" height="373"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Imagen 1: Primer plano principal para la tabla de notas escolares&lt;br&gt;&lt;br&gt;
[&lt;em&gt;Fuente: Análisis Multivariado de Datos, Métodos y Aplicaciones&lt;/em&gt;]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Círculos de correlaciones (versión sencilla con fórmula)
&lt;/h2&gt;

&lt;p&gt;Una vez que tenemos el plano principal, también podemos ver &lt;strong&gt;cómo se relacionan las variables originales&lt;/strong&gt; (por ejemplo, matemáticas, español, ciencias) con las nuevas componentes calculadas por el PCA.&lt;/p&gt;

&lt;p&gt;Cada variable original ( x^j ) tiene una "posición" en relación con una componente principal ( c^k ). Esa posición se calcula con:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;r(x^j, c^k)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto es simplemente la &lt;strong&gt;correlación&lt;/strong&gt; entre la variable original y la componente principal. Nos dice qué tanto esa variable está alineada con esa dirección principal de los datos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
En el caso de las calificaciones, podríamos tener una tabla como esta:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcx31k41b1c0agng30xka.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcx31k41b1c0agng30xka.png" alt="tabla de correlaciones" width="396" height="162"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Imagen 2: Correlaciones entre materias y componentes principales&lt;br&gt;&lt;br&gt;
[&lt;em&gt;Fuente: Análisis Multivariado de Datos, Métodos y Aplicaciones&lt;/em&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esta tabla se puede convertir en un gráfico de círculo, donde las materias se ubican como flechas. Así podemos ver cuáles materias están relacionadas entre sí y cuáles influyen más en la forma del gráfico.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interpretación de los resultados
&lt;/h2&gt;

&lt;p&gt;Una forma de entender el PCA es visualizar cómo se proyectan los datos. Imagina tener dos variables (X₁, X₂). El PCA busca la dirección donde los datos se dispersan más (componente Z₁):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzskyidxh3gutwhydyye9.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzskyidxh3gutwhydyye9.PNG" alt="Ilustración del vector Z₁" width="674" height="405"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Figura: Ilustración del vector Z₁&lt;br&gt;&lt;br&gt;
[Fuente: &lt;em&gt;Análisis Multivariado de Datos, Métodos y Aplicaciones&lt;/em&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Luego, busca otra dirección (Z₂) que sea perpendicular a la anterior y también tenga mucha variación, pero sin repetir la información de Z₁:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8sj2g5xvpd7kivb8zgx.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy8sj2g5xvpd7kivb8zgx.PNG" alt="Ilustración del vector Z₂ " width="700" height="403"&gt;&lt;/a&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Figura: Ilustración del vector Z₂&lt;br&gt;&lt;br&gt;
[Fuente: &lt;em&gt;Análisis Multivariado de Datos, Métodos y Aplicaciones&lt;/em&gt;]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Interpretación de componentes
&lt;/h3&gt;

&lt;p&gt;Interpretar los resultados del PCA es clave. Aunque se necesita experiencia, algunas guías pueden ayudar a encontrar patrones importantes en los datos.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Andrés Sánchez Mangas. &lt;em&gt;Análisis de componentes principales: Versiones dispersas y robustas al ruido impulsivo&lt;/em&gt;. Proyecto Fin de Carrera, Universidad Carlos III de Madrid, 2012.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;W. Castillo, J. González, J. Trejos. &lt;em&gt;Análisis Multivariado de Datos, Métodos y Aplicaciones&lt;/em&gt;. Centro de Investigaciones en Matemáticas Pura y Aplicada, Universidad de Costa Rica, Costa Rica, 2009.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Oldemar Rodríguez Rojas. &lt;em&gt;Análisis en componentes principales&lt;/em&gt;. Universidad de Costa Rica, San José, 2009.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>pca</category>
      <category>statistic</category>
    </item>
    <item>
      <title>Métodos Numéricos en la Informática</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sat, 01 Mar 2025 22:15:25 +0000</pubDate>
      <link>https://dev.to/erickvasm/metodos-numericos-para-que-sirven-en-la-informatica-2ncp</link>
      <guid>https://dev.to/erickvasm/metodos-numericos-para-que-sirven-en-la-informatica-2ncp</guid>
      <description>&lt;p&gt;Los métodos numéricos son una serie de algoritmos matemáticos diseñados para encontrar soluciones aproximadas a problemas complejos. Se utilizan cuando las ecuaciones algebraicas tradicionales no pueden resolverse de manera sencilla. &lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Por qué son importantes los métodos numéricos en informática?
&lt;/h2&gt;

&lt;p&gt;Desde hace siglos, los matemáticos han usado métodos numéricos para resolver problemas manualmente, lo que era un proceso lento y propenso a errores. Con la llegada de las computadoras, estos métodos se automatizaron, permitiendo cálculos más rápidos y precisos.&lt;/p&gt;

&lt;p&gt;Según el profesor Alberto Angarita:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"El análisis numérico resulta ser la manera natural de resolver modelos matemáticos, tanto en matemáticas continuas como en discretas, a través de la computadora."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Esto significa que los métodos numéricos son esenciales para la informática, ya que facilitan la resolución de problemas matemáticos mediante software y hardware.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicaciones en la informática
&lt;/h2&gt;

&lt;p&gt;Los métodos numéricos se utilizan en diversas áreas de la informática, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ciencia de Datos (Data Science):&lt;/strong&gt; Para analizar grandes volúmenes de datos y aplicar algoritmos de aprendizaje automático.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Análisis de Datos (Data Analytics):&lt;/strong&gt; Para encontrar patrones y tendencias en datos financieros, médicos o de redes sociales.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bases de Datos (Database Management):&lt;/strong&gt; Para optimizar consultas y procesamiento de datos masivos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inteligencia Artificial:&lt;/strong&gt; Algoritmos de optimización numérica se usan para entrenar redes neuronales en machine learning.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simulación de Vuelo:&lt;/strong&gt; Pilotos y aerolíneas usan simulaciones basadas en ecuaciones diferenciales para entrenarse sin necesidad de poner en riesgo vidas.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modelado Financiero:&lt;/strong&gt; Se usan métodos numéricos para calcular riesgos y predicciones en mercados bursátiles.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procesamiento de Imágenes:&lt;/strong&gt; Aplicados en medicina para mejorar la calidad de imágenes de resonancia magnética o tomografías.
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Uso de Métodos Numéricos en Software
&lt;/h2&gt;

&lt;p&gt;Muchas herramientas informáticas incluyen métodos numéricos en su funcionamiento. Algunos ejemplos son:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Excel:&lt;/strong&gt; Usa interpolación y regresión numérica para análisis estadísticos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MATLAB y Python (NumPy, SciPy):&lt;/strong&gt; Permiten resolver ecuaciones diferenciales y optimizar cálculos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Motores Gráficos en Videojuegos:&lt;/strong&gt; Utilizan algoritmos numéricos para cálculos físicos, como la simulación de colisiones.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tipos de Métodos Numéricos
&lt;/h2&gt;

&lt;p&gt;Existen varios tipos de métodos numéricos según el tipo de problema que resuelven. Algunos de los más importantes son:  &lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Métodos de Interpolación y Aproximación&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Estos métodos permiten encontrar valores intermedios dentro de un conjunto de datos conocidos.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Un meteorólogo tiene registros de temperatura de una ciudad cada 3 horas. Si desea conocer la temperatura a una hora específica que no fue registrada, puede usar interpolación para estimarla con precisión.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métodos comunes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Interpolación de Lagrange
&lt;/li&gt;
&lt;li&gt;Splines cúbicos
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Métodos de Solución de Ecuaciones No Lineales&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Ayudan a encontrar raíces de ecuaciones que no tienen una solución algebraica exacta.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Supongamos que un ingeniero está diseñando una turbina y necesita calcular la velocidad óptima de rotación para maximizar la eficiencia. Muchas ecuaciones de ingeniería no tienen soluciones exactas, por lo que se usan métodos numéricos para aproximarlas.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métodos comunes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Método de Bisección
&lt;/li&gt;
&lt;li&gt;Método de Newton-Raphson &lt;/li&gt;
&lt;li&gt;Método de la Secante&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Algoritmo Secante
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv67uh91taxpekkb8lc8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv67uh91taxpekkb8lc8x.png" alt="Ejemplo de algoritmo" width="800" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;Métodos de Álgebra Lineal Numérica&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Estos métodos se utilizan para resolver sistemas de ecuaciones lineales, esenciales en simulaciones y modelos computacionales.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
En gráficos por computadora, como en videojuegos o animaciones 3D, los motores gráficos resuelven sistemas de ecuaciones lineales para calcular la iluminación de una escena en tiempo real.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métodos comunes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eliminación de Gauss
&lt;/li&gt;
&lt;li&gt;Método de Jacobi
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. &lt;strong&gt;Métodos de Integración y Diferenciación Numérica&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Permiten calcular derivadas e integrales de funciones complejas que no pueden resolverse fácilmente de manera analítica.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
En la industria automotriz, los ingenieros usan integración numérica para calcular la distancia recorrida por un vehículo basándose en mediciones de aceleración.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métodos comunes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regla del trapecio
&lt;/li&gt;
&lt;li&gt;Método de Simpson
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. &lt;strong&gt;Métodos para la Resolución de Ecuaciones Diferenciales&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Son esenciales en la simulación de sistemas físicos y biológicos.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo práctico:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
En biomedicina, los modelos matemáticos de propagación de enfermedades usan ecuaciones diferenciales para predecir cómo se expandirá un virus en una población.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Métodos comunes:&lt;/strong&gt;  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Método de Euler
&lt;/li&gt;
&lt;li&gt;Método de Runge-Kutta
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A continuación, les dejo mi repositorio de recopilación de métodos hechos en Wolfram Mathematica. &lt;a href="https://github.com/erickvasm/Metodos-numerico" rel="noopener noreferrer"&gt;Link&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Chapra, S., &amp;amp; Canale, R. (2015). &lt;em&gt;Métodos Numéricos para Ingenieros&lt;/em&gt;. McGraw-Hill.
&lt;/li&gt;
&lt;li&gt;Burden, R., &amp;amp; Faires, D. (2016). &lt;em&gt;Análisis Numérico&lt;/em&gt;. Cengage Learning. &lt;/li&gt;
&lt;li&gt;Angarita, A. (2020-2021). Apuntes de análisis numérico. Departamento de Ciencias Básicas, Unidades Tecnológicas de Santander.&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Algoritmo de Dijkstra</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Sun, 20 Oct 2024 16:25:42 +0000</pubDate>
      <link>https://dev.to/erickvasm/el-secreto-de-optimizacion-de-rutas-con-el-algoritmo-de-dijkstra-5hbh</link>
      <guid>https://dev.to/erickvasm/el-secreto-de-optimizacion-de-rutas-con-el-algoritmo-de-dijkstra-5hbh</guid>
      <description>&lt;p&gt;¿Te has preguntado cómo empresas como Amazon logran entregar miles de paquetes a tiempo, optimizando cada ruta de sus repartidores? &lt;/p&gt;

&lt;p&gt;La clave detrás de esa eficiencia está en el &lt;strong&gt;algoritmo de Dijkstra&lt;/strong&gt;, un método que permite encontrar la ruta más corta entre dos puntos en una red o grafo. Este algoritmo es una herramienta fundamental en la programación y la ingeniería para resolver problemas de optimización de rutas y tiempos.&lt;/p&gt;

&lt;p&gt;Antes de entrar de lleno en el algoritmo, es relevante entender el concepto de &lt;strong&gt;grafo&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es un Grafo?
&lt;/h2&gt;

&lt;p&gt;Un grafo es una estructura que consiste en un conjunto de puntos llamados &lt;strong&gt;nodos&lt;/strong&gt; conectados por &lt;strong&gt;aristas&lt;/strong&gt; o líneas que los unen. Estos nodos y aristas pueden representar diversas situaciones, como ciudades y las carreteras que las conectan, o incluso servidores en una red.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gyj4m6x4g2urb8ftl4o.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4gyj4m6x4g2urb8ftl4o.jpeg" alt="Mapa con grafo" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Tipos de Grafos
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Grafo dirigido&lt;/strong&gt;: En este tipo de grafo, las aristas tienen una dirección, es decir, solo se puede ir de un nodo a otro en un solo sentido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafo no dirigido&lt;/strong&gt;: Las aristas no tienen dirección, lo que permite ir en ambas direcciones entre dos nodos conectados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Grafo ponderado conexo&lt;/strong&gt;: Aquí, las aristas tienen un peso o costo asociado, que puede representar la distancia, el tiempo o cualquier valor significativo para el problema que se quiere resolver. &lt;strong&gt;Con este tipo de grafo están relacionados problemas de la vida real.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  El Algoritmo de Dijkstra
&lt;/h2&gt;

&lt;p&gt;El &lt;strong&gt;algoritmo de Dijkstra&lt;/strong&gt; fue diseñado por Edsger Dijkstra en 1956 y es una solución eficiente para encontrar la ruta más corta en un grafo ponderado. Se utiliza en múltiples áreas, desde la planificación de rutas para sistemas de transporte hasta redes de comunicación.&lt;/p&gt;

&lt;h3&gt;
  
  
  ¿Cómo Funciona?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Selecciona el nodo de origen&lt;/strong&gt;: Asigna un valor de 0 al nodo inicial y un valor de infinito a todos los demás nodos.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explora los nodos vecinos&lt;/strong&gt;: A medida que exploras los nodos conectados, actualizas los costos o distancias de sus aristas si encuentras un camino más corto.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repite&lt;/strong&gt;: Este proceso se repite hasta que se haya recorrido todo el grafo y se haya encontrado el camino más corto al nodo destino.&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Ejemplo didáctico
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;¿Cuál es el camino más corto para ir desde San José Centro a las distintas ciudades?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1bae8s7umovpi6pm1rv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj1bae8s7umovpi6pm1rv.PNG" alt="Grafo con rutas" width="642" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A) Rutas:&lt;/strong&gt; San José Centro, Alajuelita, Escazú y Sabanilla.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;B) Kilómetros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;San José Centro → Alajuelita: 3 km&lt;/li&gt;
&lt;li&gt;Alajuelita → Escazú: 2 km&lt;/li&gt;
&lt;li&gt;Alajuelita → Sabanilla: 8 km&lt;/li&gt;
&lt;li&gt;San José Centro → Escazú: 7 km&lt;/li&gt;
&lt;li&gt;Escazú → Sabanilla: 2 km&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C)&lt;/strong&gt; Contamos con una tabla donde escribimos el número de pasos que se están dando y una columna para cada ciudad. &lt;/p&gt;

&lt;p&gt;En cada columna se escribe la cantidad de kilómetros desde San José Centro hasta cada ciudad. El signo de menos (-) indica que aún no se ha llegado a esa ciudad en ese paso.&lt;/p&gt;

&lt;p&gt;Si ya se llegó a la ciudad, se coloca la distancia y de dónde proviene esa distancia. Por ejemplo: "7/San José" significa que se llegó a esa ciudad desde San José con una distancia de 7 km.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jz8zecwgyirjpf06hel.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6jz8zecwgyirjpf06hel.png" alt="Tabla comparativa" width="559" height="155"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paso 0:&lt;/strong&gt; Estamos en San José Centro, por lo tanto, no hay distancia.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paso 1:&lt;/strong&gt; Desde San José Centro se puede llegar a Escazú y Alajuelita. La ciudad más cercana es Alajuelita, a 3 km, por lo que se tomará este camino para evaluar otras rutas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paso 2:&lt;/strong&gt; Desde Alajuelita podemos llegar a Sabanilla. También es posible llegar a Escazú desde Alajuelita con una distancia menor (5 km en lugar de 7 km desde San José).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paso 3:&lt;/strong&gt; Finalmente, el camino más corto a Sabanilla también pasa por Alajuelita.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D) Los caminos más cortos desde San José Centro son:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Escazú&lt;/strong&gt; (pasando por Alajuelita): distancia de 5 km.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alajuelita&lt;/strong&gt; (directamente desde San José Centro): distancia de 3 km.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sabanilla&lt;/strong&gt; (pasando por Alajuelita): distancia de 7 km.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Aplicaciones del Algoritmo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Industria de envíos y logística&lt;/strong&gt;: Un caso de uso típico del algoritmo de Dijkstra es en la optimización de rutas para empresas de mensajería, como los repartidores de &lt;u&gt;Amazon&lt;/u&gt;. El algoritmo permite calcular la ruta más corta entre un almacén y el destino de entrega del cliente, maximizando la eficiencia y reduciendo tiempos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Aplicaciones en tiempo real&lt;/strong&gt;: Sistemas como los GPS y plataformas como &lt;em&gt;Google Maps&lt;/em&gt; usan el algoritmo de Dijkstra para calcular rutas en tiempo real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Análisis en partidos de fútbol&lt;/strong&gt;: En el análisis de datos deportivos, como en el fútbol, el algoritmo de Dijkstra puede aplicarse para entender las interacciones entre jugadores. Por ejemplo, se puede utilizar para identificar los jugadores que realizan más pases entre sí durante un partido, encontrando la “ruta” más frecuente de intercambio de balón.&lt;/p&gt;

&lt;h2&gt;
  
  
  Limitaciones del Algoritmo
&lt;/h2&gt;

&lt;p&gt;Aunque el algoritmo de Dijkstra es muy eficaz, tiene algunas limitaciones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Un solo origen&lt;/strong&gt;: El algoritmo solo encuentra la ruta más corta desde un nodo de origen a un nodo destino. Si tienes múltiples destinos, tendrías que ejecutar el algoritmo repetidamente.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No considera otros factores&lt;/strong&gt;: Factores como el tráfico o las condiciones del camino no son tomados en cuenta. Para aplicaciones reales, se necesita complementar el algoritmo con datos adicionales.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Johnsonbaugh, R. Matemáticas Discretas. México: Pearson Educación, 2005.&lt;/li&gt;
&lt;li&gt;Pérez, C. M. "Estructuras de grafos". Obtenido de Grafo Ponderado — Grafos.&lt;/li&gt;
&lt;li&gt;vaniaberzunza. "&lt;a href="https://vbroptiblog.wordpress.com/2017/03/16/edsger-wybe-dijkstra/" rel="noopener noreferrer"&gt;Edsger Wybe Dijkstra&lt;/a&gt;".&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>algorithms</category>
    </item>
    <item>
      <title>¿Como Personalizar Neovim?</title>
      <dc:creator>Erick Vasquez </dc:creator>
      <pubDate>Wed, 29 May 2024 02:06:15 +0000</pubDate>
      <link>https://dev.to/erickvasm/como-personalizar-neovim-3gg8</link>
      <guid>https://dev.to/erickvasm/como-personalizar-neovim-3gg8</guid>
      <description>&lt;p&gt;Personalizar Neovim es una excelente manera de mejorar la productividad y la experiencia al programar. A continuación, te proporcionaré una guía para personalizar Neovim para personas que se están iniciando en este tema. &lt;/p&gt;

&lt;p&gt;Cabe destacar que utilizaremos un único archivo para configurar Neovim, el cual es el &lt;code&gt;init.vim&lt;/code&gt;. Pero existen otras formas un poco más complejas, como personalizarlo con Lua, el cual es un lenguaje de programación. &lt;/p&gt;

&lt;h2&gt;
  
  
  1. Instalar un administrador de plugins
&lt;/h2&gt;

&lt;p&gt;Antes de comenzar, asegúrate de tener Neovim instalado en tu computadora. Puedes descargarlo desde el repositorio oficial de Neovim. Nosotros usaremos a partir de la versión &lt;code&gt;v0.8.0&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para personalizar Neovim, necesitarás un administrador de plugins. Un administrador de plugins te permite instalar y administrar plugins de forma sencilla. Hay varios administradores de plugins disponibles, pero el más popular es vim-plug.&lt;/p&gt;

&lt;p&gt;Para instalar vim-plug, abre una terminal y ejecuta el siguiente comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fLo&lt;/span&gt; ~/.local/share/nvim/site/autoload/plug.vim &lt;span class="nt"&gt;--create-dirs&lt;/span&gt; &lt;span class="se"&gt;\\&lt;/span&gt;
    &amp;lt;https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. Configurar el archivo init.vim
&lt;/h2&gt;

&lt;p&gt;El archivo &lt;code&gt;init.vim&lt;/code&gt; es donde configurarás Neovim. Primero, vamos a crear el archivo para personalizar nvim. Si usas un OS Unix la ruta es &lt;code&gt;/home/.config/nvim/init.vim&lt;/code&gt;. Si tu OS es Windows, la ruta es &lt;code&gt;User/NameUser/AppData/Local/nvim&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;En este archivo se estara organizado en tres secciones:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Configuración principal&lt;/strong&gt;: aquí se configuran algunas opciones importantes como el soporte de resaltado de sintaxis, el soporte de la opción de autocompletado y la configuración de los colores. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Configuración de complementos:&lt;/strong&gt; aquí se definen y se cargan todos los complementos que se emplearán en Neovim. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Configuración personalizada:&lt;/strong&gt; aquí puedes personalizar Neovim añadiendo opciones únicas y atajos de teclado que simplifiquen tu flujo de trabajo. Los mapeos de teclas se emplean para definir atajos para hacer tareas específicas en Neovim, como guardar archivos, buscar y reemplazar, abrir pestañas y cargar de nuevo el archivo init.vim.&lt;/p&gt;

&lt;h3&gt;
  
  
  2.1 Fuente
&lt;/h3&gt;

&lt;p&gt;Personalmente recomiendo Hack Nerd Font y Fira Code, pero puedes explorar muchas más en la página oficial de &lt;a href="https://www.nerdfonts.com/" rel="noopener noreferrer"&gt;NerdFonts&lt;/a&gt;. Solo asegúrate de elegir una Nerd Font para aprovechar los íconos en Neovim.&lt;/p&gt;

&lt;p&gt;Una vez instales la fuente, procura que la terminal que usas, utilice la fuente que descargaste.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo en Windows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeojfts1eadswv1j48lg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyeojfts1eadswv1j48lg.png" alt="Windows" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ejemplo en Linux&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc2uy2obp8igvlczw8sn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwc2uy2obp8igvlczw8sn.png" alt="Linux" width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2.2 Configuración
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Habilitar el número de línea&lt;/strong&gt;&lt;br&gt;
El número de línea es útil cuando necesitas referirte a una línea específica en tu archivo. Puedes habilitar los números de línea usando el siguiente código:&lt;br&gt;
&lt;code&gt;set number&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Establecer el espaciado&lt;/strong&gt;&lt;br&gt;
El espaciado adecuado ayuda a que el código sea más legible. Puedes establecer el espaciado en Neovim con el siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;tabstop&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;shiftwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;4&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;expandtab&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Habilitar la indentación automática&lt;/strong&gt;&lt;br&gt;
La indentación automática es útil porque te permite identar tu código de forma rápida y sencilla. Puedes habilitar la indentación automática usando el siguiente código: &lt;code&gt;filetype indent on&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Temas&lt;/strong&gt;&lt;br&gt;
Un tema define la apariencia de Neovim. Puedes elegir entre una amplia variedad de temas, y algunos de los más populares incluyen gruvbox, dracula y nord.&lt;br&gt;
Puedes instalar y establecer un tema usando vim-plug con el siguiente código:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="nb"&gt;syntax&lt;/span&gt; enable
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;background&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;dark&lt;/span&gt;
&lt;span class="k"&gt;colorscheme&lt;/span&gt; gruvbox
&lt;span class="k"&gt;call&lt;/span&gt; plug#begin&lt;span class="p"&gt;()&lt;/span&gt;
Plug &lt;span class="s1"&gt;'morhetz/gruvbox'&lt;/span&gt;
&lt;span class="k"&gt;call&lt;/span&gt; plug#end&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Instalar plugins&lt;/strong&gt;&lt;br&gt;
Una vez que hayas configurado tu archivo init.vim, puedes instalar plugins usando vim-plug. Puedes buscar plugins en sitios como vimawesome y agregarlos a tu archivo init.vim utilizando Plug 'autor/nombre_del_plugin'.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;filetype plugin indent on&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Una vez que hayas agregado tus plugins, puedes instalarlos y actualizarlos usando los siguientes comandos en Neovim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;PlugInstall
&lt;span class="p"&gt;:&lt;/span&gt;PlugUpdate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Algunos plugins
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Coc y Treesitter&lt;/strong&gt;: es un plugin que proporciona funciones avanzadas de autocompletado y corrección de código para varios lenguajes de programación. Treesitter es un plugin que proporciona análisis sintáctico avanzado para una gran cantidad de lenguajes de programación.&lt;/p&gt;

&lt;p&gt;Para instalar Coc, abre Neovim y escribe &lt;code&gt;:CocInstall&lt;/code&gt;. A continuación, escribe los nombres de los plugins que deseas instalar, como: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coc-emmet&lt;/li&gt;
&lt;li&gt;coc-html-css-support&lt;/li&gt;
&lt;li&gt;coc-pairs&lt;/li&gt;
&lt;li&gt;coc-json&lt;/li&gt;
&lt;li&gt;coc-tsserver&lt;/li&gt;
&lt;li&gt;coc-prettier&lt;/li&gt;
&lt;li&gt;@yaegassy/coc-volar&lt;/li&gt;
&lt;li&gt;@yaegassy/coc-volar-tools&lt;/li&gt;
&lt;li&gt;@yaegassy/coc-tailwindcss3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Para instalar Treesitter, escribe &lt;code&gt;:TSInstal&lt;/code&gt;l en Neovim, y luego escribe los nombres de los plugins que deseas instalar, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;astro&lt;/li&gt;
&lt;li&gt;java&lt;/li&gt;
&lt;li&gt;javascript&lt;/li&gt;
&lt;li&gt;json&lt;/li&gt;
&lt;li&gt;markdown&lt;/li&gt;
&lt;li&gt;php&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Algunas de las opciones y los plugin más notables que se configuran son:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Temas de colores para neovim:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;gruvbox&lt;/li&gt;
&lt;li&gt;onedark.vim&lt;/li&gt;
&lt;li&gt;palenight.vim&lt;/li&gt;
&lt;li&gt;nord-vim&lt;/li&gt;
&lt;li&gt;ayu-vim&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Plugin para mejorar la apariencia de la barra de estado de neovim:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;vim-airline &lt;/li&gt;
&lt;li&gt;barbar.nvim: &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Plugin para explorar y navegar por los archivos en un árbol de directorios:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;nerdtree &lt;/li&gt;
&lt;li&gt;nerdtree-git-plugin&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Plugin para mostrar iconos de archivo en la barra lateral de NERDTree:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;vim-devicons&lt;/li&gt;
&lt;li&gt;nvim-web-devicons: &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Otro Pluggins usados son:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. vim-closetag&lt;/strong&gt;: para autocompletar etiquetas HTML y XML.&lt;br&gt;
&lt;strong&gt;2. vim-surround&lt;/strong&gt;: para agregar y cambiar los paréntesis, corchetes, llaves y comillas que rodean el texto seleccionado.&lt;br&gt;
&lt;strong&gt;3. nvim-autopairs&lt;/strong&gt;: para insertar pares de paréntesis, corchetes, llaves y comillas automáticamente mientras se escribe código.&lt;br&gt;
&lt;strong&gt;4. vim-prettier&lt;/strong&gt;: para formatear automáticamente el código JavaScript, CSS, HTML y otros lenguajes.&lt;br&gt;
&lt;strong&gt;5. coc.nvim&lt;/strong&gt;: plugin para autocompletar y proporcionar características avanzadas de edición de código para varios lenguajes de programación a través del servidor LSP.&lt;br&gt;
&lt;strong&gt;6. nvim-treesitter&lt;/strong&gt;: para un resaltado de sintaxis y análisis de código más avanzados, basado en árboles sintácticos, para muchos lenguajes de programación.&lt;br&gt;
&lt;strong&gt;7. lilydjwg/colorizer&lt;/strong&gt;: para resaltar los códigos de color en el archivo.&lt;br&gt;
&lt;strong&gt;8. rainbow_parentheses.vim&lt;/strong&gt;: para resaltar los paréntesis y corchetes coincidentes.&lt;br&gt;
&lt;strong&gt;9. telescope.nvim&lt;/strong&gt;: para buscar palabras claves. &lt;/p&gt;
&lt;h2&gt;
  
  
  4. Comandos personalizados
&lt;/h2&gt;

&lt;p&gt;Puedes crear comandos personalizados para diversas acciones. Por ejemplo, si deseas guardar tus cambios como en Windows &lt;code&gt;(Ctrl + S)&lt;/code&gt;, puedes hacerlo de la siguiente manera:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primero, define un comando para la 'tecla líder' (leader key), que es la tecla principal para ejecutar comandos. En mi caso, utilizo la barra espaciadora (space).&lt;/li&gt;
&lt;li&gt;Luego, utiliza el comando de Vim nmap  COMANDO_VIM.&lt;/li&gt;
&lt;li&gt;Por ejemplo, si deseas que Ctrl + S guarde tu trabajo, el comando sería: &lt;code&gt;nmap &amp;lt;C-s&amp;gt; :w&amp;lt;CR&amp;gt;&lt;/code&gt;, donde &lt;strong&gt;C&lt;/strong&gt; representa la tecla &lt;strong&gt;Ctrl&lt;/strong&gt;, s es la tecla &lt;strong&gt;S&lt;/strong&gt;, y &lt;strong&gt;:w&lt;/strong&gt; es el comando de Vim para guardar el archivo. Al final del post encontrarás más ejemplos.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="k"&gt;let&lt;/span&gt; mapleader&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;

&lt;span class="c"&gt;" SAVE&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;s&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" SPLIT S&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;s &lt;span class="p"&gt;:&lt;/span&gt;vsp&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  5. Ejemplo de configuración
&lt;/h2&gt;

&lt;p&gt;Para tener el tema transparente, la terminal debe tener el tema transparente. En mi configuración ya viene por defecto en tema transparente en Neovim.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11k8xt9xczr4tgtg7h0t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F11k8xt9xczr4tgtg7h0t.png" alt="Nvim transparente" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuuycpcxpucfxatzsr54.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxuuycpcxpucfxatzsr54.png" alt="Nvim" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  ¿Cómo quedaría todo el archivo?
&lt;/h2&gt;

&lt;p&gt;Puedes ver toda la configuración en mi repositorio de GitHub: &lt;a href="https://github.com/erickvasm/dotfiles/blob/main/editors/init_nvim/init.vim" rel="noopener noreferrer"&gt;dotfiles&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;" ---------------------&lt;/span&gt;
&lt;span class="c"&gt;" 1. MAIN CONFIGURATION&lt;/span&gt;
&lt;span class="c"&gt;" ---------------------&lt;/span&gt;
&lt;span class="k"&gt;filetype&lt;/span&gt; plugin &lt;span class="nb"&gt;indent&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;
&lt;span class="k"&gt;filetype&lt;/span&gt; plugin &lt;span class="k"&gt;on&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;termguicolors&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="k"&gt;number&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;mouse&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;numberwidth&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;clipboard&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;unnamed
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;showcmd&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;ruler&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;cursorline&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;encoding&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;utf8
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;showmatch&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;termguicolors&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="k"&gt;sw&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;wrap&lt;/span&gt; &lt;span class="nb"&gt;linebreak&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;hlsearch&lt;/span&gt;                   
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;incsearch&lt;/span&gt;                   
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;ignorecase&lt;/span&gt;                  
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;smartcase&lt;/span&gt; 
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;laststatus&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;noshowmode&lt;/span&gt;

&lt;span class="c"&gt;" ------------&lt;/span&gt;
&lt;span class="c"&gt;" 2. VIM-PLUG&lt;/span&gt;
&lt;span class="c"&gt;" ------------&lt;/span&gt;
&lt;span class="k"&gt;call&lt;/span&gt; plug#begin&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;" THEME&lt;/span&gt;
Plug &lt;span class="s1"&gt;'morhetz/gruvbox'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'joshdick/onedark.vim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'drewtempelmeyer/palenight.vim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'arcticicestudio/nord-vim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'ayu-theme/ayu-vim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'NLKNguyen/papercolor-theme'&lt;/span&gt;

&lt;span class="c"&gt;" TABS&lt;/span&gt;
Plug &lt;span class="s1"&gt;'vim-airline/vim-airline'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'romgrk/barbar.nvim'&lt;/span&gt;

&lt;span class="c"&gt;" TREE&lt;/span&gt;
Plug &lt;span class="s1"&gt;'scrooloose/nerdtree'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'Xuyuanp/nerdtree-git-plugin'&lt;/span&gt;

&lt;span class="c"&gt;" ICONS&lt;/span&gt;
Plug &lt;span class="s1"&gt;'ryanoasis/vim-devicons'&lt;/span&gt; 
Plug &lt;span class="s1"&gt;'kyazdani42/nvim-web-devicons'&lt;/span&gt;

&lt;span class="c"&gt;" TYPING&lt;/span&gt;
Plug &lt;span class="s1"&gt;'alvan/vim-closetag'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'tpope/vim-surround'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'windwp/nvim-autopairs'&lt;/span&gt;

&lt;span class="c"&gt;" PRETTIER&lt;/span&gt;
Plug &lt;span class="s1"&gt;'prettier/vim-prettier'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'do'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'yarn install'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;" AUTOCOMPLETE&lt;/span&gt;
Plug &lt;span class="s1"&gt;'neoclide/coc.nvim'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'branch'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'release'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;" SYNTAX&lt;/span&gt;
Plug &lt;span class="s1"&gt;'nvim-treesitter/nvim-treesitter'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;'do'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;':TSUpdate'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;" COLORS&lt;/span&gt;
Plug &lt;span class="s1"&gt;'lilydjwg/colorizer'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'junegunn/rainbow_parentheses.vim'&lt;/span&gt;

&lt;span class="c"&gt;" TELESCOPE&lt;/span&gt;
Plug &lt;span class="s1"&gt;'nvim-lua/plenary.nvim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'nvim-telescope/telescope.nvim'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="s1"&gt;'tag'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'0.1.0'&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;" GIT&lt;/span&gt;
Plug &lt;span class="s1"&gt;'APZelos/blamer.nvim'&lt;/span&gt;

&lt;span class="c"&gt;" GITHUBCOPILOT&lt;/span&gt;
Plug &lt;span class="s1"&gt;'github/copilot.vim'&lt;/span&gt;

&lt;span class="c"&gt;" IDE&lt;/span&gt;
Plug &lt;span class="s1"&gt;'numToStr/Comment.nvim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'easymotion/vim-easymotion'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'mhinz/vim-signify'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'yggdroot/indentline'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'lukas-reineke/indent-blankline.nvim'&lt;/span&gt;

&lt;span class="c"&gt;" LSP AND MASON&lt;/span&gt;
Plug &lt;span class="s1"&gt;'williamboman/mason.nvim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'williamboman/mason-lspconfig.nvim'&lt;/span&gt;
Plug &lt;span class="s1"&gt;'neovim/nvim-lspconfig'&lt;/span&gt;


&lt;span class="k"&gt;call&lt;/span&gt; plug#end&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;" -----------------&lt;/span&gt;
&lt;span class="c"&gt;" 3. CONFIGURATION&lt;/span&gt;
&lt;span class="c"&gt;" -----------------&lt;/span&gt;
&lt;span class="c"&gt;" AYU THEME&lt;/span&gt;
&lt;span class="c"&gt;" let ayucolor="dark" &lt;/span&gt;

&lt;span class="c"&gt;" MASON VIM&lt;/span&gt;
&lt;span class="k"&gt;lua&lt;/span&gt; require&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'mason'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;setup&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;lua&lt;/span&gt; require&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'mason-lspconfig'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;setup&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c"&gt;" GIT BLAME&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:blamer_enabled&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="c"&gt;" NERDTree&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; NERDTreeQuitOnOpen&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:NERDTreeGitStatusIndicatorMapCustom&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Modified'&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✹'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Staged'&lt;/span&gt;    &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✚'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Untracked'&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✭'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Renamed'&lt;/span&gt;   &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'➜'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Unmerged'&lt;/span&gt;  &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'═'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Deleted'&lt;/span&gt;   &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✖'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Dirty'&lt;/span&gt;     &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✗'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Ignored'&lt;/span&gt;   &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'☒'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Clean'&lt;/span&gt;     &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'✔︎'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="s1"&gt;'Unknown'&lt;/span&gt;   &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s1"&gt;'?'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="se"&gt;                \&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:NERDTreeGitStatusUseNerdFonts&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; 
&lt;span class="k"&gt;let&lt;/span&gt; NERDTreeMinimalUI &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; NERDTreeDirArrows &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; NERDTreeShowHidden &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;

&lt;span class="c"&gt;" AIRLINE&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline&lt;/span&gt;#extensions#&lt;span class="nb"&gt;tabline&lt;/span&gt;#enabled &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline_section_c_only_filename&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline_section_z&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;' %{strftime("%-I:%M %p")}'&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline_section_warning&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;''&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline&lt;/span&gt;#extensions#&lt;span class="nb"&gt;tabline&lt;/span&gt;#formatter &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'unique_tail'&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:airline_theme&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"onedark"&lt;/span&gt;

&lt;span class="c"&gt;" PRETTIER&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; &lt;span class="nv"&gt;g:prettier&lt;/span&gt;#quickfix_enabled &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
autocmd &lt;span class="nb"&gt;TextChanged&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;InsertLeave&lt;/span&gt; *&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;js&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;jsx&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;mjs&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;tsx&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;css&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;less&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;scss&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;json&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;graphql&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;md&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;vue&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;svelte&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;yaml&lt;span class="p"&gt;,&lt;/span&gt;*&lt;span class="p"&gt;.&lt;/span&gt;html PrettierAsync

&lt;span class="c"&gt;"------------------&lt;/span&gt;
&lt;span class="c"&gt;" 4. CUSTOM MAPING&lt;/span&gt;
&lt;span class="c"&gt;"-----------------&lt;/span&gt;
&lt;span class="k"&gt;let&lt;/span&gt; mapleader&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;" "&lt;/span&gt;

&lt;span class="c"&gt;" SAVE&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;s&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" ALL TEXT, PASTE, COPY, RENDO, CUT&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;v&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; "&lt;span class="p"&gt;+&lt;/span&gt;P
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;a&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; ggVG
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;z&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;undo&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;y&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;redo&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;x&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; dd

&lt;span class="c"&gt;" SEARCH AND REPLACE&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;r&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;%s&lt;span class="sr"&gt;//&lt;/span&gt;/gc&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Left&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;Left&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;f&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; / 

&lt;span class="c"&gt;" SPLIT S&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;s &lt;span class="p"&gt;:&lt;/span&gt;vsp&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" INIT.VIM&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;r&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;so&lt;/span&gt; &lt;span class="p"&gt;~&lt;/span&gt;&lt;span class="sr"&gt;/.config/&lt;/span&gt;nvim/init&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" BUFFERS&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;qq &lt;span class="p"&gt;:&lt;/span&gt;NERDTreeToggle&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap \\ &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;qq
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Tab&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;bnext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;t&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;enew&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;oo &lt;span class="p"&gt;:&lt;/span&gt;Buffers&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;q&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;bdelete&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" SPLIT&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt; &lt;span class="m"&gt;10&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;C&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="k"&gt;w&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;&lt;/span&gt;

&lt;span class="c"&gt;" SEARCH FILES&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;ff&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Telescope find_files&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;cr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;fg &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Telescope live_grep&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;cr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;fb &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Telescope &lt;span class="k"&gt;buffers&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;cr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;fh &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Telescope help_tags&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;cr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;fc &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;cmd&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Telescope &lt;span class="k"&gt;colorscheme&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;cr&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" SCROOLLING&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;right&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;vertical&lt;/span&gt; &lt;span class="k"&gt;resize&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;vertical&lt;/span&gt; &lt;span class="k"&gt;resize&lt;/span&gt; &lt;span class="m"&gt;-5&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;up&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;resize&lt;/span&gt; &lt;span class="p"&gt;+&lt;/span&gt;&lt;span class="m"&gt;5&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
nnoremap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;down&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="k"&gt;resize&lt;/span&gt; &lt;span class="m"&gt;-5&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;es &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Plug&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;easymotion&lt;span class="p"&gt;-&lt;/span&gt;s2&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;" DEFINITION.&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;gd&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Plug&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;coc&lt;span class="p"&gt;-&lt;/span&gt;definition&lt;span class="p"&gt;)&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; gy &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Plug&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;coc&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;definition&lt;span class="p"&gt;)&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; gi &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Plug&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;coc&lt;span class="p"&gt;-&lt;/span&gt;implementation&lt;span class="p"&gt;)&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;silent&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;gr&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Plug&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;coc&lt;span class="p"&gt;-&lt;/span&gt;references&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;" PRETTIER&lt;/span&gt;
nmap &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;Leader&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="k"&gt;p&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;Prettier&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;CR&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;" THEME TRANSPARENT&lt;/span&gt;
&lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;!&lt;/span&gt; TransparentBackground&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nb"&gt;highlight&lt;/span&gt; Normal guibg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermbg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt;
    &lt;span class="nb"&gt;highlight&lt;/span&gt; LineNr guibg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermbg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt;
    &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nb"&gt;fillchars&lt;/span&gt;&lt;span class="p"&gt;+=&lt;/span&gt;&lt;span class="k"&gt;vert&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;\│
    &lt;span class="nb"&gt;highlight&lt;/span&gt; WinSeparator &lt;span class="k"&gt;gui&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; guibg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; guifg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mh"&gt;#444444&lt;/span&gt; cterm&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermbg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermfg&lt;span class="p"&gt;=&lt;/span&gt;gray
    &lt;span class="nb"&gt;highlight&lt;/span&gt; VertSplit &lt;span class="k"&gt;gui&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; guibg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; guifg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mh"&gt;#444444&lt;/span&gt; cterm&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermbg&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;NONE&lt;/span&gt; ctermfg&lt;span class="p"&gt;=&lt;/span&gt;gray
&lt;span class="k"&gt;endfunction&lt;/span&gt;

&lt;span class="c"&gt;" Para desactivar el tema TransparentBackground solo hay que cambiarlo por set background dark o ligth&lt;/span&gt;
augroup MyColors
    autocmd&lt;span class="p"&gt;!&lt;/span&gt;
    autocmd &lt;span class="nb"&gt;ColorScheme&lt;/span&gt; dracula &lt;span class="k"&gt;call&lt;/span&gt; DraculaTweaks&lt;span class="p"&gt;()&lt;/span&gt;
    autocmd &lt;span class="nb"&gt;ColorScheme&lt;/span&gt; * &lt;span class="k"&gt;call&lt;/span&gt; TransparentBackground&lt;span class="p"&gt;()&lt;/span&gt; 
augroup END

color onedark

&lt;span class="nb"&gt;syntax&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>neovim</category>
      <category>basic</category>
    </item>
  </channel>
</rss>
