<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Artículos de Christian Kopač</title><id>https://kopac.ch/es/made/</id><updated>2024-12-15T00:00:00Z</updated><link rel="self" type="application/atom+xml" href="https://kopac.ch/es/made/atom.xml"/><link rel="alternate" type="text/html" href="https://kopac.ch/es/made/"/><subtitle>Publicaciones y notas largas — lo que he dejado por escrito.</subtitle><generator uri="https://gohugo.io/" version="0.161.0">Hugo</generator><entry><title>Tema Apacible: Guía Completa de Características</title><link rel="alternate" type="text/html" href="https://kopac.ch/es/made/theme-features/"/><id>https://kopac.ch/es/made/theme-features/</id><updated>2024-12-15T00:00:00Z</updated><published>2024-12-15T00:00:00Z</published><author><name>CK</name></author><summary>Guía completa de todas las características y capacidades del tema Apacible para Hugo</summary><content type="html"><![CDATA[<p>Esta guía completa demuestra todas las características y capacidades del tema <strong>Apacible</strong> para Hugo. Desde markdown básico hasta shortcodes avanzados, procesamiento de imágenes y contenido técnico—todo lo que necesitas saber está aquí.</p>
<h2 id="introducción">Introducción</h2>
<p>El tema Apacible es un tema minimalista para Hugo que prioriza la accesibilidad y los principios de smolweb, con soporte único para imágenes difuminadas. Esta guía cubre cada característica con ejemplos prácticos.</p>
<hr>
<h2 id="características-de-markdown">Características de Markdown</h2>
<p>El tema soporta todas las características estándar de Markdown con un estilo hermoso.</p>
<h3 id="encabezados">Encabezados</h3>
<p>Los encabezados crean una jerarquía clara en tu contenido:</p>
<h2 id="encabezado-nivel-2">Encabezado Nivel 2</h2>
<h3 id="encabezado-nivel-3">Encabezado Nivel 3</h3>
<h4 id="encabezado-nivel-4">Encabezado Nivel 4</h4>
<h3 id="énfasis">Énfasis</h3>
<p>Texto normal, <strong>texto en negrita</strong>, <em>texto en cursiva</em>, <em><strong>texto en negrita y cursiva</strong></em>, y <del>texto tachado</del>.</p>
<h3 id="listas">Listas</h3>
<p><strong>Listas desordenadas:</strong></p>
<ul>
<li>Primer elemento</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
</ul>
<p><strong>Listas ordenadas:</strong></p>
<ol>
<li>Primer elemento
<ol>
<li>Elemento con sangría</li>
<li>Elemento con sangría</li>
</ol>
</li>
<li>Segundo elemento</li>
<li>Tercer elemento</li>
</ol>
<h3 id="enlaces">Enlaces</h3>
<p>Hay un <a href="https://example.com">enlace</a> y <a href="https://example.com">otro enlace a example.com</a>.</p>
<h3 id="tablas">Tablas</h3>
<p>Tabla básica:</p>
<table>
  <thead>
      <tr>
          <th>Sintaxis</th>
          <th>Descripción</th>
          <th>Texto de Prueba</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Encabezado</td>
          <td>Título</td>
          <td>Aquí está esto</td>
      </tr>
      <tr>
          <td>Párrafo</td>
          <td>Texto</td>
          <td>Y más</td>
      </tr>
  </tbody>
</table>
<p>Con alineación:</p>
<table>
  <thead>
      <tr>
          <th style="text-align: left">Sintaxis</th>
          <th style="text-align: center">Descripción</th>
          <th style="text-align: right">Texto de Prueba</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td style="text-align: left">Izquierda</td>
          <td style="text-align: center">Centro</td>
          <td style="text-align: right">Derecha</td>
      </tr>
      <tr>
          <td style="text-align: left">Párrafo</td>
          <td style="text-align: center">Texto</td>
          <td style="text-align: right">Y más</td>
      </tr>
  </tbody>
</table>
<h3 id="citas">Citas</h3>
<blockquote>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium, nisi saepe dolor unde iusto dolore nam, vero optio consequuntur repudiandae et! Atque libero expedita laudantium cupiditate, sit explicabo sequi ipsa!</p>
</blockquote>
<blockquote>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit.</p>
<blockquote>
<p>Cita anidada: Praesentium, nisi saepe dolor unde iusto dolore nam, vero optio consequuntur repudiandae et! Atque libero expedita laudantium cupiditate, sit explicabo sequi ipsa!</p>
</blockquote>
</blockquote>
<h3 id="notas-al-pie">Notas al pie</h3>
<p>Lorem ipsum dolor sit, amet<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> palabras consectetur<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> adipisicing elit.</p>
<h3 id="regla-horizontal">Regla horizontal</h3>
<hr>
<hr>
<h2 id="shortcodes">Shortcodes</h2>
<p>Los shortcodes extienden Markdown con funcionalidad personalizada potente.</p>
<h3 id="llamadas-de-atención">Llamadas de atención</h3>
<p>Las llamadas de atención son útiles para resaltar información importante.</p>















