<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://your-docusaurus-site.example.com/game-manual/blog</id>
    <title>Manual de Juego Blog</title>
    <updated>2026-04-05T09:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://your-docusaurus-site.example.com/game-manual/blog"/>
    <subtitle>Manual de Juego Blog</subtitle>
    <icon>https://your-docusaurus-site.example.com/game-manual/img/game-manual.svg</icon>
    <entry>
        <title type="html"><![CDATA[Despliega tu propio Homelab con Rem Homelab]]></title>
        <id>https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab</id>
        <link href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab"/>
        <updated>2026-04-05T09:00:00.000Z</updated>
        <summary type="html"><![CDATA[¿Quieres iniciarte en el mundo del homelab pero no quieres complicarte? Quédate aquí y te explicaré por qué Rem Homelab puede ser tu solución.]]></summary>
        <content type="html"><![CDATA[<p>¿Quieres iniciarte en el mundo del <strong>homelab</strong> pero no quieres complicarte? Quédate aquí y te explicaré por qué <strong>Rem Homelab</strong> puede ser tu solución.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="qué-es-rem-homelab">¿Qué es Rem Homelab?<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#qu%C3%A9-es-rem-homelab" class="hash-link" aria-label="Enlace directo al ¿Qué es Rem Homelab?" title="Enlace directo al ¿Qué es Rem Homelab?">​</a></h2>
<p>Rem Homelab es un repositorio de github donde tengo guardadas todas mis configuraciones para múltiples servicios que utilizo en mi homelab. Con simples comandos puedes conectar servicios entre ellos separados por stacks por si no necesitas todo lo que uso.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="stacks">Stacks<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#stacks" class="hash-link" aria-label="Enlace directo al Stacks" title="Enlace directo al Stacks">​</a></h2>
<p>Como ya acabo de comentar, Rem Homelab se divide en diferentes stacks, haciéndolo modular y mucho más sencillo de mantener. Todo se coloca bajo <strong>Docker Compose</strong> pero no sé si en un futuro probaré K8s... (pero puede ser complicarme demasiado la vida)</p>
<p>En el momento de este blog tenemos los siguientes</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rem-ai">Rem-AI<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#rem-ai" class="hash-link" aria-label="Enlace directo al Rem-AI" title="Enlace directo al Rem-AI">​</a></h3>
<p>Despliega una interfaz web con modelos LLM de IA local importables desde la web de <a href="https://www.ollama.com/" target="_blank" rel="noopener noreferrer">ollama</a> o desde <a href="https://www.huggingface.co/" target="_blank" rel="noopener noreferrer">hugging face</a>. Perfecto para reemplazar soluciones cloud como ChatGPT o Claude para generación de código, chat y/o uso en apps propias.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="servicios">Servicios<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#servicios" class="hash-link" aria-label="Enlace directo al Servicios" title="Enlace directo al Servicios">​</a></h4>
<ul>
<li>OLlama</li>
<li>Open WebUI</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rem-dashboard">Rem-Dashboard<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#rem-dashboard" class="hash-link" aria-label="Enlace directo al Rem-Dashboard" title="Enlace directo al Rem-Dashboard">​</a></h3>
<p>Despliega servicios para crear dashboards de monitoreo. De momento simplemente usa Homarr, pero tengo pensado añadir servicios como Grafana y Loki para monitorear usos por servicio y otros datos.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="servicios-1">Servicios<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#servicios-1" class="hash-link" aria-label="Enlace directo al Servicios" title="Enlace directo al Servicios">​</a></h4>
<ul>
<li>Homarr</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rem-documentation">Rem-Documentation<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#rem-documentation" class="hash-link" aria-label="Enlace directo al Rem-Documentation" title="Enlace directo al Rem-Documentation">​</a></h3>
<p>Despliega servicios para gestión documental. De manera opcional podemos desplegar un servicio que nos ayudará a clasificar los documentos y analizar el contenido con los metadatos usando IA. Para este servicio podemos usar lo desplegado en el stack de rem-ai.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="servicios-2">Servicios<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#servicios-2" class="hash-link" aria-label="Enlace directo al Servicios" title="Enlace directo al Servicios">​</a></h4>
<ul>
<li>Paperless-ngx</li>
<li>Paperless-ai (Opcional con el profile ai)</li>
<li>PostgreSQL</li>
<li>Redis</li>
<li>Apache Tika</li>
<li>Gotenberg</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rem-media">Rem-Media<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#rem-media" class="hash-link" aria-label="Enlace directo al Rem-Media" title="Enlace directo al Rem-Media">​</a></h3>
<p>Despliega servicios para crear un servidor media (Ver películas u otros contenidos en dispositivos locales o remotos). Con este stack de servicios podemos automatizar mayormente la descarga, clasificación, obtención de metadatos y visualización del contenido. De manera opcional podemos desplegar un servicio que hará bypass en túneles de captcha (úsalo bajo tu riesgo).</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="servicios-3">Servicios<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#servicios-3" class="hash-link" aria-label="Enlace directo al Servicios" title="Enlace directo al Servicios">​</a></h4>
<ul>
<li>Jellyfin</li>
<li>Sonarr</li>
<li>Radarr</li>
<li>Seederr</li>
<li>Byparr (Opcional con profile bypass)</li>
<li>qBittorrent</li>
<li>Prowlarr</li>
<li>Jackett</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rem-proxy">Rem-Proxy<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#rem-proxy" class="hash-link" aria-label="Enlace directo al Rem-Proxy" title="Enlace directo al Rem-Proxy">​</a></h3>
<p>Despliega servicios para crear un reverse proxy y permitir la conexión a los servicios del homelab de manera externa. Puedes usar cualquier provider pero como es cómodo y gratis uso DuckDNS por eso tengo su servicio para que el DNS siempre apunte a la IP de nuestro router cuando cambie.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="servicios-4">Servicios<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#servicios-4" class="hash-link" aria-label="Enlace directo al Servicios" title="Enlace directo al Servicios">​</a></h4>
<ul>
<li>Nginx Proxy Manager</li>
<li>DuckDNS</li>
</ul>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="instalación">Instalación<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#instalaci%C3%B3n" class="hash-link" aria-label="Enlace directo al Instalación" title="Enlace directo al Instalación">​</a></h2>
<p>Para instalar Rem Homelab en tu máquina, primero asegura que tienes Docker instalado y el daemon esté arrancado.</p>
<p>Clonamos el proyecto desde su <a href="https://www.github.com/katarem/rem-homelab" target="_blank" rel="noopener noreferrer">enlace</a>.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">git clone https://www.github.com/katarem/rem-homelab</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">cd rem-homelab</span><br></span></code></pre></div></div>
<p>Creamos la network para todos los servicios. Para tener los diferentes módulos conectados entre sí necesitamos que usen una network ya creada.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker network create rem-network</span><br></span></code></pre></div></div>
<p>Para desplegar un stack, debemos crear un <code>.env</code> en su respectiva carpeta y añadimos los valores si es que son necesarios.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cp [stack]/.env.example [stack]/.env</span><br></span></code></pre></div></div>
<p>Una vez establecidas las variables de entorno del stack, debemos ejecutarlo con el comando</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker compose --env-file=[stack]/.env -f [stack]-compose.yaml up -d</span><br></span></code></pre></div></div>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="actualización">Actualización<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#actualizaci%C3%B3n" class="hash-link" aria-label="Enlace directo al Actualización" title="Enlace directo al Actualización">​</a></h2>
<p>Tan sólo se necesita ir a la carpeta donde tengas instalado Rem Homelab y traer nuevos cambios del repositorio.</p>
<blockquote>
<p><strong>Nota</strong>: Si has hecho cambios en local, puede que tengas conflictos al hacer git pull. Está bajo tu responsabilidad saber resolver los conflictos.</p>
</blockquote>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">cd rem-homelab</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">git pull</span><br></span></code></pre></div></div>
<p>Ahora, una vez teniendo el repositorio en la última versión, ejecutamos los stacks que hayan recibido actualización y tengamos desplegados</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker compose --env-file=[stack]/.env -f [stack]-compose.yaml up -d</span><br></span></code></pre></div></div>
<p>Al ejecutar este comando sólo se reiniciarán los contenedores que hayan recibido cambios en el yaml.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusión">Conclusión<a href="https://your-docusaurus-site.example.com/game-manual/blog/rem-homelab#conclusi%C3%B3n" class="hash-link" aria-label="Enlace directo al Conclusión" title="Enlace directo al Conclusión">​</a></h2>
<p>Con esta herramienta que hemos explorado hoy, el homelab puede ser una opción más sencilla para gente que no quiere indagar tanto en devops y tan sólo quiere ver sus servicios arrancar.</p>]]></content>
        <author>
            <name>katarem</name>
            <uri>https://katarem.vercel.app</uri>
        </author>
        <category label="Homelab" term="Homelab"/>
        <category label="Docker" term="Docker"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Prueba tus APIs REST con K6]]></title>
        <id>https://your-docusaurus-site.example.com/game-manual/blog/introduccion-a-k6</id>
        <link href="https://your-docusaurus-site.example.com/game-manual/blog/introduccion-a-k6"/>
        <updated>2025-06-29T11:15:00.000Z</updated>
        <summary type="html"><![CDATA[Cuando creamos APIs REST, solemos probar que devuelvan los datos correctos y que el código de respuesta sea el esperado. Pero muchas veces dejamos pasar algo fundamental: ¿qué pasa cuando no es un solo usuario haciendo peticiones, sino decenas, cientos o miles? ¿Nuestro sistema será capaz de aguantar esa carga sin caerse?]]></summary>
        <content type="html"><![CDATA[<p>Cuando creamos <strong>APIs REST</strong>, solemos probar que devuelvan los datos correctos y que el código de respuesta sea el esperado. Pero muchas veces dejamos pasar algo fundamental: ¿qué pasa cuando no es un solo usuario haciendo peticiones, sino decenas, cientos o miles? ¿Nuestro sistema será capaz de aguantar esa carga sin caerse?</p>
<p>No hace falta esperar a que el servidor se desplome en producción para darse cuenta de que no soporta la demanda. Por eso es vital hacer pruebas de carga desde temprano, para saber hasta dónde podemos llegar y planificar un escalado eficiente.</p>
<p>En este artículo te presento <strong>K6</strong>, una herramienta sencilla y poderosa para simular múltiples usuarios y medir el rendimiento real de tu API de forma automatizada.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="qué-es-k6">¿Qué es K6?<a href="https://your-docusaurus-site.example.com/game-manual/blog/introduccion-a-k6#qu%C3%A9-es-k6" class="hash-link" aria-label="Enlace directo al ¿Qué es K6?" title="Enlace directo al ¿Qué es K6?">​</a></h2>
<p><strong>K6</strong> es una librería de testing de javascript para poder hacer pruebas de performance en nuestras APIs de forma automatizada. Podremos simular cargas masivas, requestest en cadena, todo lo que se te pueda ocurrir que conlleve muchas request, se puede hacer con <strong>K6</strong>.</p>
<p>Debemos instalar K6 desde su <strong>página oficial</strong>. Una vez instalado el CLI de <strong>K6</strong>, podemos comprobar que está funcionando con:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[rem@arch ~]$ k6 --version</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">k6 v1.0.0 (commit/41b4984b75, go1.24.2, linux/amd64)</span><br></span></code></pre></div></div>
<p>Podemos hacer una prueba inicial con 1 usuario, primero escribiremos un script:</p>
<div class="language-js codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-js codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword module" style="color:#00009f">import</span><span class="token plain"> </span><span class="token imports">http</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">from</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'k6/http'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword module" style="color:#00009f">export</span><span class="token plain"> </span><span class="token keyword module" style="color:#00009f">default</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">function</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> url </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'https://httpbin.test.k6.io/post'</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  </span><span class="token keyword" style="color:#00009f">const</span><span class="token plain"> response </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> http</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">post</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">url</span><span class="token punctuation" style="color:#393A34">,</span><span class="token string" style="color:#e3116c">'hola mundo'</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
<p>Ahora arrancamos <strong>K6</strong> con lo siguiente:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">k6 run script.js</span><br></span></code></pre></div></div>
<p>Y saldrá algo como esto:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[rem@arch k6-test]$ k6 run script.js</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         /\      Grafana   /‾‾/  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /\  /  \     |\  __   /  /   </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   /  \/    \    | |/ /  /   ‾‾\ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  /          \   |   (  |  (‾)  |</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> / __________ \  |_|\_\  \_____/ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     execution: local</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        script: script.js</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output: -</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     scenarios: (100.00%) 1 scenario, 1 max VUs, 10m30s max duration (incl. graceful stop):</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              * default: 1 iterations for each of 1 VUs (maxDuration: 10m0s, gracefulStop: 30s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  █ TOTAL RESULTS </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    HTTP</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_duration......................: avg=33.4ms min=33.4ms med=33.4ms max=33.4ms p(90)=33.4ms p(95)=33.4ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_failed........................: 100.00% 1 out of 1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_reqs..............................: 1       0.765221/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    EXECUTION</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iteration_duration.....................: avg=1.3s   min=1.3s   med=1.3s   max=1.3s   p(90)=1.3s   p(95)=1.3s  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iterations.............................: 1       0.765221/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    vus....................................: 1       min=1      max=1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    vus_max................................: 1       min=1      max=1</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    NETWORK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_received..........................: 5.9 kB  4.5 kB/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_sent..............................: 576 B   441 B/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">running (00m01.3s), 0/1 VUs, 1 complete and 0 interrupted iterations</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">default ✓ [======================================] 1 VUs  00m01.3s/10m0s  1/1 iters, 1 per VU</span><br></span></code></pre></div></div>
<p>Estas pruebas como podemos ver dan estadísticas enfocadas al rendimiento bruto de nuestra aplicación, tendremos muchísimos datos para poder tener una estimación realista de como se comportará nuestra API en un entorno real.</p>
<p>Si queremos que 5 usuarios arranquen la request:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[rem@arch k6-test]$ k6 run script.js --vus 5 --duration 30s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         /\      Grafana   /‾‾/  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /\  /  \     |\  __   /  /   </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   /  \/    \    | |/ /  /   ‾‾\ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  /          \   |   (  |  (‾)  |</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> / __________ \  |_|\_\  \_____/ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     execution: local</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        script: script.js</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output: -</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     scenarios: (100.00%) 1 scenario, 5 max VUs, 1m0s max duration (incl. graceful stop):</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              * default: 5 looping VUs for 30s (gracefulStop: 30s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  █ TOTAL RESULTS </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    HTTP</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_duration......................: avg=32.26ms min=25.53ms med=28.37ms max=252.96ms p(90)=30.02ms p(95)=35.18ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_failed........................: 100.00% 4605 out of 4605</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_reqs..............................: 4605    153.412632/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    EXECUTION</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iteration_duration.....................: avg=32.55ms min=25.61ms med=28.51ms max=253.09ms p(90)=30.18ms p(95)=35.65ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iterations.............................: 4605    153.412632/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    vus....................................: 5       min=5            max=5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    vus_max................................: 5       min=5            max=5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    NETWORK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_received..........................: 6.1 MB  202 kB/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_sent..............................: 402 kB  13 kB/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">running (0m30.0s), 0/5 VUs, 4605 complete and 0 interrupted iterations</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">default ✓ [======================================] 5 VUs  30s</span><br></span></code></pre></div></div>
<p>Vemos que la media sigue sin cambiar, eso es porque esta API REST que estamos probando es bastante robusta, hemos probado 5 usuarios concurrentes haciendo requests durante 30 segundos y se completaron 4605 requests sin error.</p>
<p>Al no pasarle iteraciones, han intentado todas las request que han podido durante ese tiempo.</p>
<p>Poniendo 50 iteraciones, será que se harán 50 requests entre 10 usuarios:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">[rem@arch k6-test]$  k6 run script.js --vus 10 -i 50</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">         /\      Grafana   /‾‾/  </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    /\  /  \     |\  __   /  /   </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">   /  \/    \    | |/ /  /   ‾‾\ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  /          \   |   (  |  (‾)  |</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> / __________ \  |_|\_\  \_____/ </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     execution: local</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        script: script.js</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        output: -</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">     scenarios: (100.00%) 1 scenario, 10 max VUs, 10m30s max duration (incl. graceful stop):</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">              * default: 50 iterations shared among 10 VUs (maxDuration: 10m0s, gracefulStop: 30s)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">  █ TOTAL RESULTS </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    HTTP</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_duration......................: avg=31.97ms min=27.22ms med=29.51ms max=41.86ms p(90)=41.64ms  p(95)=41.76ms </span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_req_failed........................: 100.00% 50 out of 50</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    http_reqs..............................: 50      113.112869/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    EXECUTION</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iteration_duration.....................: avg=87.67ms min=27.41ms med=29.59ms max=320ms   p(90)=319.58ms p(95)=319.68ms</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    iterations.............................: 50      113.112869/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    NETWORK</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_received..........................: 111 kB  252 kB/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    data_sent..............................: 9.2 kB  21 kB/s</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">running (00m00.4s), 00/10 VUs, 50 complete and 0 interrupted iterations</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">default ✓ [======================================] 10 VUs  00m00.4s/10m0s  50/50 shared iters</span><br></span></code></pre></div></div>
<p>Si necesitas tests más precisos te recomiendo ejecutar <code>k6 run --help</code> para obtener toda la información de los muchos parámetros que podemos utilizar para testing.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="conclusión">Conclusión<a href="https://your-docusaurus-site.example.com/game-manual/blog/introduccion-a-k6#conclusi%C3%B3n" class="hash-link" aria-label="Enlace directo al Conclusión" title="Enlace directo al Conclusión">​</a></h2>
<p>No basta con que tu API funcione para un usuario: hay que saber cómo se comporta bajo carga. <strong>K6</strong> es una herramienta sencilla y efectiva para hacer esas pruebas y obtener datos reales sobre el rendimiento.</p>
<p>Si aún no haces tests de carga, este es un gran momento para empezar. Y si ya los haces, K6 te facilitará mucho el trabajo.</p>]]></content>
        <author>
            <name>katarem</name>
            <uri>https://katarem.vercel.app</uri>
        </author>
        <category label="Testing" term="Testing"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Por qué usar StringBuilder]]></title>
        <id>https://your-docusaurus-site.example.com/game-manual/blog/por-que-stringbuilder</id>
        <link href="https://your-docusaurus-site.example.com/game-manual/blog/por-que-stringbuilder"/>
        <updated>2025-06-28T17:10:00.000Z</updated>
        <summary type="html"><![CDATA[Hoy aprenderemos para qué se usa StringBuilder y por qué es tan importante]]></summary>
        <content type="html"><![CDATA[<p>Hoy aprenderemos para qué se usa <code>StringBuilder</code> y por qué es tan importante</p>
<p>A veces usando Java, sobre todo cuando apenas nos enseñan el lenguaje, solemos hacer así no?</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">String</span><span class="token plain"> frase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Los primeros 100 números son: "</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    frase </span><span class="token operator" style="color:#393A34">+=</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">+</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">","</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">frase</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>Sí, imprimirá los primeros 100 números dentro del <code>String</code>, normalmente vemos el resultado y con eso conformes, no? ¿Qué pasa si te digo que en concatenaciones más "serias" esto puede patear la memoria de la JVM? Pues sí, concatenar Strings en bucles grandes puede llevar a problemas de memoria.</p>
<p>Java es un lenguaje orientado a objetos, y los objetos (como <code>String</code>) viven en el heap, es decir, la parte dinámica de la memoria. Ahora, aunque <code>+=</code> parece algo simple, lo que realmente está haciendo Java por debajo en cada vuelta del bucle es algo como esto:</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">String</span><span class="token plain"> frase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"Los primeros 100 números son: "</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    frase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">StringBuilder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">frase</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">","</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">frase</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>O sea, que en cada iteración:</p>
<ul>
<li>
<p>Se crea un <code>StringBuilder</code> nuevo con el contenido de <code>frase</code>.</p>
</li>
<li>
<p>Se le añade el número y la coma.</p>
</li>
<li>
<p>Y se transforma de nuevo en un <code>String</code>.</p>
</li>
</ul>
<p>Eso, una y otra vez, va generando montones de objetos nuevos que se almacenan en el heap. No lo notas si el bucle es pequeño, pero cuando escalas a bucles con miles o millones de iteraciones (o anidados), la cosa se pone fea: empieza a intervenir el Garbage Collector más seguido y el rendimiento de tu app cae.</p>
<p>¿Cómo lo solucionamos? Usamos <code>StringBuilder</code> de forma más inteligente:</p>
<div class="language-java codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-java codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token class-name">StringBuilder</span><span class="token plain"> frase </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token keyword" style="color:#00009f">new</span><span class="token plain"> </span><span class="token class-name">StringBuilder</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">"Los primeros 100 números son: "</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">int</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">1</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i </span><span class="token operator" style="color:#393A34">&lt;=</span><span class="token plain"> </span><span class="token number" style="color:#36acaa">100</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"> i</span><span class="token operator" style="color:#393A34">++</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    frase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">i</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">append</span><span class="token punctuation" style="color:#393A34">(</span><span class="token string" style="color:#e3116c">","</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token class-name">System</span><span class="token punctuation" style="color:#393A34">.</span><span class="token plain">out</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">println</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">frase</span><span class="token punctuation" style="color:#393A34">.</span><span class="token function" style="color:#d73a49">toString</span><span class="token punctuation" style="color:#393A34">(</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><br></span></code></pre></div></div>
<p>Así que ya sabes: si estás concatenando cadenas dentro de un bucle, no te quedes con el <code>+=</code> solo porque funciona. Usar <code>StringBuilder</code> no solo mejora tu código, también evita problemas de rendimiento cuando el programa empieza a crecer.</p>
<p>Este tipo de detalles marcan la diferencia cuando trabajas con más datos o en proyectos más grandes. Y lo mejor es que empiezas a pensar como la JVM: no solo en que algo funcione, sino en <strong>cómo lo está haciendo por dentro</strong>.</p>]]></content>
        <author>
            <name>katarem</name>
            <uri>https://katarem.vercel.app</uri>
        </author>
        <category label="Java" term="Java"/>
        <category label="Basics" term="Basics"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Quién es Katarem]]></title>
        <id>https://your-docusaurus-site.example.com/game-manual/blog/quien-soy</id>
        <link href="https://your-docusaurus-site.example.com/game-manual/blog/quien-soy"/>
        <updated>2025-05-28T17:00:00.000Z</updated>
        <summary type="html"><![CDATA[No sé si os lo habéis preguntado pero no soy la mona china que seguramente tenga de perfil en el momento.]]></summary>
        <content type="html"><![CDATA[<p>No sé si os lo habéis preguntado pero no soy la mona china que seguramente tenga de perfil en el momento.</p>
<p>Mi nombre es Cristian, soy desarrollador backend junior, con casi 2 años de experiencia en el sector me especializo en Java (y si aún recordase Kotlin...), sobre todo en la programación cloud con Spring Boot y Spring Cloud.</p>
<p>Aparte de lo que hago en el trabajo, me gusta mucho programar por mi cuenta, estáis bienvenidos a mirar los repositorios que tengo en mi perfil o los proyectos expuestos en mi portfolio (sí, los de backend también podemos llegar a crear webs).</p>
<p>Saliendo del tema informática, también me encantan el anime y los videojuegos. Mi anime favorito es One Piece, y mi videojuego al que más horas he viciado es al Lol (más de las que debería, pero bueno). Por lo general en anime, suelo ver Shonen, Seinen y romance (Shoujo), y de videojuegos quitando el mencionado me gustan juegos con buena historia o jugabilidad para un jugador, otro de mis favoritos es Subnautica (deberíais probarlo si no lo habéis hecho).</p>
<p>Bueno, dejo de yappear ya más sobre mí pero creo que si yo encontrase esta web me gustaría saber más de la persona que dedica su tiempo en escribir todas estas vainas y las sube a internet.</p>]]></content>
        <author>
            <name>katarem</name>
            <uri>https://katarem.vercel.app</uri>
        </author>
        <category label="Misc." term="Misc."/>
    </entry>
    <entry>
        <title type="html"><![CDATA[Hola Mundo]]></title>
        <id>https://your-docusaurus-site.example.com/game-manual/blog/hola-mundo</id>
        <link href="https://your-docusaurus-site.example.com/game-manual/blog/hola-mundo"/>
        <updated>2025-05-28T16:50:00.000Z</updated>
        <summary type="html"><![CDATA[Hello, te preguntarás qué web es esta. Te la resumo con su nombre: El Manual de Juego.]]></summary>
        <content type="html"><![CDATA[<p>Hello, te preguntarás qué web es esta. Te la resumo con su nombre: El Manual de Juego.</p>
<p>¿Qué qué es el <em>Manual de Juego</em> ?</p>
<p>Lo puedes definir un blog, una guía, un manual, una simple web... Esto va a ser un pozo donde voy a tirar todos mis conocimientos que voy adquiriendo como desarrollador de software.</p>
<p>Eres bienvenido a utilizar todo lo que encuentres aquí y también a sugerir o aportar lo que quieras, siempre que sea algo relacionado con informática claro...</p>
<p>Cualquier duda, aclaración, sugerencia, queja, o lo que sea, no tengo problemas en que se me contacte a través de mis redes.</p>
<p>Espero disfruten la web, la voy a hacer con todo mi cariño y conocimiento posibles.</p>]]></content>
        <author>
            <name>katarem</name>
            <uri>https://katarem.vercel.app</uri>
        </author>
        <category label="Misc." term="Misc."/>
    </entry>
</feed>