<div class="callout callout-note">
  <div class="callout-header">
    <span class="callout-icon">ᛁ</span>
    <span class="callout-title">Nota</span>
  </div>
  <div class="callout-content">
    Esta es una llamada de atención de nota. Perfecta para información general o recordatorios.
  </div>
</div>





<div class="callout callout-tip">
  <div class="callout-header">
    <span class="callout-icon">ᛏ</span>
    <span class="callout-title">Consejo</span>
  </div>
  <div class="callout-content">
    Esta es una llamada de atención de consejo. Genial para compartir pistas útiles o mejores prácticas.
  </div>
</div>





<div class="callout callout-important">
  <div class="callout-header">
    <span class="callout-icon">ᚨ</span>
    <span class="callout-title">Importante</span>
  </div>
  <div class="callout-content">
    Esta es una llamada de atención importante. Úsala para resaltar información crítica que los lectores deben saber.
  </div>
</div>





<div class="callout callout-warning">
  <div class="callout-header">
    <span class="callout-icon">ᚹ</span>
    <span class="callout-title">Advertencia</span>
  </div>
  <div class="callout-content">
    Esta es una llamada de atención de advertencia. Úsala para alertar a los usuarios sobre posibles problemas o inconvenientes.
  </div>
</div>





<div class="callout callout-caution">
  <div class="callout-header">
    <span class="callout-icon">ᚢ</span>
    <span class="callout-title">Precaución</span>
  </div>
  <div class="callout-content">
    Esta es una llamada de atención de precaución. Úsala para advertir sobre acciones peligrosas o riesgosas.
  </div>
</div>


<h3 id="citas-1">Citas</h3>
<p>Citas con estilo hermoso para resaltar declaraciones importantes.</p>




<figure class="quote-block">
  <blockquote class="quote-text">
    <em>La imaginación es más importante que el conocimiento. El conocimiento es limitado. La imaginación rodea el mundo.</em>
  </blockquote>
  
  <figcaption class="quote-cite">
    Albert Einstein
  </figcaption>
  
</figure>






<figure class="quote-block">
  <blockquote class="quote-text">
    <em>La mejor manera de predecir el futuro es inventarlo.</em>
  </blockquote>
  
</figure>


<h3 id="contenido-detalleexpandible">Contenido Detalle/Expandible</h3>




<details class="detail">
  <summary class="detail-header">
    <span class="detail-icon">▶</span>
    <span class="detail-title">Haz clic para expandir: Lorem ipsum dolor sit, amet consectetur adipisicing elit.</span>
  </summary>
  <div class="detail-content">
    <p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium, nisi saepe dolor unde iusto dolore nam, vero optio consequuntur repudiandae et! Atque libero expedita laudantium cupiditate, sit explicabo sequi ipsa!</p>
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Praesentium, nisi saepe dolor unde iusto dolore nam, vero optio consequuntur repudiandae et! Atque libero expedita laudantium cupiditate, sit explicabo sequi ipsa!</p>

  </div>
</details>


<h3 id="combinando-shortcodes">Combinando Shortcodes</h3>
<p>Puedes combinar shortcodes para contenido rico:</p>















<div class="callout callout-note">
  <div class="callout-header">
    <span class="callout-icon">ᛁ</span>
    <span class="callout-title">Matemáticas en Llamadas de Atención</span>
  </div>
  <div class="callout-content">
    Puedes incluir matemáticas en llamadas de atención: $f(x) = x^2 + 2x + 1$
  </div>
</div>






<figure class="quote-block">
  <blockquote class="quote-text">
    <em>Las matemáticas son el lenguaje con el que Dios ha escrito el universo.</em>
  </blockquote>
  
  <figcaption class="quote-cite">
    Matemático
  </figcaption>
  
</figure>


<hr>
<h2 id="imágenes-difuminadas">Imágenes Difuminadas</h2>
<p>El tema incluye funcionalidad única para imágenes difuminadas. Las imágenes se muestran en su forma difuminada por defecto, lo que reduce el tamaño del archivo mientras mantiene una estética única. Haz clic en el enlace &ldquo;<strong>→ mostrar original</strong>&rdquo; debajo de cada imagen para alternar entre las versiones difuminada y original.</p>
<h3 id="imagen-difuminada-individual">Imagen Difuminada Individual</h3>



















  


  
  



  <p><em>Image not found: example-dithered-images/musician.jpeg</em></p>


<p>El efecto de difuminado reduce la imagen a una paleta de colores limitada, creando una estética retro distintiva mientras reduce significativamente el tamaño del archivo—perfecto para la filosofía smolweb.</p>
<h3 id="comparación-lado-a-lado">Comparación Lado a Lado</h3>
<p>Para una comparación directa, aquí está la misma imagen mostrada en ambas formas:</p>

















  


  



  <p><em>Image not found: </em></p>



<h3 id="cómo-funciona">Cómo Funciona</h3>
<p><strong>Procesamiento</strong>: Las imágenes se difuminan usando el algoritmo de difuminado ordenado de ImageMagick:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">magick input.jpg <span class="se">\
</span></span></span><span class="line"><span class="cl">    -colorspace gray <span class="se">\
</span></span></span><span class="line"><span class="cl">    -contrast-stretch 5%x5% <span class="se">\
</span></span></span><span class="line"><span class="cl">    -normalize <span class="se">\
</span></span></span><span class="line"><span class="cl">    -posterize <span class="m">2</span> <span class="se">\
</span></span></span><span class="line"><span class="cl">    -ordered-dither o4x4 <span class="se">\
</span></span></span><span class="line"><span class="cl">    output_dithered.jpg
</span></span></code></pre></div><p><strong>Mecanismo de Alternancia</strong>: El shortcode genera HTML con ambas versiones. JavaScript alterna la visibilidad cuando se hace clic en el enlace:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">toggleOriginal</span><span class="p">(</span><span class="nx">element</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">container</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">closest</span><span class="p">(</span><span class="s1">&#39;.image-container&#39;</span><span class="p">)</span> <span class="o">||</span> 
</span></span><span class="line"><span class="cl">                    <span class="nx">element</span><span class="p">.</span><span class="nx">closest</span><span class="p">(</span><span class="s1">&#39;figure&#39;</span><span class="p">).</span><span class="nx">querySelector</span><span class="p">(</span><span class="s1">&#39;.image-container&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">dithered</span> <span class="o">=</span> <span class="nx">container</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s1">&#39;.dithered-img&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">original</span> <span class="o">=</span> <span class="nx">container</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s1">&#39;.original-img&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">showText</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s1">&#39;.show-text&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="kr">const</span> <span class="nx">hideText</span> <span class="o">=</span> <span class="nx">element</span><span class="p">.</span><span class="nx">querySelector</span><span class="p">(</span><span class="s1">&#39;.hide-text&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1">// Toggle visibility
</span></span></span><span class="line"><span class="cl">  <span class="nx">dithered</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">toggle</span><span class="p">(</span><span class="s1">&#39;active&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">  <span class="nx">original</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="nx">dithered</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">contains</span><span class="p">(</span><span class="s1">&#39;active&#39;</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;none&#39;</span> <span class="o">:</span> <span class="s1">&#39;block&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="c1">// Toggle link text
</span></span></span><span class="line"><span class="cl">  <span class="nx">showText</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="nx">dithered</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">contains</span><span class="p">(</span><span class="s1">&#39;active&#39;</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;inline&#39;</span> <span class="o">:</span> <span class="s1">&#39;none&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">hideText</span><span class="p">.</span><span class="nx">style</span><span class="p">.</span><span class="nx">display</span> <span class="o">=</span> <span class="nx">dithered</span><span class="p">.</span><span class="nx">classList</span><span class="p">.</span><span class="nx">contains</span><span class="p">(</span><span class="s1">&#39;active&#39;</span><span class="p">)</span> <span class="o">?</span> <span class="s1">&#39;none&#39;</span> <span class="o">:</span> <span class="s1">&#39;inline&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p><strong>Beneficios:</strong></p>
<ul>
<li><strong>Archivos Más Pequeños</strong>: Las imágenes difuminadas son típicamente 40-60% más pequeñas</li>
<li><strong>Carga Más Rápida</strong>: Uso reducido de ancho de banda</li>
<li><strong>Mejora Progresiva</strong>: Original disponible bajo demanda</li>
<li><strong>Estilo Único</strong>: Identidad visual distintiva</li>
<li><strong>Atractivo Retro</strong>: Estética nostálgica de 8 bits</li>
<li><strong>Alto Contraste</strong>: A menudo más legible</li>
<li><strong>Alineado con Smolweb</strong>: Transferencia mínima de datos</li>
<li><strong>Elección del Usuario</strong>: Original disponible cuando se necesita</li>
<li><strong>Accesibilidad</strong>: Alto contraste mejora la legibilidad</li>
</ul>
<p><strong>Uso:</strong></p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-markdown" data-lang="markdown"><span class="line"><span class="cl">{{&lt; img 
</span></span><span class="line"><span class="cl">    src=&#34;image.jpg&#34; 
</span></span><span class="line"><span class="cl">    alt=&#34;Descripción&#34; 
</span></span><span class="line"><span class="cl">    caption=&#34;Tu leyenda aquí&#34; 
</span></span><span class="line"><span class="cl">    dithered=&#34;true&#34; 
</span></span><span class="line"><span class="cl">    width=&#34;800&#34; 
</span></span><span class="line"><span class="cl">    height=&#34;600&#34; 
</span></span><span class="line"><span class="cl">&gt;}}
</span></span></code></pre></div><p><strong>Nota</strong>: Debes tener tanto la imagen original como su versión difuminada (con el sufijo <code>_dithered</code>) en tu carpeta de assets. Usa el script <code>scripts/dither-images.sh</code> para generar versiones difuminadas automáticamente.</p>
<p><strong>Detalles Técnicos:</strong></p>
<ul>
<li><strong>Algoritmo</strong>: Difuminado ordenado (patrón 4x4) con alto contraste y posterización</li>
<li><strong>Espacio de Color</strong>: Conversión a escala de grises antes del difuminado</li>
<li><strong>Formato</strong>: Soporta JPEG, PNG, WebP</li>
<li><strong>Responsive</strong>: El procesamiento de imágenes de Hugo crea tamaños optimizados</li>
<li><strong>Respaldo</strong>: Si falta la versión difuminada, muestra solo la original</li>
</ul>
<hr>
<h2 id="bloques-de-código-y-resaltado-de-sintaxis">Bloques de Código y Resaltado de Sintaxis</h2>
<p>El tema soporta resaltado de sintaxis para muchos lenguajes de programación.</p>
<h3 id="html">HTML</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-html" data-lang="html"><span class="line"><span class="cl"><span class="cp">&lt;!DOCTYPE html&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">html</span> <span class="na">lang</span><span class="o">=</span><span class="s">&#34;en&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">meta</span> <span class="na">charset</span><span class="o">=</span><span class="s">&#34;UTF-8&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">meta</span> <span class="na">name</span><span class="o">=</span><span class="s">&#34;viewport&#34;</span> <span class="na">content</span><span class="o">=</span><span class="s">&#34;width=device-width, initial-scale=1.0&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">title</span><span class="p">&gt;</span>Document<span class="p">&lt;/</span><span class="nt">title</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">&#34;stylesheet&#34;</span> <span class="na">href</span><span class="o">=</span><span class="s">&#34;styles.css&#34;</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">head</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">main</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">h1</span><span class="p">&gt;</span>Hello World<span class="p">&lt;/</span><span class="nt">h1</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">        <span class="p">&lt;</span><span class="nt">p</span><span class="p">&gt;</span>Welcome to my site.<span class="p">&lt;/</span><span class="nt">p</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;/</span><span class="nt">main</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl">    <span class="p">&lt;</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">&#34;script.js&#34;</span><span class="p">&gt;&lt;/</span><span class="nt">script</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">body</span><span class="p">&gt;</span>
</span></span><span class="line"><span class="cl"><span class="p">&lt;/</span><span class="nt">html</span><span class="p">&gt;</span>
</span></span></code></pre></div><h3 id="css">CSS</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-css" data-lang="css"><span class="line"><span class="cl"><span class="p">:</span><span class="nd">root</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">--primary-color</span><span class="p">:</span> <span class="mh">#3498db</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">--secondary-color</span><span class="p">:</span> <span class="mh">#2ecc71</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="nv">--font-stack</span><span class="p">:</span> <span class="o">-</span><span class="n">apple-system</span><span class="p">,</span> <span class="n">BlinkMacSystemFont</span><span class="p">,</span> <span class="s1">&#39;Segoe UI&#39;</span><span class="p">,</span> <span class="kc">sans-serif</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">.</span><span class="nc">container</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">max-width</span><span class="p">:</span> <span class="mi">1200</span><span class="kt">px</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">margin</span><span class="p">:</span> <span class="mi">0</span> <span class="kc">auto</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">padding</span><span class="p">:</span> <span class="mi">2</span><span class="kt">rem</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">@</span><span class="k">media</span> <span class="o">(</span><span class="nt">prefers-color-scheme</span><span class="o">:</span> <span class="nt">dark</span><span class="o">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="p">:</span><span class="nd">root</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nv">--primary-color</span><span class="p">:</span> <span class="mh">#5dade2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="nv">--secondary-color</span><span class="p">:</span> <span class="mh">#58d68d</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="python">Python</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">HTTPException</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">BaseModel</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">List</span><span class="p">,</span> <span class="n">Optional</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Item</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">id</span><span class="p">:</span> <span class="nb">int</span>
</span></span><span class="line"><span class="cl">    <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
</span></span><span class="line"><span class="cl">    <span class="n">description</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="nb">str</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">    <span class="n">price</span><span class="p">:</span> <span class="nb">float</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">items_db</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.get</span><span class="p">(</span><span class="s2">&#34;/items&#34;</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">List</span><span class="p">[</span><span class="n">Item</span><span class="p">])</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">get_items</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">items_db</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.post</span><span class="p">(</span><span class="s2">&#34;/items&#34;</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">Item</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">create_item</span><span class="p">(</span><span class="n">item</span><span class="p">:</span> <span class="n">Item</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">items_db</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">item</span>
</span></span></code></pre></div><h3 id="javascript">JavaScript</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">binarySearch</span><span class="p">(</span><span class="nx">arr</span><span class="p">,</span> <span class="nx">target</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="kd">let</span> <span class="nx">left</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="kd">let</span> <span class="nx">right</span> <span class="o">=</span> <span class="nx">arr</span><span class="p">.</span><span class="nx">length</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="k">while</span> <span class="p">(</span><span class="nx">left</span> <span class="o">&lt;=</span> <span class="nx">right</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="kr">const</span> <span class="nx">mid</span> <span class="o">=</span> <span class="nb">Math</span><span class="p">.</span><span class="nx">floor</span><span class="p">((</span><span class="nx">left</span> <span class="o">+</span> <span class="nx">right</span><span class="p">)</span> <span class="o">/</span> <span class="mi">2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="nx">arr</span><span class="p">[</span><span class="nx">mid</span><span class="p">]</span> <span class="o">===</span> <span class="nx">target</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="k">return</span> <span class="nx">mid</span><span class="p">;</span> <span class="c1">// Found!
</span></span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">arr</span><span class="p">[</span><span class="nx">mid</span><span class="p">]</span> <span class="o">&lt;</span> <span class="nx">target</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">left</span> <span class="o">=</span> <span class="nx">mid</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nx">right</span> <span class="o">=</span> <span class="nx">mid</span> <span class="o">-</span> <span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl">  
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="o">-</span><span class="mi">1</span><span class="p">;</span> <span class="c1">// Not found
</span></span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h3 id="sql">SQL</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-sql" data-lang="sql"><span class="line"><span class="cl"><span class="c1">-- Create a users table
</span></span></span><span class="line"><span class="cl"><span class="k">CREATE</span><span class="w"> </span><span class="k">TABLE</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">id</span><span class="w"> </span><span class="nb">SERIAL</span><span class="w"> </span><span class="k">PRIMARY</span><span class="w"> </span><span class="k">KEY</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">username</span><span class="w"> </span><span class="nb">VARCHAR</span><span class="p">(</span><span class="mi">50</span><span class="p">)</span><span class="w"> </span><span class="k">UNIQUE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">email</span><span class="w"> </span><span class="nb">VARCHAR</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span><span class="w"> </span><span class="k">UNIQUE</span><span class="w"> </span><span class="k">NOT</span><span class="w"> </span><span class="k">NULL</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">created_at</span><span class="w"> </span><span class="k">TIMESTAMP</span><span class="w"> </span><span class="k">DEFAULT</span><span class="w"> </span><span class="k">CURRENT_TIMESTAMP</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="p">);</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="c1">-- Query with joins
</span></span></span><span class="line"><span class="cl"><span class="k">SELECT</span><span class="w"> 
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">u</span><span class="p">.</span><span class="n">username</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="n">u</span><span class="p">.</span><span class="n">email</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="k">COUNT</span><span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="n">id</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="n">post_count</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">FROM</span><span class="w"> </span><span class="n">users</span><span class="w"> </span><span class="n">u</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">LEFT</span><span class="w"> </span><span class="k">JOIN</span><span class="w"> </span><span class="n">posts</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="k">ON</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">p</span><span class="p">.</span><span class="n">user_id</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">GROUP</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">id</span><span class="p">,</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">username</span><span class="p">,</span><span class="w"> </span><span class="n">u</span><span class="p">.</span><span class="n">email</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">HAVING</span><span class="w"> </span><span class="k">COUNT</span><span class="p">(</span><span class="n">p</span><span class="p">.</span><span class="n">id</span><span class="p">)</span><span class="w"> </span><span class="o">&gt;</span><span class="w"> </span><span class="mi">5</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="k">ORDER</span><span class="w"> </span><span class="k">BY</span><span class="w"> </span><span class="n">post_count</span><span class="w"> </span><span class="k">DESC</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><h3 id="bash">Bash</h3>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/bash
</span></span></span><span class="line"><span class="cl"><span class="nb">set</span> -e
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Colors for output</span>
</span></span><span class="line"><span class="cl"><span class="nv">RED</span><span class="o">=</span><span class="s1">&#39;\033[0;31m&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nv">GREEN</span><span class="o">=</span><span class="s1">&#39;\033[0;32m&#39;</span>
</span></span><span class="line"><span class="cl"><span class="nv">NC</span><span class="o">=</span><span class="s1">&#39;\033[0m&#39;</span> <span class="c1"># No Color</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="si">${</span><span class="nv">GREEN</span><span class="si">}</span><span class="s2">Starting deployment...</span><span class="si">${</span><span class="nv">NC</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Run tests</span>
</span></span><span class="line"><span class="cl"><span class="k">if</span> npm test<span class="p">;</span> <span class="k">then</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="si">${</span><span class="nv">GREEN</span><span class="si">}</span><span class="s2">Tests passed!</span><span class="si">${</span><span class="nv">NC</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="k">else</span>
</span></span><span class="line"><span class="cl">    <span class="nb">echo</span> -e <span class="s2">&#34;</span><span class="si">${</span><span class="nv">RED</span><span class="si">}</span><span class="s2">Tests failed!</span><span class="si">${</span><span class="nv">NC</span><span class="si">}</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nb">exit</span> <span class="m">1</span>
</span></span><span class="line"><span class="cl"><span class="k">fi</span>
</span></span></code></pre></div><p>El tema soporta muchos más lenguajes incluyendo Go, Ruby, PHP, Java, C++, Rust, y más. Todo el código se muestra con resaltado de sintaxis apropiado basado en el identificador de lenguaje en la cerca de código.</p>
<hr>
<h2 id="notación-matemática-katex">Notación Matemática (KaTeX)</h2>
<p>Ecuaciones matemáticas renderizadas hermosamente con KaTeX.</p>
<h3 id="matemáticas-en-línea">Matemáticas en Línea</h3>
<p>La fórmula cuadrática es $x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}$ cuando $a \ne 0$.</p>
<p>La famosa ecuación de Einstein: $E = mc^2$</p>
<h3 id="matemáticas-en-bloque">Matemáticas en Bloque</h3>
<p>La transformada de Fourier:</p>
$$
F(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt
$$<p>La Desigualdad de Cauchy-Schwarz:</p>
$$\left( \sum_{k=1}^n a_k b_k \right)^2 \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)$$<p>Para habilitar el renderizado de matemáticas, agrega <code>math = true</code> al frontmatter de tu publicación.</p>
<hr>
<h2 id="diagramas-mermaid">Diagramas Mermaid</h2>
<p><em>Potenciado por <a href="https://mermaid.js.org">Mermaid</a></em></p>
<p>Los diagramas Mermaid son geniales para visualizar procesos, flujos de trabajo y relaciones.</p>
<h3 id="diagrama-de-secuencia">Diagrama de Secuencia</h3>
<div class="mermaid-container">
  <pre class="mermaid">sequenceDiagram
    participant web as Web Browser
    participant blog as Blog Service
    participant account as Account Service
    participant mail as Mail Service
    participant db as Storage

    Note over web,db: The user must be logged in to submit blog posts
    web-&gt;&gt;+account: Logs in using credentials
    account-&gt;&gt;db: Query stored accounts
    db-&gt;&gt;account: Respond with query result

    alt Credentials not found
        account-&gt;&gt;web: Invalid credentials
    else Credentials found
        account-&gt;&gt;-web: Successfully logged in

        Note over web,db: When the user is authenticated, they can now submit new posts
        web-&gt;&gt;+blog: Submit new post
        blog-&gt;&gt;db: Store post data

        par Notifications
            blog--)mail: Send mail to blog subscribers
            blog--)db: Store in-site notifications
        and Response
            blog--&gt;&gt;-web: Successfully posted
        end
    end
  </pre>
</div>


<h3 id="diagrama-de-flujo">Diagrama de Flujo</h3>
<div class="mermaid-container">
  <pre class="mermaid">graph LR
    A[Square Rect] -- Link text --&gt; B((Circle))
    A --&gt; C(Round Rect)
    B --&gt; D{Rhombus}
    C --&gt; D
  </pre>
</div>


<h3 id="gráfico-git">Gráfico Git</h3>
<div class="mermaid-container">
  <pre class="mermaid">%%{init: { &#39;logLevel&#39;: &#39;debug&#39;, &#39;theme&#39;: &#39;base&#39;, &#39;gitGraph&#39;: {&#39;rotateCommitLabel&#39;: false}} }%%
gitGraph
  commit id: &#34;feat(api): ...&#34;
  commit id: &#34;a&#34;
  commit id: &#34;b&#34;
  commit id: &#34;fix(client): .extra long label..&#34;
  branch c2
  commit id: &#34;feat(modules): ...&#34;
  commit id: &#34;test(client): ...&#34;
  checkout main
  commit id: &#34;fix(api): ...&#34;
  commit id: &#34;ci: ...&#34;
  branch b1
  commit
  branch b2
  commit
  </pre>
</div>


<h3 id="gráfico-de-cuadrantes">Gráfico de Cuadrantes</h3>
<div class="mermaid-container">
  <pre class="mermaid">quadrantChart
    title Reach and engagement of campaigns
    x-axis Low Reach --&gt; High Reach
    y-axis Low Engagement --&gt; High Engagement
    quadrant-1 We should expand
    quadrant-2 Need to promote
    quadrant-3 Re-evaluate
    quadrant-4 May be improved
    Campaign A: [0.3, 0.6]
    Campaign B: [0.45, 0.23]
    Campaign C: [0.57, 0.69]
    Campaign D: [0.78, 0.34]
    Campaign E: [0.40, 0.34]
    Campaign F: [0.35, 0.78]
  </pre>
</div>


<hr>
<h2 id="contenido-de-forma-larga-y-estructura">Contenido de Forma Larga y Estructura</h2>
<p>El contenido de forma larga sirve un propósito importante en la era digital. Si bien el contenido corto y directo tiene su lugar, la exploración más profunda de temas requiere espacio para respirar y desarrollar ideas completamente.</p>
<h3 id="tabla-de-contenidos">Tabla de Contenidos</h3>
<p>Habilita la tabla de contenidos automática agregando <code>toc = true</code> a tu frontmatter. Esta página lo tiene habilitado—¡revisa la barra lateral!</p>
<h3 id="estructura-y-organización">Estructura y Organización</h3>
<p>El contenido de forma larga efectivo requiere una estructura cuidadosa:</p>
<p><strong>Jerarquía Clara</strong>: Usa encabezados y subencabezados para crear un esquema claro. Los lectores deberían poder escanear la estructura y entender el flujo de ideas de un vistazo.</p>
<p><strong>Progresión Lógica</strong>: Las ideas deben construirse unas sobre otras. Cada sección debe conectarse naturalmente con la siguiente, creando una narrativa o argumento cohesivo.</p>
<p><strong>Pausas Visuales</strong>: Divide el texto con:</p>
<ul>
<li>Subencabezados</li>
<li>Citas destacadas</li>
<li>Listas</li>
<li>Imágenes</li>
<li>Bloques de código</li>
<li>Espacios en blanco</li>
</ul>
<p><strong>Transiciones</strong>: Buenas transiciones entre secciones ayudan a los lectores a seguir tu línea de pensamiento. Proporcionan contexto y mantienen el impulso.</p>
<h3 id="técnicas-de-escritura">Técnicas de Escritura</h3>
<p><strong>Narrativa</strong>: Incluso el contenido técnico o educativo se beneficia de elementos narrativos. Las historias hacen que los conceptos abstractos sean concretos y memorables.</p>
<p><strong>Estructura de Oraciones Variada</strong>: Mezcla oraciones cortas y directas con otras más largas y complejas. Esto crea ritmo y mantiene a los lectores comprometidos.</p>
<p>Las oraciones cortas enfatizan puntos. Crean impacto. Las oraciones más largas, por otro lado, te permiten desarrollar ideas más matizadas y explorar las relaciones entre conceptos, creando una comprensión más sofisticada y en capas del tema en cuestión.</p>
<p><strong>Voz Activa</strong>: La voz activa crea escritura más clara y directa. En lugar de &ldquo;se cometieron errores,&rdquo; di &ldquo;cometimos errores.&rdquo; Es más honesto y más fácil de leer.</p>
<p><strong>Ejemplos Concretos</strong>: Los conceptos abstractos se vuelven más claros con ejemplos específicos. No solo le digas a los lectores algo—muéstrales con casos del mundo real, datos o escenarios.</p>
<hr>
<h2 id="alerta-de-contenido-desactualizado">Alerta de Contenido Desactualizado</h2>
<p>El tema puede alertar automáticamente a los lectores cuando el contenido está desactualizado. Habilítalo agregando a tu frontmatter:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">outdate_alert</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">outdate_alert_days</span> <span class="p">=</span> <span class="mi">90</span>
</span></span></code></pre></div><p>Cuando una publicación es más antigua que el número especificado de días, se mostrará una alerta en la parte superior de la publicación. Esto ayuda a mantener la calidad del contenido e informa a los lectores cuando la información puede estar desactualizada.</p>
<hr>
<h2 id="ejemplos-técnicos">Ejemplos Técnicos</h2>
<p>El tema sobresale en mostrar contenido técnico con formato adecuado y resaltado de sintaxis.</p>
<h3 id="ejemplos-de-algoritmos">Ejemplos de Algoritmos</h3>
<p><strong>Quick Sort</strong> (Python):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">quicksort</span><span class="p">(</span><span class="n">arr</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    Quick sort algorithm implementation.
</span></span></span><span class="line"><span class="cl"><span class="s2">    Time complexity: O(n log n) average case
</span></span></span><span class="line"><span class="cl"><span class="s2">    Space complexity: O(log n)
</span></span></span><span class="line"><span class="cl"><span class="s2">    &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">arr</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="n">pivot</span> <span class="o">=</span> <span class="n">arr</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">arr</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">left</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arr</span> <span class="k">if</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="n">pivot</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">middle</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arr</span> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">pivot</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="n">right</span> <span class="o">=</span> <span class="p">[</span><span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">arr</span> <span class="k">if</span> <span class="n">x</span> <span class="o">&gt;</span> <span class="n">pivot</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">quicksort</span><span class="p">(</span><span class="n">left</span><span class="p">)</span> <span class="o">+</span> <span class="n">middle</span> <span class="o">+</span> <span class="n">quicksort</span><span class="p">(</span><span class="n">right</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Example usage</span>
</span></span><span class="line"><span class="cl"><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">3</span><span class="p">,</span> <span class="mi">6</span><span class="p">,</span> <span class="mi">8</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">1</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">sorted_numbers</span> <span class="o">=</span> <span class="n">quicksort</span><span class="p">(</span><span class="n">numbers</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Sorted: </span><span class="si">{</span><span class="n">sorted_numbers</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span>
</span></span></code></pre></div><h3 id="archivos-de-configuración">Archivos de Configuración</h3>
<p><strong>Configuración TOML</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="nx">base_url</span> <span class="p">=</span> <span class="s2">&#34;https://example.com&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">title</span> <span class="p">=</span> <span class="s2">&#34;My Site&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">description</span> <span class="p">=</span> <span class="s2">&#34;A demo site&#34;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">compile_sass</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">minify_html</span> <span class="p">=</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">[</span><span class="nx">markdown</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="nx">highlight_code</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="nx">highlight_theme</span> <span class="p">=</span> <span class="s2">&#34;base16-ocean-dark&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">render_emoji</span> <span class="p">=</span> <span class="kc">false</span>
</span></span></code></pre></div><p><strong>Configuración JSON</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;name&#34;</span><span class="p">:</span> <span class="s2">&#34;my-project&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;version&#34;</span><span class="p">:</span> <span class="s2">&#34;1.0.0&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;description&#34;</span><span class="p">:</span> <span class="s2">&#34;A sample project&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;main&#34;</span><span class="p">:</span> <span class="s2">&#34;index.js&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;scripts&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;start&#34;</span><span class="p">:</span> <span class="s2">&#34;node index.js&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;dev&#34;</span><span class="p">:</span> <span class="s2">&#34;nodemon index.js&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;test&#34;</span><span class="p">:</span> <span class="s2">&#34;jest&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;build&#34;</span><span class="p">:</span> <span class="s2">&#34;webpack --mode production&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">},</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;dependencies&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;express&#34;</span><span class="p">:</span> <span class="s2">&#34;^4.18.0&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;dotenv&#34;</span><span class="p">:</span> <span class="s2">&#34;^16.0.0&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><hr>
<h2 id="características-adicionales">Características Adicionales</h2>
<h3 id="modo-oscuro">Modo Oscuro</h3>
<p>El tema incluye modo oscuro automático con persistencia en localStorage. Los usuarios pueden alternar entre temas claro y oscuro, y su preferencia se guarda.</p>
<h3 id="diseño-responsive">Diseño Responsive</h3>
<p>Todas las características son completamente responsive y funcionan hermosamente en dispositivos móviles, tabletas y escritorio.</p>
<h3 id="accesibilidad">Accesibilidad</h3>
<p>El tema prioriza la accesibilidad con:</p>
<ul>
<li>Contrastes de color compatibles con WCAG</li>
<li>HTML semántico</li>
<li>Soporte de navegación por teclado</li>
<li>Marcado amigable para lectores de pantalla</li>
</ul>
<h3 id="rendimiento">Rendimiento</h3>
<ul>
<li>Procesamiento de imágenes optimizado</li>
<li>JavaScript mínimo</li>
<li>Cargas de página rápidas</li>
<li>Filosofía smolweb</li>
</ul>
<hr>
<h2 id="conclusión">Conclusión</h2>
<p>El tema Apacible proporciona un conjunto completo de características para crear sitios web hermosos, accesibles y de alto rendimiento. Desde markdown básico hasta contenido técnico avanzado, todo está diseñado para funcionar juntos sin problemas.</p>
<p>Ya sea que estés escribiendo publicaciones de blog, documentación técnica o artículos de forma larga, el tema tiene las herramientas que necesitas para crear contenido atractivo y legible.</p>
<p>Para más información, consulta el <a href="https://git.sr.ht/~ckopac/apacible">README del tema</a> o explora el código fuente.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Primera nota al pie.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>Aquí está la segunda nota al pie.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content></entry></feed>