<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Documentacion tecnica on KnightLi Blog</title>
        <link>https://knightli.com/es/categories/technical-docs/</link>
        <description>Recent content in Documentacion tecnica on KnightLi Blog</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>es</language>
        <lastBuildDate>Wed, 20 May 2026 23:15:08 +0800</lastBuildDate><atom:link href="https://knightli.com/es/categories/technical-docs/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Los certificados de Windows Secure Boot expiran en 2026: cómo deben actualizar usuarios y administradores</title>
        <link>https://knightli.com/es/2026/05/20/windows-secure-boot-certificate-expiration-2026/</link>
        <pubDate>Wed, 20 May 2026 23:15:08 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/20/windows-secure-boot-certificate-expiration-2026/</guid>
        <description>&lt;p&gt;Microsoft actualizó su guía sobre la expiración de certificados de Windows Secure Boot y las actualizaciones de CA. El punto clave no es que &amp;ldquo;el PC dejará de arrancar cuando expire el certificado&amp;rdquo;. El problema real es que un grupo de certificados Secure Boot emitidos en 2011 empezará a expirar a partir de junio de 2026, y los dispositivos Windows necesitan migrar a los nuevos certificados de 2023 para seguir recibiendo futuras actualizaciones de protección en la fase temprana de arranque.&lt;/p&gt;
&lt;p&gt;Artículo original: &lt;a class=&#34;link&#34; href=&#34;https://support.microsoft.com/zh-cn/topic/windows-%E5%AE%89%E5%85%A8%E5%90%AF%E5%8A%A8%E8%AF%81%E4%B9%A6%E8%BF%87%E6%9C%9F%E5%92%8C-ca-%E6%9B%B4%E6%96%B0-7ff40d33-95dc-4c3c-8725-a9b95457578e&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Microsoft Support: Windows Secure Boot certificate expiration and CA updates&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&#34;de-qué-trata-esta-actualización&#34;&gt;De qué trata esta actualización
&lt;/h2&gt;&lt;p&gt;Secure Boot es una función de seguridad del firmware UEFI. Antes de que arranque el sistema operativo, verifica las firmas de cargadores de arranque, controladores UEFI, Option ROM y otros componentes, ayudando a bloquear bootkits, rootkits y otro malware de fase temprana.&lt;/p&gt;
&lt;p&gt;Esta validación depende de varias bases de datos y claves almacenadas en el firmware:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;KEK&lt;/code&gt;: clave de inscripción, usada para autorizar actualizaciones de las bases de datos de Secure Boot.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DB&lt;/code&gt;: base de datos de firmas permitidas, que decide qué componentes de arranque pueden ser confiables.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DBX&lt;/code&gt;: base de datos de firmas revocadas, usada para bloquear componentes conocidos como no confiables o riesgosos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Microsoft indica que un grupo de certificados de 2011 usado durante años por dispositivos Windows se acerca a su expiración, y que los certificados correspondientes ya existen en versiones de 2023. Esto incluye el certificado KEK usado para firmar actualizaciones de &lt;code&gt;DB&lt;/code&gt; / &lt;code&gt;DBX&lt;/code&gt;, la Windows UEFI CA usada para firmar el cargador de arranque de Windows, y la UEFI CA usada para cargadores de arranque de terceros, aplicaciones EFI y Option ROM.&lt;/p&gt;
&lt;h2 id=&#34;afectará-al-arranque&#34;&gt;¿Afectará al arranque?
&lt;/h2&gt;&lt;p&gt;La pregunta que más preocupa a la mayoría de usuarios es: después de que expiren los certificados en 2026, ¿el PC dejará de arrancar de repente?&lt;/p&gt;
&lt;p&gt;La respuesta de Microsoft es bastante clara: los dispositivos que no hayan recibido los nuevos certificados de 2023 podrán seguir arrancando y funcionando normalmente, y las actualizaciones estándar de Windows seguirán instalándose. El problema es que esos dispositivos ya no podrán recibir nuevas protecciones relacionadas con la fase temprana de arranque, como actualizaciones de Windows Boot Manager, actualizaciones de la base de datos de Secure Boot, actualizaciones de listas de revocación y mitigaciones para vulnerabilidades de arranque descubiertas más adelante.&lt;/p&gt;
&lt;p&gt;Así que se parece más a una cadena de protección de seguridad que envejece que a un problema simple de &amp;ldquo;el sistema queda obsoleto de inmediato&amp;rdquo;. A corto plazo, la máquina puede seguir funcionando. A largo plazo, bajará su capacidad de defensa frente a nuevos bootkits, vulnerabilidades de la cadena de arranque y componentes revocados.&lt;/p&gt;
&lt;h2 id=&#34;qué-deben-hacer-los-usuarios-normales&#34;&gt;Qué deben hacer los usuarios normales
&lt;/h2&gt;&lt;p&gt;Los usuarios normales no necesitan editar manualmente las claves de Secure Boot, y no deberían borrar, restablecer o importar certificados en BIOS / UEFI sin una instrucción clara.&lt;/p&gt;
&lt;p&gt;El enfoque más seguro es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Mantener Windows Update activado e instalar actualizaciones acumulativas.&lt;/li&gt;
&lt;li&gt;Instalar actualizaciones de firmware, BIOS, UEFI y controladores proporcionadas por el fabricante del PC.&lt;/li&gt;
&lt;li&gt;No mantener Secure Boot desactivado a largo plazo solo por problemas temporales de compatibilidad.&lt;/li&gt;
&lt;li&gt;Si BitLocker está activado, confirmar que la clave de recuperación está disponible antes de cambios relacionados con firmware o Secure Boot.&lt;/li&gt;
&lt;li&gt;Usar &lt;code&gt;msinfo32&lt;/code&gt; para revisar &amp;ldquo;Secure Boot State&amp;rdquo; y confirmar que Secure Boot está activado.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En PCs domésticos, el riesgo principal normalmente no es &amp;ldquo;no saber operar&amp;rdquo;, sino dejar el firmware sin actualizar durante demasiado tiempo. Muchos cambios relacionados con Secure Boot en portátiles y equipos de marca dependen al final del soporte de firmware del OEM.&lt;/p&gt;
&lt;h2 id=&#34;qué-deben-vigilar-los-administradores-de-empresa&#34;&gt;Qué deben vigilar los administradores de empresa
&lt;/h2&gt;&lt;p&gt;En entornos empresariales, el problema no está en una sola máquina. Está en la mezcla de modelos de dispositivos, versiones de firmware, políticas de cifrado, herramientas de despliegue y componentes de arranque de terceros.&lt;/p&gt;
&lt;p&gt;Conviene empezar por cuatro cosas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inventariar modelos de dispositivos, versiones de Windows, estado de Secure Boot, versiones de firmware y estado de BitLocker.&lt;/li&gt;
&lt;li&gt;Probar primero en modelos representativos y ampliar el despliegue gradualmente.&lt;/li&gt;
&lt;li&gt;Poner actualizaciones de Windows, firmware OEM, copia de claves de recuperación y flujos PXE / MDT / ConfigMgr / Intune dentro de un mismo plan de cambio.&lt;/li&gt;
&lt;li&gt;Validar si los medios de recuperación, herramientas de imagen, software de seguridad de terceros y cargadores de arranque de doble sistema siguen arrancando normalmente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La documentación de Microsoft también ofrece rutas para dispositivos gestionados por IT mediante registro, directivas de grupo, WinCS API, Intune y ejemplos de monitorización. Para empresas, esta actualización de certificados no debería tratarse como un parche común. Debe probarse, desplegarse por fases y acompañarse de un plan de reversión como cambio de nivel firmware.&lt;/p&gt;
&lt;h2 id=&#34;doble-arranque-y-herramientas-de-arranque-de-terceros-requieren-más-cuidado&#34;&gt;Doble arranque y herramientas de arranque de terceros requieren más cuidado
&lt;/h2&gt;&lt;p&gt;Si un dispositivo usa doble arranque con Linux, un cargador de arranque de terceros, aplicaciones EFI con firma personalizada, medios de recuperación antiguos o herramientas de despliegue offline, esta actualización merece validación anticipada.&lt;/p&gt;
&lt;p&gt;La razón es que Microsoft ha separado con más detalle partes del modelo de confianza original. Por ejemplo, la confianza para cargadores de arranque de terceros y Option ROM ya no está completamente agrupada. Esto ayuda a reducir el alcance de confianza, pero también significa que componentes de arranque antiguos, versiones sin actualizar de shim / GRUB, medios de recuperación viejos o herramientas de arranque personalizadas podrían encontrar más problemas de confianza de firma en el futuro.&lt;/p&gt;
&lt;p&gt;La regla es simple: no esperes a que expiren los certificados para descubrir que tu USB de recuperación tampoco arranca. Las máquinas importantes deberían probar al menos una vez el flujo real de recuperación antes de tiempo.&lt;/p&gt;
&lt;h2 id=&#34;qué-no-conviene-hacer&#34;&gt;Qué no conviene hacer
&lt;/h2&gt;&lt;p&gt;Este tipo de problema parece una &amp;ldquo;expiración de certificado&amp;rdquo;, así que es tentador entrar en BIOS y cambiar claves manualmente. Salvo que el fabricante o la documentación de Microsoft lo pidan claramente, no es recomendable.&lt;/p&gt;
&lt;p&gt;No dejes Secure Boot desactivado a largo plazo. No borres directamente Secure Boot keys en dispositivos de producción. No copies la configuración de firmware de un dispositivo a otro lote de modelos distintos. Y no actualices solo Windows, ignores el firmware OEM y asumas que todo está resuelto.&lt;/p&gt;
&lt;p&gt;Una forma más razonable de verlo es: las actualizaciones de Windows resuelven el lado del sistema operativo, las actualizaciones de firmware OEM resuelven el lado de la plataforma, y la política de despliegue empresarial resuelve la consistencia a escala. Si falta una de las tres, después puede convertirse en un problema de arranque difícil de diagnosticar.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El impacto real de la expiración de certificados de Windows Secure Boot no es que todos los PCs dejen de arrancar el mismo día de 2026. El problema real es que los dispositivos con certificados antiguos perderán gradualmente la capacidad de recibir futuras actualizaciones de seguridad de Secure Boot.&lt;/p&gt;
&lt;p&gt;Los usuarios individuales deben mantener Windows y firmware actualizados, y evitar desactivar Secure Boot sin necesidad. Los administradores de empresa deberían empezar cuanto antes con inventario, pruebas y despliegue por fases. Cuanto más cerca esté junio de 2026, menos tiempo quedará para compatibilidad de firmware, validación de recuperación y planes de reversión masiva.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo usar Hugo aliases: redirecciones de URL antiguas y guía para corregir 404</title>
        <link>https://knightli.com/es/2026/05/17/hugo-aliases-url-redirect/</link>
        <pubDate>Sun, 17 May 2026 20:00:17 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/17/hugo-aliases-url-redirect/</guid>
        <description>&lt;p&gt;Los &lt;code&gt;aliases&lt;/code&gt; de Hugo sirven para crear redirecciones desde URL antiguas de una página.&lt;/p&gt;
&lt;p&gt;Cuando cambias la URL de un artículo, fusionas páginas, migras un blog o quieres corregir una URL incorrecta frecuente, puedes añadir &lt;code&gt;aliases&lt;/code&gt; en el Front Matter del artículo. Hugo genera páginas de redirección para esas direcciones antiguas y lleva a los visitantes a la página actual, evitando errores 404 innecesarios.&lt;/p&gt;
&lt;h2 id=&#34;para-qué-sirven-los-aliases&#34;&gt;Para qué sirven los aliases
&lt;/h2&gt;&lt;p&gt;Hay tres escenarios comunes.&lt;/p&gt;
&lt;p&gt;El primero es optimizar las URL de artículos.&lt;/p&gt;
&lt;p&gt;Por ejemplo, la URL antigua de un artículo podría ser:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/posts/tech/2023-01-01-hello/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después quizá quieras acortarla a:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/hello/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En ese caso, añade la URL antigua como alias en la nueva página. Los buscadores, referencias externas y enlaces sociales antiguos seguirán llegando al contenido.&lt;/p&gt;
&lt;p&gt;El segundo escenario es fusionar o migrar páginas.&lt;/p&gt;
&lt;p&gt;Si combinas varios artículos antiguos en uno nuevo, o migras desde Hexo, Typecho, WordPress u otra plataforma a Hugo, la estructura de URL antigua suele ser distinta a la del nuevo sitio. &lt;code&gt;aliases&lt;/code&gt; permite apuntar esas direcciones antiguas una por una a las páginas nuevas y reducir los 404 tras la migración.&lt;/p&gt;
&lt;p&gt;El tercer escenario es corregir errores de escritura.&lt;/p&gt;
&lt;p&gt;Algunas URL pueden haberse escrito mal, o sitios externos pueden haber enlazado a una ruta incorrecta. Si ese enlace incorrecto recibe tráfico, puedes crear un alias específico para guiar a los usuarios a la página correcta.&lt;/p&gt;
&lt;h2 id=&#34;sintaxis-básica&#34;&gt;Sintaxis básica
&lt;/h2&gt;&lt;p&gt;Solo tienes que añadir el campo &lt;code&gt;aliases&lt;/code&gt; en el Front Matter del artículo.&lt;/p&gt;
&lt;p&gt;Ejemplo en YAML:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Nuevo título del artículo&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;ld&#34;&gt;2026-05-17T12:00:00&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;+09&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;00&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/new-path/my-new-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;aliases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/old-path/old-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;../old-version/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Aquí &lt;code&gt;/old-path/old-article/&lt;/code&gt; es una ruta relativa al sitio. &lt;code&gt;../old-version/&lt;/code&gt; es una ruta relativa a la página actual.&lt;/p&gt;
&lt;p&gt;En la práctica, suele ser mejor usar rutas relativas al sitio, es decir, rutas que empiezan con &lt;code&gt;/&lt;/code&gt;. Son más claras y menos propensas a confusión si cambia la estructura de directorios del artículo.&lt;/p&gt;
&lt;h2 id=&#34;relación-con-el-campo-url&#34;&gt;Relación con el campo url
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;url&lt;/code&gt; define la nueva dirección de la página actual.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aliases&lt;/code&gt; define qué direcciones antiguas redirigen a esa nueva dirección.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/new-path/my-new-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;aliases&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;l&#34;&gt;/old-path/old-article/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de compilar el sitio, quien visite &lt;code&gt;/old-path/old-article/&lt;/code&gt; será redirigido a &lt;code&gt;/new-path/my-new-article/&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si el artículo no define &lt;code&gt;url&lt;/code&gt; explícitamente, Hugo genera la dirección de la página actual según la configuración de &lt;code&gt;permalinks&lt;/code&gt;, la fecha, el slug y otras reglas del sitio. &lt;code&gt;aliases&lt;/code&gt; seguirá apuntando a esa página final generada.&lt;/p&gt;
&lt;h2 id=&#34;cómo-implementa-hugo-las-redirecciones-por-defecto&#34;&gt;Cómo implementa Hugo las redirecciones por defecto
&lt;/h2&gt;&lt;p&gt;Por defecto, Hugo genera un archivo HTML independiente para cada alias.&lt;/p&gt;
&lt;p&gt;Ese archivo HTML normalmente usa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;http-equiv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;refresh&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto hace que el navegador redirija automáticamente desde la dirección antigua a la nueva.&lt;/p&gt;
&lt;p&gt;Este método es simple, portable y funciona bien en hosting estático común. Pero en esencia es una redirección del lado del navegador, no una redirección 301 / 302 devuelta por el servidor.&lt;/p&gt;
&lt;p&gt;Para sitios pequeños, esto suele ser suficiente. Mientras la dirección antigua se abra y termine llegando al nuevo artículo, se evitan problemas visibles de 404.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-considerar-redirecciones-del-servidor&#34;&gt;Cuándo considerar redirecciones del servidor
&lt;/h2&gt;&lt;p&gt;Si el sitio está desplegado en Netlify, Cloudflare Pages, Vercel u otra plataforma que soporte reglas de redirección, conviene considerar redirecciones del servidor.&lt;/p&gt;
&lt;p&gt;Las redirecciones del servidor tienen varias ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Responden de forma más directa, sin devolver primero una página HTML intermedia.&lt;/li&gt;
&lt;li&gt;Permiten usar con más claridad códigos 301 o 302.&lt;/li&gt;
&lt;li&gt;Centralizan grandes conjuntos de reglas de migración para revisión y mantenimiento.&lt;/li&gt;
&lt;li&gt;Dan más control sobre migraciones SEO.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un enfoque común es desactivar la generación predeterminada de páginas alias de Hugo y generar en su lugar el archivo de reglas que necesita la plataforma. Netlify suele usar &lt;code&gt;_redirects&lt;/code&gt;; Cloudflare Pages puede usar &lt;code&gt;_redirects&lt;/code&gt; o reglas propias de la plataforma.&lt;/p&gt;
&lt;p&gt;Si eliges esta ruta, revisa &lt;code&gt;disableAliases&lt;/code&gt; y los custom output formats de Hugo. No elimines simplemente &lt;code&gt;aliases&lt;/code&gt;, porque entonces los enlaces antiguos pasarán a ser 404.&lt;/p&gt;
&lt;h2 id=&#34;precauciones-al-usar-aliases&#34;&gt;Precauciones al usar aliases
&lt;/h2&gt;&lt;p&gt;Primero, no uses &lt;code&gt;aliases&lt;/code&gt; como excusa para cambiar URL sin cuidado.&lt;/p&gt;
&lt;p&gt;Cuando una URL se publica, entra en buscadores, RSS, redes sociales, marcadores y referencias externas. Cambiar URL con frecuencia crea coste de mantenimiento. &lt;code&gt;aliases&lt;/code&gt; encaja mejor para reparar problemas históricos que para fomentar cambios constantes de ruta.&lt;/p&gt;
&lt;p&gt;Segundo, evita bucles de redirección.&lt;/p&gt;
&lt;p&gt;Las direcciones antiguas deben apuntar a la nueva dirección de la página actual. No hagas que A redirija a B y B vuelva a A, ni permitas que varias páginas reclamen el mismo alias.&lt;/p&gt;
&lt;p&gt;Tercero, cuidado con los prefijos de idioma en sitios multilingües.&lt;/p&gt;
&lt;p&gt;Los sitios multilingües de Hugo suelen manejar rutas de idioma automáticamente. Si escribes un alias dentro de una versión de idioma, a veces no necesitas añadir manualmente prefijos como &lt;code&gt;/en/&lt;/code&gt; o &lt;code&gt;/zh-tw/&lt;/code&gt;. Si lo haces, puedes generar rutas duplicadas como &lt;code&gt;/en/en/...&lt;/code&gt;. Verifica siempre el resultado de la compilación local.&lt;/p&gt;
&lt;p&gt;Cuarto, revisa el directorio generado después del cambio.&lt;/p&gt;
&lt;p&gt;Tras añadir un alias, compila el sitio y comprueba si aparece el &lt;code&gt;index.html&lt;/code&gt; correspondiente a la ruta antigua dentro de &lt;code&gt;public&lt;/code&gt;. También confirma que el destino de la redirección dentro de ese archivo es correcto.&lt;/p&gt;
&lt;h2 id=&#34;un-flujo-práctico-de-comprobación&#34;&gt;Un flujo práctico de comprobación
&lt;/h2&gt;&lt;p&gt;Después de editar el Front Matter del artículo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Confirma la nueva URL del artículo actual.&lt;/li&gt;
&lt;li&gt;Añade la URL antigua en &lt;code&gt;aliases&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ejecuta una compilación de Hugo.&lt;/li&gt;
&lt;li&gt;Comprueba si &lt;code&gt;public&lt;/code&gt; contiene el &lt;code&gt;index.html&lt;/code&gt; de la URL antigua.&lt;/li&gt;
&lt;li&gt;Abre el HTML generado y confirma que redirige a la nueva URL.&lt;/li&gt;
&lt;li&gt;En páginas multilingües, revisa especialmente que no haya prefijos de idioma duplicados.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Este flujo detecta la mayoría de problemas de rutas antes del despliegue.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;aliases&lt;/code&gt; es la herramienta ligera de Hugo para conservar enlaces antiguos.&lt;/p&gt;
&lt;p&gt;Es especialmente útil al cambiar URL de artículos, migrar blogs, fusionar páginas y reparar rutas incorrectas. Los sitios estáticos comunes pueden usar directamente las páginas HTML de redirección generadas por Hugo. Los sitios más grandes, o aquellos con requisitos SEO más estrictos, pueden pasar a reglas de redirección del servidor.&lt;/p&gt;
&lt;p&gt;La clave no es solo que las URL nuevas se vean mejor. También hay que cuidar las URL antiguas que ya existen. Un sitio que lleva las URL antiguas de forma estable a las páginas nuevas tiene menos riesgo de perder tráfico histórico durante migraciones y rediseños.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gohugo.io/content-management/urls/#aliases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugo Documentation: Aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://gohugo.io/content-management/urls/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugo Documentation: URL management&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cómo elegir entre FreeRTOS, RT-Thread y Zephyr: diferencias de arquitectura y casos de uso</title>
        <link>https://knightli.com/es/2026/05/17/freertos-rt-thread-zephyr-rtos-comparison/</link>
        <pubDate>Sun, 17 May 2026 12:32:06 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/17/freertos-rt-thread-zephyr-rtos-comparison/</guid>
        <description>&lt;p&gt;FreeRTOS, RT-Thread y Zephyr suelen compararse como si fueran productos del mismo nivel. No lo son.&lt;/p&gt;
&lt;p&gt;La pregunta correcta no es cuál es mejor, sino qué necesita tu proyecto: un kernel ligero de planificación, un RTOS con buen soporte para MCU chinos, o un sistema operativo embebido completo y multiplataforma.&lt;/p&gt;
&lt;p&gt;En resumen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;FreeRTOS es un kernel RTOS muy extendido, con librerías IoT mantenidas por AWS.&lt;/li&gt;
&lt;li&gt;RT-Thread añade un ecosistema de componentes más completo y buen soporte para MCU domésticos.&lt;/li&gt;
&lt;li&gt;Zephyr, alojado en Linux Foundation, apuesta por subsistemas unificados, modelo de dispositivos, Devicetree y reutilización de aplicaciones entre fabricantes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;conclusión-rápida&#34;&gt;Conclusión rápida
&lt;/h2&gt;&lt;p&gt;Si solo necesitas tareas, colas, semáforos y temporizadores con poco consumo, FreeRTOS sigue siendo una opción segura.&lt;/p&gt;
&lt;p&gt;Si usas muchos MCU chinos y valoras BSP listos, documentación en chino y más componentes, RT-Thread es práctico.&lt;/p&gt;
&lt;p&gt;Si necesitas reutilizar código entre chips, placas y proveedores, y aceptas aprender Kconfig, Devicetree, west y el modelo de drivers, Zephyr es la ruta más orientada a ingeniería a largo plazo.&lt;/p&gt;
&lt;h2 id=&#34;freertos-pequeño-y-conocido&#34;&gt;FreeRTOS: pequeño y conocido
&lt;/h2&gt;&lt;p&gt;FreeRTOS destaca por ser pequeño, familiar y muy usado.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;FreeRTOS-Kernel&lt;/code&gt; se centra en kernel, ports y mecanismos básicos: scheduling, semáforos, colas, event groups, timers y memoria. En muchos proyectos, eso es exactamente lo que se necesita.&lt;/p&gt;
&lt;p&gt;Tras la adquisición por AWS, también existen librerías como coreMQTT, coreHTTP, OTA y Device Shadow, además de versiones LTS.&lt;/p&gt;
&lt;p&gt;Su límite es claro: no define un modelo de dispositivos común para GPIO, UART, I2C, pin control o HAL. Eso queda en manos del SDK del fabricante o de la arquitectura del equipo. Es flexible, pero cambiar de chip o placa puede arrastrar código de aplicación.&lt;/p&gt;
&lt;h2 id=&#34;rt-thread-componentes-y-soporte-doméstico&#34;&gt;RT-Thread: componentes y soporte doméstico
&lt;/h2&gt;&lt;p&gt;RT-Thread está más cerca de un RTOS completo.&lt;/p&gt;
&lt;p&gt;Incluye sistema de archivos, red, framework de dispositivos, USB, sensores, paquetes y herramientas. Para equipos chinos o proyectos con AT32, HC32, N32, APM32, HT32, Luat o HPMicro, puede acelerar mucho el arranque.&lt;/p&gt;
&lt;p&gt;La limitación es que muchos BSP siguen siendo específicos de placa y dependientes de librerías del fabricante. No ofrece el mismo nivel sistemático de descripción de hardware y portabilidad de aplicación que Zephyr.&lt;/p&gt;
&lt;h2 id=&#34;zephyr-una-plataforma-de-ingeniería-embebida&#34;&gt;Zephyr: una plataforma de ingeniería embebida
&lt;/h2&gt;&lt;p&gt;Zephyr no es solo &amp;ldquo;otro RTOS más grande&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Intenta unificar en un proyecto lo que normalmente queda disperso en SDKs, BSPs, HALs, drivers escritos a mano, scripts de configuración y código de aplicación.&lt;/p&gt;
&lt;p&gt;Sus piezas clave son Kconfig, Devicetree, drivers unificados, subsys, west, CMake y abstracciones de Board / SoC / shield. Se parece a una versión MCU de algunas ideas de Linux embebido.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-importa-devicetree&#34;&gt;Por qué importa Devicetree
&lt;/h2&gt;&lt;p&gt;Zephyr procesa DTS y overlays durante la compilación, genera cabeceras como &lt;code&gt;devicetree_generated.h&lt;/code&gt; y expone información con macros &lt;code&gt;DT_&lt;/code&gt;. Así, gran parte de la selección de hardware queda resuelta en build time, no en runtime.&lt;/p&gt;
&lt;p&gt;Esto separa hardware y aplicación, permite cambiar de placa tocando principalmente DTS / overlay, y reduce la necesidad de llenar &lt;code&gt;main.c&lt;/code&gt; con detalles de registros, pines y HAL.&lt;/p&gt;
&lt;h2 id=&#34;código-de-aplicación-más-limpio&#34;&gt;Código de aplicación más limpio
&lt;/h2&gt;&lt;p&gt;En proyectos MCU tradicionales, inicialización, pines, interrupciones, debounce, máquinas de estado y lógica de negocio se mezclan fácilmente.&lt;/p&gt;
&lt;p&gt;Zephyr intenta separarlo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conexiones de hardware en DTS / overlay.&lt;/li&gt;
&lt;li&gt;Opciones en Kconfig / &lt;code&gt;prj.conf&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Drivers en mainline o módulos.&lt;/li&gt;
&lt;li&gt;Aplicación centrada en eventos de negocio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es valioso cuando hay varias placas, varios chips y mantenimiento largo.&lt;/p&gt;
&lt;h2 id=&#34;coste-de-recursos&#34;&gt;Coste de recursos
&lt;/h2&gt;&lt;p&gt;Zephyr puede usar más Flash que un FreeRTOS mínimo porque incorpora drivers, subsistemas y objetos de dispositivo. Pero esa infraestructura se reutiliza cuando crecen los periféricos y variantes.&lt;/p&gt;
&lt;p&gt;Si el proyecto es fijo y pequeño, FreeRTOS puede ser más eficiente. Si el proyecto crece en placas y periféricos, Zephyr puede amortizar mejor esa base.&lt;/p&gt;
&lt;h2 id=&#34;cómo-elegir&#34;&gt;Cómo elegir
&lt;/h2&gt;&lt;p&gt;Elige FreeRTOS para hardware fijo, recursos ajustados y necesidades de scheduling simples.&lt;/p&gt;
&lt;p&gt;Elige RT-Thread para muchos MCU domésticos, documentación china, BSP disponibles y componentes integrados.&lt;/p&gt;
&lt;p&gt;Elige Zephyr para reutilización entre placas, drivers unificados, mantenimiento largo y una arquitectura más cercana al mundo Linux.&lt;/p&gt;
&lt;h2 id=&#34;cuándo-no-usar-zephyr&#34;&gt;Cuándo no usar Zephyr
&lt;/h2&gt;&lt;p&gt;No conviene adoptar Zephyr si el proyecto es de una sola placa, el equipo no tiene tiempo de aprender Kconfig / Devicetree, el chip no está bien soportado upstream, o el producto ya está estable en producción.&lt;/p&gt;
&lt;p&gt;Empieza con una placa bien soportada y prueba LED, UART, GPIO, input e I2C / SPI antes de migrar un producto real.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;FreeRTOS resuelve scheduling. RT-Thread añade componentes y soporte fuerte para MCU domésticos. Zephyr intenta reorganizar la ingeniería de software MCU alrededor de subsistemas unificados, Devicetree y portabilidad de aplicación.&lt;/p&gt;
&lt;p&gt;Para dispositivos pequeños y fijos, FreeRTOS suele bastar. Para líneas de productos con MCU chinos, RT-Thread es práctico. Para productos multiplataforma y de larga vida, Zephyr merece inversión.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.aws.amazon.com/freertos/latest/userguide/freertos-architecture.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;FreeRTOS architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://aws.amazon.com/about-aws/whats-new/2024/07/freertos-long-term-support-version/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AWS: FreeRTOS 202406 LTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/RT-Thread/rt-thread/releases&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;RT-Thread releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.zephyrproject.org/latest/boards/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Zephyr supported boards&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.zephyrproject.org/latest/build/dts/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Zephyr Devicetree documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Evolución de la arquitectura de los LLM entre 2023 y 2026: tokenizadores, codificación posicional, atención, MoE, normalización y funciones de activación</title>
        <link>https://knightli.com/es/2026/05/17/llm-architecture-evolution-2023-2026/</link>
        <pubDate>Sun, 17 May 2026 08:53:29 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/17/llm-architecture-evolution-2023-2026/</guid>
        <description>&lt;p&gt;Entre 2023 y 2026, la arquitectura de los LLM pareció cambiar en muchas direcciones: los tokenizadores se hicieron más grandes, la codificación posicional se desplazó hacia RoPE, la atención pasó de MHA a GQA, ventanas deslizantes y MLA, MoE volvió a ser una opción dominante, y la normalización y las funciones de activación se movieron hacia combinaciones como RMSNorm y SwiGLU.&lt;/p&gt;
&lt;p&gt;Pero la idea principal no es que Transformer haya sido reemplazado. La idea central es que el núcleo Transformer siguió vigente, mientras casi todos sus componentes se optimizaron para contextos más largos, menor coste de inferencia, mayor eficiencia de entrenamiento y mejor capacidad multilingüe.&lt;/p&gt;
&lt;h2 id=&#34;primero-la-vista-general&#34;&gt;Primero, la vista general
&lt;/h2&gt;&lt;p&gt;Un LLM puede dividirse aproximadamente en varias partes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tokenizador: convierte texto en tokens que el modelo puede entender.&lt;/li&gt;
&lt;li&gt;Codificación posicional: indica al modelo dónde está cada token en la secuencia.&lt;/li&gt;
&lt;li&gt;Mecanismo de atención: decide qué contexto debe mirar cada token.&lt;/li&gt;
&lt;li&gt;Red feed-forward: aplica transformaciones no lineales más complejas en cada posición.&lt;/li&gt;
&lt;li&gt;Normalización: estabiliza el entrenamiento.&lt;/li&gt;
&lt;li&gt;Función de activación: da capacidad no lineal a la red.&lt;/li&gt;
&lt;li&gt;MoE: divide parte de la red feed-forward en varios expertos y activa solo algunos cada vez.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La evolución de 2023 a 2026 puede entenderse como la optimización sucesiva de estas piezas.&lt;/p&gt;
&lt;h2 id=&#34;tokenizadores-de-dividir-texto-a-ahorrar-tokens&#34;&gt;Tokenizadores: de “dividir texto” a “ahorrar tokens”
&lt;/h2&gt;&lt;p&gt;El tokenizador convierte lenguaje natural en secuencias de tokens. El modelo no ve el texto directamente; ve IDs de tokens.&lt;/p&gt;
&lt;p&gt;Los tokenizadores anteriores solían ser más eficientes en inglés y menos eficientes para chino, código y texto multilingüe. Si una misma frase se divide en demasiadas piezas pequeñas, consume más ventana de contexto y aumenta tanto el coste de entrenamiento como el de inferencia.&lt;/p&gt;
&lt;p&gt;Una tendencia clara de los últimos años es tener vocabularios más grandes y mejor soporte multilingüe. Llama 3 usa un vocabulario de 128K tokens, y Meta explicó que esto codifica el lenguaje de forma más eficiente y mejora el rendimiento del modelo. Qwen, DeepSeek y otros modelos también prestan mucha atención a la eficiencia de tokens en chino, código y escenarios multilingües.&lt;/p&gt;
&lt;p&gt;Para principiantes: cuanto mejor es el tokenizador, menos fragmentado queda el mismo texto y más información útil cabe en la misma longitud de contexto.&lt;/p&gt;
&lt;h2 id=&#34;codificación-posicional-rope-se-volvió-dominante&#34;&gt;Codificación posicional: RoPE se volvió dominante
&lt;/h2&gt;&lt;p&gt;El lenguaje tiene orden. Las mismas palabras pueden cambiar por completo de significado si se reordenan. La codificación posicional introduce esa información de orden en el modelo.&lt;/p&gt;
&lt;p&gt;Los primeros Transformers usaban codificación posicional absoluta, donde la posición 1, la posición 2 y la posición 3 tenían vectores propios. Los LLM posteriores adoptaron con frecuencia RoPE, o Rotary Positional Embedding. RoPE integra la información de posición dentro del cálculo de atención y es más amigable para extender el contexto.&lt;/p&gt;
&lt;p&gt;Desde la familia Llama hasta muchos modelos abiertos, RoPE se ha convertido en un estándar de facto. Para soportar contextos más largos, los modelos también pueden ajustar la base frequency de RoPE, aplicar RoPE scaling o combinarlo con atención de ventana deslizante o atención por bloques.&lt;/p&gt;
&lt;p&gt;En pocas palabras, RoPE no hace que un modelo sea “mágicamente más inteligente”; ayuda a que el modelo maneje mejor relaciones de posición relativa en textos largos.&lt;/p&gt;
&lt;h2 id=&#34;atención-de-mha-a-gqa-ventanas-deslizantes-y-mla&#34;&gt;Atención: de MHA a GQA, ventanas deslizantes y MLA
&lt;/h2&gt;&lt;p&gt;La atención es el núcleo de Transformer. Permite que cada token mire los tokens más relevantes del contexto para la tarea actual.&lt;/p&gt;
&lt;p&gt;La versión clásica es MHA, o Multi-Head Attention. Tiene múltiples cabezas de atención, cada una aprendiendo una forma distinta de enfocar. El problema es que, a medida que crecen el modelo y el contexto, el KV cache se vuelve costoso y sube el coste de inferencia.&lt;/p&gt;
&lt;p&gt;Después de 2023, la principal dirección de optimización de la atención fue reducir el coste de inferencia.&lt;/p&gt;
&lt;p&gt;GQA, o Grouped-Query Attention, fue un paso importante. Permite que varias query heads compartan menos key/value heads, reduciendo la presión del KV cache. Meta adoptó explícitamente GQA en Llama 3 para mejorar la eficiencia de inferencia.&lt;/p&gt;
&lt;p&gt;Mistral 7B representa otra dirección: atención de ventana deslizante. En lugar de hacer que cada token mire todo el historial, se centra principalmente en una ventana cercana, reduciendo la presión computacional de secuencias largas. Para muchas tareas, el contexto local ya es muy útil.&lt;/p&gt;
&lt;p&gt;DeepSeek-V2/V3 llevó esta optimización más lejos con MLA, o Multi-head Latent Attention. Su objetivo es comprimir el KV cache y reducir la presión de memoria durante la inferencia. El informe técnico de DeepSeek-V3 lista MLA y DeepSeekMoE como elementos centrales de su arquitectura.&lt;/p&gt;
&lt;p&gt;Estas técnicas pueden resumirse así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MHA: enfoque clásico, fuerte pero caro.&lt;/li&gt;
&lt;li&gt;GQA: reduce mucho el coste de KV cache con poca pérdida de expresividad.&lt;/li&gt;
&lt;li&gt;Atención de ventana deslizante: reduce el coste de atención global en contextos largos.&lt;/li&gt;
&lt;li&gt;MLA: comprime aún más la caché de atención para una inferencia eficiente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;moe-muchos-parámetros-pero-solo-algunos-se-usan-cada-vez&#34;&gt;MoE: muchos parámetros, pero solo algunos se usan cada vez
&lt;/h2&gt;&lt;p&gt;MoE significa Mixture of Experts.&lt;/p&gt;
&lt;p&gt;Un modelo denso activa todos sus parámetros para cada token. MoE coloca muchos expertos dentro del modelo, pero enruta cada token solo a unos pocos. Así, el número total de parámetros puede ser muy grande, mientras que los parámetros activos por paso de inferencia siguen siendo más reducidos.&lt;/p&gt;
&lt;p&gt;Mixtral 8x7B, lanzado a finales de 2023, fue un momento importante para que MoE volviera al centro de la conversación. El artículo de Mistral explica que Mixtral 8x7B sigue en gran parte la arquitectura de Mistral 7B, pero reemplaza cada bloque feed-forward por 8 expertos y usa enrutamiento disperso para seleccionar parte de ellos durante el cálculo.&lt;/p&gt;
&lt;p&gt;Después, DeepSeek-V3 convirtió MoE en una ruta central. Tiene una cantidad total de parámetros muy grande, pero cada token activa solo una parte, usando DeepSeekMoE para reducir coste de entrenamiento e inferencia. Qwen3 y otras familias también ofrecen variantes densas y MoE, lo que muestra que MoE pasó de ser una técnica de investigación a una opción de ingeniería dominante.&lt;/p&gt;
&lt;p&gt;Para principiantes: un modelo denso es como una empresa donde todos asisten a cada reunión. MoE es como dividir la empresa en equipos expertos y llamar solo a los equipos relevantes para cada problema.&lt;/p&gt;
&lt;p&gt;MoE también tiene dificultades claras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El router debe aprender a enviar tokens a expertos adecuados.&lt;/li&gt;
&lt;li&gt;La carga debe equilibrarse para que no todos los tokens caigan en pocos expertos.&lt;/li&gt;
&lt;li&gt;El entrenamiento y la inferencia distribuidos son más complejos.&lt;/li&gt;
&lt;li&gt;Tener muchos parámetros totales no hace automáticamente barato el despliegue.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;normalización-rmsnorm-se-volvió-común&#34;&gt;Normalización: RMSNorm se volvió común
&lt;/h2&gt;&lt;p&gt;La normalización estabiliza la distribución de valores intermedios dentro de la red neuronal. Al entrenar modelos grandes, valores inestables dificultan la convergencia y pueden volver el entrenamiento menos fiable.&lt;/p&gt;
&lt;p&gt;Los primeros Transformers solían usar LayerNorm. Muchos modelos de estilo Llama pasaron después a RMSNorm. RMSNorm es más simple que LayerNorm: no calcula la media y se centra en la escala de raíz cuadrática media. Es más ligero y suficientemente estable en la práctica.&lt;/p&gt;
&lt;p&gt;No hace falta memorizar la fórmula. Basta con recordar que RMSNorm es un estabilizador más ligero. No determina por sí solo la capacidad del modelo, pero afecta a la estabilidad, la velocidad y la implementación.&lt;/p&gt;
&lt;h2 id=&#34;funciones-de-activación-de-relugelu-a-swiglu&#34;&gt;Funciones de activación: de ReLU/GELU a SwiGLU
&lt;/h2&gt;&lt;p&gt;Las funciones de activación añaden capacidad no lineal a las redes neuronales. Sin ellas, una red profunda se parecería demasiado a una transformación lineal.&lt;/p&gt;
&lt;p&gt;Los Transformers anteriores usaban a menudo GELU. En Llama, Mistral, Qwen, DeepSeek y otros LLM modernos, es más común ver SwiGLU o variantes similares de GLU. SwiGLU suele aparecer dentro de la red feed-forward y controla el flujo de información mediante compuertas.&lt;/p&gt;
&lt;p&gt;Una analogía sencilla: una función de activación normal es como un interruptor fijo, mientras que SwiGLU se parece más a una válvula aprendible. No solo decide si pasa información; también aprende qué información debe amplificarse.&lt;/p&gt;
&lt;p&gt;SwiGLU hace que la capa feed-forward sea algo más compleja, pero en la práctica de modelos grandes se ha vuelto un componente común de alto rendimiento.&lt;/p&gt;
&lt;h2 id=&#34;tendencia-general-de-2023-a-2026&#34;&gt;Tendencia general de 2023 a 2026
&lt;/h2&gt;&lt;p&gt;La línea temporal puede resumirse así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;2023: Llama, Mistral 7B, Mixtral y otros modelos abiertos popularizaron combinaciones como RoPE, RMSNorm, SwiGLU, GQA, atención de ventana deslizante y MoE.&lt;/li&gt;
&lt;li&gt;2024: Llama 3, Qwen2.5, DeepSeek-V2/V3 y otros ampliaron vocabularios, mejoraron contexto largo, reforzaron la eficiencia de inferencia y pusieron MoE y atención eficiente en el centro.&lt;/li&gt;
&lt;li&gt;2025: DeepSeek-V3/R1 hizo que más personas prestaran atención a MLA, DeepSeekMoE, FP8, MTP y a la conexión profunda entre optimización arquitectónica e ingeniería de sistemas.&lt;/li&gt;
&lt;li&gt;2026: la tendencia sigue siendo eficiencia y madurez de ingeniería: los modelos densos buscan capacidad general estable, los MoE amplían capacidad y la atención eficiente reduce el coste del contexto largo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El cambio más importante no fue que una pieza reemplazara a Transformer. Fue entender que sumar parámetros no basta: arquitectura, datos, sistema de entrenamiento y servicio de inferencia deben optimizarse juntos.&lt;/p&gt;
&lt;h2 id=&#34;cómo-debería-aprenderlo-un-principiante&#34;&gt;Cómo debería aprenderlo un principiante
&lt;/h2&gt;&lt;p&gt;Si empiezas desde cero, no conviene intentar leer todos los papers de entrada. Un mejor orden sería:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Entender la estructura básica de Transformer: token, embedding, attention y FFN.&lt;/li&gt;
&lt;li&gt;Entender por qué RoPE, RMSNorm y SwiGLU se volvieron comunes.&lt;/li&gt;
&lt;li&gt;Estudiar GQA y KV cache para comprender por qué la inferencia consume tanta memoria.&lt;/li&gt;
&lt;li&gt;Aprender MoE, especialmente la diferencia entre parámetros totales y parámetros activos.&lt;/li&gt;
&lt;li&gt;Finalmente, leer informes de modelos como DeepSeek-V3, Mixtral y Llama 3 para ubicar cada componente en modelos reales.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;No trates estos términos como conceptos aislados. La mayoría responden a la misma pregunta: cómo hacer modelos más fuertes que todavía puedan entrenarse, desplegarse y servir respuestas con rapidez.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;La evolución de la arquitectura de LLM entre 2023 y 2026 puede verse como la maduración de ingeniería de Transformer. Los tokenizadores reducen desperdicio de tokens, RoPE representa mejor la posición, GQA, la atención de ventana deslizante y MLA reducen el coste de atención, MoE amplía capacidad controlando la computación activa, y RMSNorm junto con SwiGLU hacen que el entrenamiento y la representación sean más estables y eficientes.&lt;/p&gt;
&lt;p&gt;Para principiantes, lo importante no es memorizar términos. Lo importante es captar la línea principal: casi todos los cambios modernos en arquitectura LLM tratan de equilibrar coste, eficiencia, longitud de contexto y escalabilidad.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ai.meta.com/blog/meta-llama-3/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Meta: Introducing Meta Llama 3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://mistral.ai/en/news/mixtral-of-experts&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Mistral AI: Mixtral of experts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2401.04088&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;arXiv: Mixtral of Experts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2412.19437&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;arXiv: DeepSeek-V3 Technical Report&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/deepseek-ai/DeepSeek-V3&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugging Face: DeepSeek-V3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Ejecutar apps Android en Ubuntu 26.04 LTS: instalación y uso de Waydroid</title>
        <link>https://knightli.com/es/2026/05/16/ubuntu-2604-lts-run-android-apps-waydroid/</link>
        <pubDate>Sat, 16 May 2026 17:34:59 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/16/ubuntu-2604-lts-run-android-apps-waydroid/</guid>
        <description>&lt;p&gt;En Ubuntu 26.04 LTS, la forma más realista de ejecutar apps Android sigue siendo &lt;code&gt;Waydroid&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Waydroid no es un emulador Android tradicional. Ejecuta un sistema Android basado en LineageOS dentro de un contenedor Linux. Consume menos recursos y se integra mejor con el escritorio, pero depende mucho de Wayland, del kernel, de los controladores gráficos y de la compatibilidad de cada app.&lt;/p&gt;
&lt;p&gt;Sirve bien para abrir herramientas Android ocasionales, probar APK o usar apps ligeras. Para juegos pesados, apps bancarias o un uso intensivo de servicios de Google, conviene bajar las expectativas.&lt;/p&gt;
&lt;h2 id=&#34;comprueba-si-encaja&#34;&gt;Comprueba si encaja
&lt;/h2&gt;&lt;p&gt;Ubuntu 26.04 LTS se publicó el 23 de abril de 2026. Sus requisitos de escritorio incluyen al menos una CPU de doble núcleo a 2 GHz, 6 GB de RAM y 25 GB de almacenamiento. Waydroid necesita recursos adicionales, así que es recomendable contar con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;8 GB de RAM o más;&lt;/li&gt;
&lt;li&gt;al menos 10 GB libres;&lt;/li&gt;
&lt;li&gt;una sesión Wayland funcional;&lt;/li&gt;
&lt;li&gt;controladores recientes de Intel, AMD o NVIDIA;&lt;/li&gt;
&lt;li&gt;tolerancia a problemas de compatibilidad en algunas apps.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La documentación de Waydroid también indica que Ubuntu 22.04 y versiones posteriores necesitan Wayland Session. Ubuntu 26.04 LTS ya va en esa dirección, lo que facilita el uso.&lt;/p&gt;
&lt;h2 id=&#34;instalar-waydroid&#34;&gt;Instalar Waydroid
&lt;/h2&gt;&lt;p&gt;Instala las dependencias básicas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install curl ca-certificates -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Añade el repositorio oficial:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s https://repo.waydro.id &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Instala Waydroid:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install waydroid -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después puedes abrirlo desde el menú de aplicaciones o desde la terminal.&lt;/p&gt;
&lt;h2 id=&#34;inicializar-android&#34;&gt;Inicializar Android
&lt;/h2&gt;&lt;p&gt;En el primer arranque, Waydroid debe inicializar la imagen del sistema Android. La imagen predeterminada suele bastar.&lt;/p&gt;
&lt;p&gt;Si no aparece la interfaz gráfica, inicia el contenedor:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo waydroid container start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Inicia la sesión de usuario:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid session start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Abre la interfaz completa de Android:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid show-full-ui
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Verás una interfaz parecida a una tableta Android. Las apps instaladas se pueden abrir dentro de Waydroid y algunas pueden aparecer en el lanzador de Ubuntu.&lt;/p&gt;
&lt;h2 id=&#34;instalar-apk&#34;&gt;Instalar APK
&lt;/h2&gt;&lt;p&gt;Si ya tienes un APK:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid app install app.apk
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Lista las apps instaladas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid app list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejecuta una app por nombre de paquete:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid app launch com.example.app
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto es útil para F-Droid, herramientas open source, builds de prueba o APK propios. Evita APK de origen desconocido, sobre todo si piden cuenta, pagos, contactos o SMS.&lt;/p&gt;
&lt;h2 id=&#34;modo-multiventana&#34;&gt;Modo multiventana
&lt;/h2&gt;&lt;p&gt;Por defecto Waydroid se comporta como una ventana Android completa. Para mostrar apps como ventanas de escritorio separadas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid prop &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; persist.waydroid.multi_windows &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Reinicia la sesión:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid session stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid session start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La experiencia depende de la app, del entorno de escritorio y de los controladores gráficos.&lt;/p&gt;
&lt;h2 id=&#34;instalar-google-play&#34;&gt;¿Instalar Google Play?
&lt;/h2&gt;&lt;p&gt;Waydroid no equivale a un dispositivo Android certificado por Google.&lt;/p&gt;
&lt;p&gt;Se puede intentar usar Google Play, Google Play Services y apps dependientes de Google, pero no conviene asumirlo como entorno estable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Los servicios de Google incluyen certificación de dispositivo y controles de riesgo de cuenta.&lt;/li&gt;
&lt;li&gt;Algunas apps revisan SafetyNet, Play Integrity, root, virtualización o huellas del dispositivo.&lt;/li&gt;
&lt;li&gt;Apps bancarias, de pago, juegos y streaming fallan con más frecuencia.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para herramientas normales, es mejor usar F-Droid, APK open source o versiones que no dependan de Google.&lt;/p&gt;
&lt;h2 id=&#34;problemas-comunes&#34;&gt;Problemas comunes
&lt;/h2&gt;&lt;p&gt;Si aparece una pantalla negra, confirma que usas Wayland:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$XDG_SESSION_TYPE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Deberías ver:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wayland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si el contenedor no está activo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo waydroid container start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si la sesión se queda bloqueada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid session stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid session start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para revisar logs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;waydroid log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En equipos NVIDIA puede haber más problemas de pila gráfica o controladores. Ubuntu 26.04 LTS ha mejorado con Wayland y NVIDIA, pero Waydroid no es una app nativa normal, así que los fallos de renderizado o ventana no son raros.&lt;/p&gt;
&lt;h2 id=&#34;diferencias-con-emuladores-y-máquinas-virtuales&#34;&gt;Diferencias con emuladores y máquinas virtuales
&lt;/h2&gt;&lt;p&gt;Waydroid se parece más a &amp;ldquo;Android en un contenedor&amp;rdquo; que a una VM completa.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Opción&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
          &lt;th&gt;Problema principal&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Waydroid&lt;/td&gt;
          &lt;td&gt;Apps ligeras, pruebas de APK, integración con Linux&lt;/td&gt;
          &lt;td&gt;Servicios de Google y algunas apps inestables&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Android Studio Emulator&lt;/td&gt;
          &lt;td&gt;Desarrollo y simulación de dispositivos&lt;/td&gt;
          &lt;td&gt;Alto consumo de recursos&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Máquina virtual&lt;/td&gt;
          &lt;td&gt;Pruebas aisladas y laboratorio&lt;/td&gt;
          &lt;td&gt;Gráficos y rendimiento más débiles&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;recomendación&#34;&gt;Recomendación
&lt;/h2&gt;&lt;p&gt;En Ubuntu 26.04 LTS, usa Waydroid como herramienta complementaria, no como sustituto total de una tableta Android.&lt;/p&gt;
&lt;p&gt;Encaja bien para F-Droid, pruebas de APK, uso temporal de una app sin versión Linux y un entorno Android ligero en el escritorio. Encaja mal para banca, pagos, juegos pesados, apps dependientes de Google Play y flujos que requieren notificaciones, segundo plano, ubicación, Bluetooth o cámara de forma fiable.&lt;/p&gt;
&lt;p&gt;Si solo quieres abrir apps Android de vez en cuando en Ubuntu, Waydroid es la primera opción a probar. No es perfecto, pero se instala rápido y encaja con la dirección Wayland de Ubuntu 26.04 LTS.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.waydro.id/usage/install-on-desktops&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Waydroid: Install Instructions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://documentation.ubuntu.com/release-notes/26.04/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ubuntu 26.04 LTS release notes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://canonical.com/blog/canonical-releases-ubuntu-26-04-lts-resolute-raccoon&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Canonical: anuncio de Ubuntu 26.04 LTS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía de migración de prompts para GPT-5.5: por qué conviene recortar antes de reescribir</title>
        <link>https://knightli.com/es/2026/05/15/gpt-5-5-prompting-guide/</link>
        <pubDate>Fri, 15 May 2026 01:25:27 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/15/gpt-5-5-prompting-guide/</guid>
        <description>&lt;p&gt;OpenAI actualizó la &lt;code&gt;GPT-5.5 prompting guide&lt;/code&gt; en su documentación de API. Lo más valioso de esta guía no es que ofrezca otra plantilla de prompt más larga, sino que recuerda algo importante: al migrar a GPT-5.5, muchos prompts antiguos deberían hacerse más cortos.&lt;/p&gt;
&lt;p&gt;Documentación oficial: &lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/api/docs/guides/prompt-guidance&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://developers.openai.com/api/docs/guides/prompt-guidance&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;En una frase, la dirección para prompts en GPT-5.5 es: escribir menos proceso y más resultado; apilar menos reglas y definir mejor los criterios de aceptación; usar menos instrucciones de tipo &amp;ldquo;siempre debe&amp;rdquo; y explicar cuándo detenerse, cuándo validar y cuándo buscar más evidencia.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-hay-que-reescribir-prompts-antiguos&#34;&gt;Por qué hay que reescribir prompts antiguos
&lt;/h2&gt;&lt;p&gt;Muchos prompts de producción se construyen por capas. Si el modelo es inestable, se añade una regla. Si falla una llamada a herramientas, se añade una prohibición. Si la salida es demasiado larga, se añade otro párrafo de formato. Con el tiempo, el system prompt se convierte en un manual de operaciones pesado.&lt;/p&gt;
&lt;p&gt;Ese estilo podía ser útil con modelos antiguos, porque el modelo necesitaba más restricciones paso a paso para no desviarse. Pero con GPT-5.5, la recomendación de OpenAI es clara: no migres el prompt stack antiguo tal cual.&lt;/p&gt;
&lt;p&gt;Especificar demasiado el proceso trae varios efectos secundarios:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Más ruido: el modelo tiene que encontrar las restricciones importantes dentro de muchas reglas viejas.&lt;/li&gt;
&lt;li&gt;Espacio de búsqueda más estrecho: el modelo se atreve menos a elegir soluciones más eficientes.&lt;/li&gt;
&lt;li&gt;Salida mecánica: parece ejecutar un guion, no resolver un problema.&lt;/li&gt;
&lt;li&gt;Reglas antiguas que se contradicen: tanto las tool calls como la respuesta final pueden empeorar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GPT-5.5 funciona mejor con prompts que describen el estado objetivo, las restricciones, la evidencia disponible y la salida final, en lugar de codificar cada paso.&lt;/p&gt;
&lt;h2 id=&#34;outcome-first-definir-primero-qué-significa-terminado&#34;&gt;outcome-first: definir primero qué significa terminado
&lt;/h2&gt;&lt;p&gt;La documentación oficial insiste en una dirección: GPT-5.5 funciona mejor con prompts outcome-first.&lt;/p&gt;
&lt;p&gt;Eso significa que el prompt debería definir primero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuál es el resultado objetivo.&lt;/li&gt;
&lt;li&gt;Qué cuenta como éxito.&lt;/li&gt;
&lt;li&gt;Qué restricciones no se pueden cruzar.&lt;/li&gt;
&lt;li&gt;Qué contexto está disponible.&lt;/li&gt;
&lt;li&gt;Qué campos o secciones debe incluir la respuesta final.&lt;/li&gt;
&lt;li&gt;Qué hacer cuando falta evidencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un estilo menos recomendable:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Primero revisa A, luego revisa B, después compara todos los campos, piensa en todas las excepciones, decide qué herramienta llamar, llama la herramienta y finalmente explica todo el proceso.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un estilo más adecuado para GPT-5.5:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Resuelve el problema del usuario. Criterios de éxito:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Tomar la decisión con base en la política y los datos de cuenta disponibles
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Si la acción está permitida, completarla antes de responder
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- La salida final incluye completed_actions, customer_message, blockers
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Si falta evidencia clave, preguntar solo los campos mínimos necesarios
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto no vuelve el prompt ambiguo. Traslada el control desde el &amp;ldquo;orden del proceso&amp;rdquo; hacia el &amp;ldquo;resultado y los límites&amp;rdquo;. El modelo puede elegir su ruta de búsqueda, razonamiento y uso de herramientas, pero debe cumplir los criterios de éxito.&lt;/p&gt;
&lt;h2 id=&#34;usar-menos-reglas-absolutas-y-más-reglas-de-decisión&#34;&gt;Usar menos reglas absolutas y más reglas de decisión
&lt;/h2&gt;&lt;p&gt;Los prompts antiguos suelen contener muchos &lt;code&gt;ALWAYS&lt;/code&gt;, &lt;code&gt;NEVER&lt;/code&gt;, &lt;code&gt;must&lt;/code&gt; y &lt;code&gt;only&lt;/code&gt;. No están prohibidos, pero deberían reservarse para restricciones que realmente no se pueden violar, como reglas de seguridad, campos obligatorios y acciones prohibidas.&lt;/p&gt;
&lt;p&gt;Para decisiones como &amp;ldquo;cuándo buscar&amp;rdquo;, &amp;ldquo;cuándo preguntar al usuario&amp;rdquo;, &amp;ldquo;cuándo seguir iterando&amp;rdquo; y &amp;ldquo;cuándo detenerse&amp;rdquo;, GPT-5.5 funciona mejor con reglas de decisión.&lt;/p&gt;
&lt;p&gt;Por ejemplo, no escribas solo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Siempre busca tres veces primero.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Mejor:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Empieza con una búsqueda que cubra la pregunta central. Si los primeros resultados ya soportan los hechos clave, deja de buscar y responde. Continúa buscando solo si la evidencia es contradictoria, falta o no basta para sostener la conclusión.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este estilo da margen de juicio al modelo y también una condición de parada. Para productos que usan web search, retrieval, file search o consultas de base de datos, esto es clave, porque cada tool call adicional añade latencia y coste.&lt;/p&gt;
&lt;h2 id=&#34;añadir-un-retrieval-budget&#34;&gt;Añadir un retrieval budget
&lt;/h2&gt;&lt;p&gt;Una clase de regla que vale la pena añadir a prompts de GPT-5.5 es el &lt;code&gt;retrieval budget&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;No es un presupuesto de dinero. Es una regla para detener la recuperación de información. Le dice al modelo cuándo la evidencia es suficiente, cuándo debe seguir buscando y cuándo debe reconocer que falta evidencia.&lt;/p&gt;
&lt;p&gt;Una formulación práctica:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Para preguntas normales, empieza con una búsqueda amplia usando palabras clave cortas y distintivas. Si los primeros resultados ya soportan la solicitud central, responde con base en esos resultados y no sigas buscando. Añade más retrieval solo si los resultados entran en conflicto, falta un hecho clave o la conclusión no queda soportada.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este tipo de regla reduce dos problemas frecuentes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Buscar demasiado poco y responder sin evidencia.&lt;/li&gt;
&lt;li&gt;Buscar demasiado y desperdiciar tiempo en un bucle de herramientas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Más importante aún, la documentación recuerda que no encontrar evidencia no debería convertirse automáticamente en un &amp;ldquo;no&amp;rdquo; factual. A veces la conducta correcta es decir que la evidencia es insuficiente o acotar la pregunta y seguir revisando.&lt;/p&gt;
&lt;h2 id=&#34;no-subir-reasoning-effort-demasiado-pronto&#34;&gt;No subir reasoning effort demasiado pronto
&lt;/h2&gt;&lt;p&gt;GPT-5.5 es más eficiente al razonar, así que OpenAI recomienda reevaluar &lt;code&gt;low&lt;/code&gt; y &lt;code&gt;medium&lt;/code&gt;, en lugar de subir reasoning effort cada vez que la calidad no parezca suficiente.&lt;/p&gt;
&lt;p&gt;Un orden más estable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Primero confirma si el prompt define claramente objetivo, formato de salida y condiciones de parada.&lt;/li&gt;
&lt;li&gt;Añade un ciclo de validación, como pruebas, citas, revisión o render checks.&lt;/li&gt;
&lt;li&gt;Añade reglas de persistencia y criterios de finalización para el uso de herramientas.&lt;/li&gt;
&lt;li&gt;Solo entonces sube reasoning effort si aún hace falta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En otras palabras, &lt;code&gt;reasoning.effort&lt;/code&gt; se parece más a una perilla final de ajuste. No debería sustituir un prompt bien diseñado.&lt;/p&gt;
&lt;p&gt;Si la tarea es clasificación corta, extracción de campos, enrutamiento de tickets o conversión de formato, empieza con bajo coste de razonamiento. Si se trata de síntesis de documentos largos, juicio entre fuentes conflictivas, escritura estratégica o investigación compleja, considera &lt;code&gt;medium&lt;/code&gt; o más.&lt;/p&gt;
&lt;h2 id=&#34;textverbosity-controla-la-salida-no-el-pensamiento&#34;&gt;text.verbosity controla la salida, no el pensamiento
&lt;/h2&gt;&lt;p&gt;GPT-5.5 permite controlar muy bien el formato de salida. La documentación oficial recomienda usar &lt;code&gt;text.verbosity&lt;/code&gt; junto con los requisitos de salida dentro del prompt.&lt;/p&gt;
&lt;p&gt;El valor por defecto de &lt;code&gt;text.verbosity&lt;/code&gt; es &lt;code&gt;medium&lt;/code&gt;. Si el producto necesita respuestas más cortas y limpias, se puede usar &lt;code&gt;low&lt;/code&gt;. Pero eso no significa que todo tenga que ser corto.&lt;/p&gt;
&lt;p&gt;Una pauta típica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mantener breves las actualizaciones de estado y el resumen final para el usuario.&lt;/li&gt;
&lt;li&gt;Seguir exigiendo legibilidad cuando se genera código, configuración o resultados estructurados.&lt;/li&gt;
&lt;li&gt;No sacrificar campos completos, citas o caveats necesarios solo por ser &amp;ldquo;breve&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esto es especialmente útil en productos de código. Las respuestas de chat pueden ser más cortas, pero el código generado puede seguir exigiendo nombres legibles, estructura clara y comentarios necesarios.&lt;/p&gt;
&lt;h2 id=&#34;preamble-y-phase-hacer-visibles-las-tareas-largas&#34;&gt;preamble y phase: hacer visibles las tareas largas
&lt;/h2&gt;&lt;p&gt;En tareas complejas, GPT-5.5 puede razonar, planificar o preparar tool calls antes de emitir texto visible. En productos con streaming, el usuario nota la espera hasta el primer token.&lt;/p&gt;
&lt;p&gt;La recomendación oficial es: para tareas de varios pasos, intensivas en herramientas o de larga duración, deja que el modelo emita primero un preamble breve. No tiene que explicar todo el plan; basta con decir qué hará primero.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Primero revisaré los archivos relevantes y la configuración existente, y luego propondré los cambios.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En workflows largos o intensivos en herramientas con Responses API, también hay que prestar atención al &lt;code&gt;phase&lt;/code&gt; del assistant item. Si la aplicación usa &lt;code&gt;previous_response_id&lt;/code&gt;, la API conserva automáticamente el estado anterior del assistant. Si la aplicación reproduce manualmente la salida del assistant, debe conservar el valor original de &lt;code&gt;phase&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Convenciones comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;phase: &amp;quot;commentary&amp;quot;&lt;/code&gt;: actualización intermedia de estado.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;phase: &amp;quot;final_answer&amp;quot;&lt;/code&gt;: respuesta final.&lt;/li&gt;
&lt;li&gt;No añadir &lt;code&gt;phase&lt;/code&gt; a user messages.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Parece un detalle de implementación, pero importa en productos con tool calls, actualizaciones de estado y respuestas finales. Perder &lt;code&gt;phase&lt;/code&gt; durante una reproducción manual puede hacer que el modelo confunda progreso intermedio con conclusión final.&lt;/p&gt;
&lt;h2 id=&#34;pedir-al-modelo-que-revise-su-propio-trabajo&#34;&gt;Pedir al modelo que revise su propio trabajo
&lt;/h2&gt;&lt;p&gt;Otro punto muy práctico de la guía GPT-5.5: en tareas verificables, dale al modelo herramientas y reglas de validación.&lt;/p&gt;
&lt;p&gt;Para agentes de código, se puede pedir explícitamente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecutar unit tests relevantes después de modificar.&lt;/li&gt;
&lt;li&gt;Ejecutar type check o lint cuando corresponda.&lt;/li&gt;
&lt;li&gt;Ejecutar build si el paquete afectado es grande.&lt;/li&gt;
&lt;li&gt;Si la validación completa es demasiado cara, hacer al menos el smoke test mínimo.&lt;/li&gt;
&lt;li&gt;Si no se puede validar, explicar por qué y cuál es la siguiente mejor comprobación.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para resultados visuales o páginas, se puede pedir renderizar primero y luego comprobar layout, recortes, espaciado, contenido faltante y consistencia visual.&lt;/p&gt;
&lt;p&gt;Para planes de ingeniería, se puede pedir que incluyan relación con requisitos, archivos/API/sistemas afectados, transiciones de estado, comandos de validación, comportamiento ante fallos, privacidad y seguridad, y preguntas abiertas que realmente afectan la implementación.&lt;/p&gt;
&lt;p&gt;Estas reglas son mucho más efectivas que &amp;ldquo;sé cuidadoso&amp;rdquo;. Convierten &amp;ldquo;cuidado&amp;rdquo; en comprobaciones ejecutables.&lt;/p&gt;
&lt;h2 id=&#34;un-esqueleto-de-prompt-más-adecuado-para-gpt-55&#34;&gt;Un esqueleto de prompt más adecuado para GPT-5.5
&lt;/h2&gt;&lt;p&gt;La estructura de la documentación de OpenAI puede simplificarse así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Role:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qué rol tienes y en qué contexto trabajas.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Personality
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Tono, forma de colaborar, si hace falta calidez o punto de vista.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Goal
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;El resultado visible para el usuario.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Success criteria
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Condiciones que deben cumplirse antes de la respuesta final.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Constraints
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Límites de seguridad, negocio, evidencia, permisos, coste y efectos secundarios.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Output
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Estructura, longitud, tono y campos requeridos.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Stop rules
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cuándo continuar, reintentar, degradar, preguntar o detenerse.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El punto no es que todos los prompts deban tener todos estos títulos. La idea real es que un prompt para tareas complejas debe decirle al modelo destino, límites y entregable, no codificar cada paso.&lt;/p&gt;
&lt;h2 id=&#34;orden-práctico-para-migrar-prompts-antiguos&#34;&gt;Orden práctico para migrar prompts antiguos
&lt;/h2&gt;&lt;p&gt;Si ya tienes prompts antiguos para GPT-4.1, GPT-4o, GPT-5.2 o GPT-5.4, no conviene reescribir todo de una vez.&lt;/p&gt;
&lt;p&gt;Un orden más estable:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Cambia primero el modelo, manteniendo fijo el reasoning effort y los parámetros de salida actuales.&lt;/li&gt;
&lt;li&gt;Ejecuta evals existentes o ejemplos reales para detectar cambios de comportamiento.&lt;/li&gt;
&lt;li&gt;Elimina reglas de proceso claramente obsoletas, repetidas o contradictorias.&lt;/li&gt;
&lt;li&gt;Convierte &amp;ldquo;requisitos de pasos&amp;rdquo; en &amp;ldquo;criterios de éxito&amp;rdquo; y &amp;ldquo;condiciones de parada&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Añade retrieval budgets, reglas de cita y comportamiento ante falta de evidencia.&lt;/li&gt;
&lt;li&gt;Añade ciclos de validación para tareas con herramientas.&lt;/li&gt;
&lt;li&gt;Ajusta &lt;code&gt;reasoning.effort&lt;/code&gt; y &lt;code&gt;text.verbosity&lt;/code&gt; al final.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si no tienes evals, al menos prepara un conjunto de tareas típicas: Q&amp;amp;A simple, retrieval complejo, uso de herramientas, salida formateada, rechazo/degradación y finalización de tareas largas. No juzgues la calidad del prompt con un único demo case.&lt;/p&gt;
&lt;h2 id=&#34;checklist-para-migrar-prompts-antiguos&#34;&gt;Checklist para migrar prompts antiguos
&lt;/h2&gt;&lt;p&gt;Al migrar un prompt antiguo, empieza con esta lista. El objetivo no es hacerlo más corto sin más, sino borrar restricciones inútiles y convertir las restricciones importantes en algo verificable.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Elemento&lt;/th&gt;
          &lt;th&gt;Problema común&lt;/th&gt;
          &lt;th&gt;Manejo sugerido&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Reglas repetidas&lt;/td&gt;
          &lt;td&gt;La misma instrucción aparece en varias secciones, a veces con redacción distinta&lt;/td&gt;
          &lt;td&gt;Unirla en una regla clara y dejar solo la versión final&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Palabras absolutas&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;ALWAYS&lt;/code&gt;, &lt;code&gt;NEVER&lt;/code&gt;, &lt;code&gt;must&lt;/code&gt;, &lt;code&gt;only&lt;/code&gt; aparecen por todas partes&lt;/td&gt;
          &lt;td&gt;Reservarlas para seguridad, cumplimiento, permisos y campos obligatorios&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sin condición de parada&lt;/td&gt;
          &lt;td&gt;El modelo debe seguir buscando, analizando o corrigiendo, pero no se dice cuándo parar&lt;/td&gt;
          &lt;td&gt;Añadir stop rules: evidencia suficiente, validación aprobada, límite de turnos o coste&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Sin comando de validación&lt;/td&gt;
          &lt;td&gt;Solo dice &amp;ldquo;asegura que sea correcto&amp;rdquo;, sin pruebas, lint, citas o comprobaciones&lt;/td&gt;
          &lt;td&gt;Usar checks concretos: tests, type check, build, citas o smoke test&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Proceso demasiado detallado&lt;/td&gt;
          &lt;td&gt;Cada paso está fijado y el modelo solo puede seguir el flujo&lt;/td&gt;
          &lt;td&gt;Convertirlo en objetivos, criterios de éxito, límites y requisitos de salida&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Parches de modelos antiguos&lt;/td&gt;
          &lt;td&gt;Siguen presentes restricciones escritas para debilidades de modelos antiguos&lt;/td&gt;
          &lt;td&gt;Borrar primero y decidir con evals si aún hacen falta&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Reglas de herramientas vagas&lt;/td&gt;
          &lt;td&gt;Solo dice &amp;ldquo;usa herramientas cuando sea necesario&amp;rdquo;&lt;/td&gt;
          &lt;td&gt;Definir cuándo llamar, cuándo parar y cómo degradar si falla&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Formato de salida inestable&lt;/td&gt;
          &lt;td&gt;Hay formato, pero no reglas de campos completos&lt;/td&gt;
          &lt;td&gt;Definir campos obligatorios, opcionales y salida cuando falta evidencia&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Si solo puedes hacer una cosa, prioriza &amp;ldquo;sin condición de parada&amp;rdquo; y &amp;ldquo;sin comando de validación&amp;rdquo;. Son las dos vías más fáciles para convertir GPT-5.5 en un bucle infinito de herramientas, o en un modelo que da respuestas pulidas pero no verificadas.&lt;/p&gt;
&lt;h2 id=&#34;ejemplos-de-prompts-gpt-55-viejo-vs-nuevo&#34;&gt;Ejemplos de prompts GPT-5.5: viejo vs nuevo
&lt;/h2&gt;&lt;p&gt;Estos no son system prompts completos, sino reescrituras parciales comunes durante una migración.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo 1: Q&amp;amp;A con retrieval&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Viejo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Antes de responder, debes buscar al menos 3 veces. Debes leer todos los resultados relevantes. Debes dar una explicación completa.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nuevo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Empieza con una búsqueda que cubra la pregunta central. Si los primeros resultados ya soportan los hechos clave, deja de buscar y responde. Si los resultados entran en conflicto o faltan hechos clave, añade otra búsqueda. En la respuesta final, explica la base; si la evidencia es insuficiente, dilo claramente.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La versión nueva cambia &amp;ldquo;número de búsquedas&amp;rdquo; por &amp;ldquo;si la evidencia es suficiente&amp;rdquo;. Da al modelo una razón para seguir y una razón para detenerse.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo 2: cambios de código&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Viejo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modifica el código con cuidado. No rompas la lógica existente. Al terminar, dime qué cambió.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nuevo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Haz el cambio de código mínimo necesario solicitado por el usuario. Criterios de éxito:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Modifica solo archivos relacionados con la tarea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Conserva la compatibilidad de la API pública existente salvo que el usuario pida cambiarla explícitamente
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- Ejecuta unit tests relevantes después del cambio; si no pueden ejecutarse, explica por qué y cuál es la siguiente mejor validación
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- El resumen final incluye cambios, resultado de validación y riesgos restantes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La versión nueva no pide &amp;ldquo;cuidado&amp;rdquo; de forma vaga. Lo concreta en alcance de archivos, compatibilidad de API, pruebas y reporte de riesgos.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ejemplo 3: salida estructurada&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Viejo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Devuelve JSON. No devuelvas contenido extra. Los campos deben estar completos.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nuevo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Devuelve JSON estricto sin Markdown. Campos requeridos:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- status: &amp;#34;ok&amp;#34; | &amp;#34;needs_more_info&amp;#34; | &amp;#34;blocked&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- answer: string
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- evidence: string[]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- missing_info: string[]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Si la evidencia es insuficiente, usa status &amp;#34;needs_more_info&amp;#34; y no inventes evidence.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La versión nueva no solo pide JSON. También define una ruta válida cuando falta evidencia, para que el modelo no tenga que inventar información para cumplir &amp;ldquo;campos completos&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;cómo-combinar-parámetros&#34;&gt;Cómo combinar parámetros
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;reasoning.effort&lt;/code&gt; y &lt;code&gt;text.verbosity&lt;/code&gt; no deberían verse de forma aislada. El primero influye en cuánto razonamiento invierte el modelo; el segundo, en cuán detallada es la salida. Un error común es subir &lt;code&gt;reasoning.effort&lt;/code&gt; cuando la calidad no alcanza, o endurecer el prompt cuando la salida es larga. Es más estable configurarlos por tipo de tarea.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Escenario&lt;/th&gt;
          &lt;th&gt;reasoning.effort&lt;/th&gt;
          &lt;th&gt;text.verbosity&lt;/th&gt;
          &lt;th&gt;Nota&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Extracción de campos, clasificación, conversión corta de formato&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;none&lt;/code&gt; o &lt;code&gt;low&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;low&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Prioriza baja latencia; lo importante es un schema claro&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Enrutamiento de soporte, rutas simples de herramientas&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;low&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;low&lt;/code&gt; o &lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Si las reglas son claras, no hace falta mucho razonamiento&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Q&amp;amp;A normal, resumen ligero con retrieval&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;low&lt;/code&gt; o &lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Requiere algo de juicio, pero no conviene poner high por defecto&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Síntesis de varios documentos, juicio entre conflictos&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Primero asegura reglas de evidencia y citas; luego considera subir effort&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Cambios de código complejos, agents de tareas largas&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt; o &lt;code&gt;high&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Respuesta al usuario &lt;code&gt;low&lt;/code&gt;, salida de código clara&lt;/td&gt;
          &lt;td&gt;El chat puede ser breve; código y diff deben ser legibles&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Estrategia, planes, análisis de riesgos&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt; o &lt;code&gt;high&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;medium&lt;/code&gt; o &lt;code&gt;high&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Necesita explicar tradeoffs, riesgos y supuestos&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Para la mayoría de aplicaciones, empieza con &lt;code&gt;low&lt;/code&gt; o &lt;code&gt;medium&lt;/code&gt;. Sube &lt;code&gt;reasoning.effort&lt;/code&gt; solo cuando el prompt ya define criterios de éxito, condiciones de parada y reglas de validación, y aun así el modelo omite restricciones clave.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;text.verbosity&lt;/code&gt; tampoco mejora siempre al bajar. Low verbosity sirve para actualizaciones de estado, respuestas cortas de soporte y resúmenes de operación. Pero para código, configuración, planes de migración o explicaciones de auditoría, una salida demasiado breve dificulta la revisión.&lt;/p&gt;
&lt;h2 id=&#34;qué-reglas-conviene-conservar&#34;&gt;Qué reglas conviene conservar
&lt;/h2&gt;&lt;p&gt;Migrar a GPT-5.5 no significa borrar todo el prompt antiguo. Las siguientes reglas suelen conservarse, y conviene escribirlas con más precisión.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Reglas de seguridad&lt;/strong&gt;: acciones que no se pueden ejecutar, contenido que no se puede generar, casos que requieren rechazo o degradación.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reglas de cumplimiento&lt;/strong&gt;: políticas de industria, restricciones regionales, límites de edad, auditoría, aprobaciones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reglas de privacidad&lt;/strong&gt;: manejo de datos personales, redacción de datos sensibles, límites de logging, prohibición de transferir datos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Campos de salida&lt;/strong&gt;: respuestas de API, JSON schema, columnas de tabla, estructuras fijas requeridas por componentes frontend.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Límites de negocio&lt;/strong&gt;: reglas de reembolso, permisos de cuenta, niveles de servicio, alcance contractual, escalado a soporte humano.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Límites de permisos de herramientas&lt;/strong&gt;: qué herramientas se pueden llamar, cuáles requieren confirmación y cuáles están prohibidas.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reglas de citas y evidencia&lt;/strong&gt;: cuándo se requieren fuentes y cómo manejar evidencia conflictiva.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas reglas no son lastre viejo. Son contratos del producto. La diferencia es que, durante la migración, deben pasar de eslóganes largos a restricciones ejecutables.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No filtres privacidad del usuario.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puede convertirse en:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No incluyas números de teléfono completos, documentos de identidad, access tokens, API keys ni IDs internos de usuario en la respuesta final. Si hace falta referenciarlos, muestra solo una versión redactada, como conservar los últimos 4 dígitos del teléfono.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;qué-no-se-debe-borrar-por-error&#34;&gt;Qué no se debe borrar por error
&lt;/h2&gt;&lt;p&gt;El mayor peligro al recortar prompts no es borrar texto inútil, sino borrar límites reales del sistema. Lo siguiente no debería eliminarse a la ligera, aunque parezca viejo.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Requisitos de privacidad y tratamiento de datos&lt;/strong&gt;: especialmente reglas de logs, exportación, transferencia entre sistemas y tool calls de terceros.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Límites de seguridad y permisos&lt;/strong&gt;: confirmaciones para borrar datos, transferir dinero, enviar correos, cambiar permisos o ejecutar shell commands.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Formato de citas&lt;/strong&gt;: si el producto depende de citas, notas, listas de fuentes o trazas de auditoría, no lo borres solo porque ocupa espacio.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Límites de tool calls&lt;/strong&gt;: qué herramientas son solo lectura, cuáles pueden escribir y cuáles requieren confirmación del usuario.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comportamiento ante fallos&lt;/strong&gt;: cómo degradar cuando hay timeouts de API, datos faltantes, fallos de retrieval o permisos insuficientes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reglas duras de negocio&lt;/strong&gt;: precios, reembolsos, bloqueos, control de riesgo y revisión de compliance que el modelo no debe improvisar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Una regla simple: si borrar una regla solo cambia un poco el estilo de salida, puedes considerar borrarla. Si borrarla puede causar exceso de privilegios, filtración, mala operación, promesas falsas o ruptura de auditoría, consérvala y reescríbela con más precisión.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El núcleo de la guía de prompting para GPT-5.5 no es &amp;ldquo;escribir prompts más avanzados&amp;rdquo;, sino quitar de los prompts antiguos las partes que especifican demasiado el proceso.&lt;/p&gt;
&lt;p&gt;Un prompt más adecuado para GPT-5.5 debería:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Priorizar objetivos, no pasos.&lt;/li&gt;
&lt;li&gt;Definir criterios de éxito, no pedir de forma vaga &amp;ldquo;hacerlo bien&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Incluir condiciones de parada, no búsquedas o tool loops infinitos.&lt;/li&gt;
&lt;li&gt;Tener presupuesto de evidencia, no responder sin evidencia ni buscar para siempre.&lt;/li&gt;
&lt;li&gt;Incluir reglas de validación, no depender solo de que el modelo sea cuidadoso.&lt;/li&gt;
&lt;li&gt;Ajustar parámetros al final, no subir reasoning effort desde el inicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si tu system prompt antiguo ya es largo, el primer paso para migrarlo a GPT-5.5 quizá no sea añadir contenido, sino eliminarlo. Conserva las reglas realmente no negociables y convierte los detalles de proceso en resultados, límites y checks. Eso suele ser más efectivo que seguir acumulando prompts.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;OpenAI Prompt guidance: &lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/api/docs/guides/prompt-guidance&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://developers.openai.com/api/docs/guides/prompt-guidance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;OpenAI Using GPT-5.5: &lt;a class=&#34;link&#34; href=&#34;https://developers.openai.com/api/docs/guides/latest-model&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://developers.openai.com/api/docs/guides/latest-model&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Términos de informática en lenguaje simple: qué significan TTS, STT, API, RAG y Agent</title>
        <link>https://knightli.com/es/2026/05/12/computer-terms-in-plain-language/</link>
        <pubDate>Tue, 12 May 2026 22:15:34 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/12/computer-terms-in-plain-language/</guid>
        <description>&lt;p&gt;En informática hay muchos términos que, al escucharlos por primera vez, parecen muy avanzados. Pero cuando se traducen a lenguaje simple, a menudo describen acciones cotidianas.&lt;/p&gt;
&lt;p&gt;Por ejemplo, cuando una IA puede hablar, se llama &lt;code&gt;TTS&lt;/code&gt;; cuando puede escucharte, se llama &lt;code&gt;STT&lt;/code&gt;. Suena como un sistema complejo, pero separado en partes es simplemente &amp;ldquo;leer texto en voz alta&amp;rdquo; y &amp;ldquo;transcribir voz a texto&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Enlace de referencia: &lt;a class=&#34;link&#34; href=&#34;https://www.zhihu.com/question/267978646/answer/2035405228460201515&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.zhihu.com/question/267978646/answer/2035405228460201515&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Este artículo recorre varios términos comunes desde ese ángulo: conservar los términos, pero explicarlos en palabras simples.&lt;/p&gt;
&lt;h2 id=&#34;tts-y-stt-convertir-entre-texto-y-voz&#34;&gt;TTS y STT: convertir entre texto y voz
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;TTS&lt;/code&gt; significa &lt;code&gt;Text-to-Speech&lt;/code&gt;, es decir, convertir texto en voz. Escribes un texto y el sistema lo convierte en audio reproducible. La navegación por voz, la lectura de libros electrónicos, los bots de atención al cliente y los asistentes de voz usan esta capacidad.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;STT&lt;/code&gt; significa &lt;code&gt;Speech-to-Text&lt;/code&gt;, es decir, convertir voz en texto. Cuando le hablas al móvil, el sistema primero reconoce la voz como texto y luego entrega ese texto al programa siguiente. Dictado por voz, transcripción de reuniones, subtítulos automáticos y altavoces inteligentes dependen de STT.&lt;/p&gt;
&lt;p&gt;Muchos productos de IA por voz funcionan así:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;STT&lt;/code&gt;: convierte lo que dijiste en texto.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LLM&lt;/code&gt;: genera una respuesta a partir del texto.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;TTS&lt;/code&gt;: lee la respuesta en voz alta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por eso parece una conversación natural, aunque por debajo varios módulos se pasan el trabajo.&lt;/p&gt;
&lt;h2 id=&#34;ocr-copiar-texto-desde-imágenes&#34;&gt;OCR: copiar texto desde imágenes
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;OCR&lt;/code&gt; significa &lt;code&gt;Optical Character Recognition&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, consiste en sacar texto de una imagen. Fotografiar una factura, escanear una página de un libro o leer el nombre y número de un documento de identidad son tareas de OCR.&lt;/p&gt;
&lt;p&gt;Antes, OCR se parecía más a &amp;ldquo;adivinar la forma de los caracteres&amp;rdquo;. Hoy usa deep learning y tolera mejor fondos complejos, texto inclinado, escritura manual e imágenes borrosas. Pero la pregunta central sigue siendo directa: ¿qué texto hay en la imagen?&lt;/p&gt;
&lt;h2 id=&#34;nlp-y-llm-hacer-que-las-máquinas-procesen-lenguaje-humano&#34;&gt;NLP y LLM: hacer que las máquinas procesen lenguaje humano
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;NLP&lt;/code&gt; significa &lt;code&gt;Natural Language Processing&lt;/code&gt;. Trata con lenguaje humano: tokenización, traducción, resumen, análisis de sentimiento, preguntas y respuestas, clasificación.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;LLM&lt;/code&gt; significa &lt;code&gt;Large Language Model&lt;/code&gt;. Puede entender y generar texto, así que hoy muchas tareas de NLP las realizan LLMs.&lt;/p&gt;
&lt;p&gt;Versión simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;NLP&lt;/code&gt;: hacer que las máquinas procesen lo que las personas dicen y escriben.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LLM&lt;/code&gt;: un modelo de texto grande capaz de manejar muchas tareas de lenguaje.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cuando pides a una IA resumir un artículo, escribir un correo, mejorar un título o explicar código, estás en este campo general.&lt;/p&gt;
&lt;h2 id=&#34;api-y-sdk-una-es-una-interfaz-el-otro-es-un-kit&#34;&gt;API y SDK: una es una interfaz, el otro es un kit
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;API&lt;/code&gt; significa &lt;code&gt;Application Programming Interface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, alguien abre una entrada para que puedas llamar una capacidad. Una API del clima recibe una ciudad y devuelve el tiempo; una API de pagos recibe un pedido y devuelve el resultado del pago.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SDK&lt;/code&gt; significa &lt;code&gt;Software Development Kit&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, el equipo oficial empaqueta código común, tipos, ejemplos y herramientas para que llames la API más fácilmente. Una API es como el mostrador de un restaurante; un SDK es como una app para pedir. Puedes hablar directamente con el mostrador o usar la app para hacerlo con menos fricción.&lt;/p&gt;
&lt;h2 id=&#34;crud-crear-leer-actualizar-y-borrar&#34;&gt;CRUD: crear, leer, actualizar y borrar
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CRUD&lt;/code&gt; significa &lt;code&gt;Create&lt;/code&gt;, &lt;code&gt;Read&lt;/code&gt;, &lt;code&gt;Update&lt;/code&gt;, &lt;code&gt;Delete&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple: añadir, ver, modificar y eliminar.&lt;/p&gt;
&lt;p&gt;Muchos sistemas administrativos, paneles de gestión y operaciones de base de datos giran alrededor de CRUD. Gestión de usuarios, artículos, pedidos o inventario parecen negocios distintos, pero por debajo suelen ser formularios más crear/leer/actualizar/borrar.&lt;/p&gt;
&lt;p&gt;Por eso los programadores dicen &amp;ldquo;otra vez CRUD&amp;rdquo;. No necesariamente lo dicen con desprecio; simplemente aparece en todas partes.&lt;/p&gt;
&lt;h2 id=&#34;cache-guardar-una-copia-para-no-recalcular-cada-vez&#34;&gt;Cache: guardar una copia para no recalcular cada vez
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Cache&lt;/code&gt; significa caché.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, dejar cerca lo que se usa con frecuencia para tomarlo directamente la próxima vez, sin buscarlo, calcularlo o pedirlo de nuevo.&lt;/p&gt;
&lt;p&gt;Una página web puede cachear imágenes y scripts; una consulta lenta puede guardar resultados populares en Redis; una inferencia cara de modelo puede cachear respuestas a preguntas repetidas.&lt;/p&gt;
&lt;p&gt;La parte difícil de la caché no es &amp;ldquo;guardar una copia&amp;rdquo;, sino &amp;ldquo;saber cuándo actualizarla&amp;rdquo;. Si los datos cambian y la caché no, aparece información antigua. Ese es el origen de muchos problemas de caché.&lt;/p&gt;
&lt;h2 id=&#34;queue-poner-tareas-en-fila-y-procesarlas-poco-a-poco&#34;&gt;Queue: poner tareas en fila y procesarlas poco a poco
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Queue&lt;/code&gt; significa cola.&lt;/p&gt;
&lt;p&gt;En lenguaje simple: hay demasiadas cosas por hacer, así que se ponen en fila y se procesan una por una.&lt;/p&gt;
&lt;p&gt;Por ejemplo, cuando un usuario sube un video, la transcodificación no siempre termina de inmediato. El sistema puede poner la tarea en una cola y dejar que un servicio en segundo plano la procese. Enviar SMS, correos, generar informes y manejar callbacks de pedidos también suele usar colas.&lt;/p&gt;
&lt;p&gt;Las colas evitan que todas las tareas lentas bloqueen la petición actual. El usuario recibe respuesta primero y el trabajo pesado ocurre después.&lt;/p&gt;
&lt;h2 id=&#34;index-una-tabla-de-contenidos-para-la-base-de-datos&#34;&gt;Index: una tabla de contenidos para la base de datos
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Index&lt;/code&gt; significa índice.&lt;/p&gt;
&lt;p&gt;Un índice de base de datos es como el índice de un libro. Sin índice, quizá tengas que leer desde la primera página hasta la última; con índice, llegas más rápido al contenido.&lt;/p&gt;
&lt;p&gt;Pero no siempre conviene tener más índices. Las consultas pueden ser más rápidas, pero las escrituras y actualizaciones pueden volverse más lentas, porque el índice también debe mantenerse cuando cambian los datos.&lt;/p&gt;
&lt;p&gt;Por eso en optimización de bases de datos se suele mirar primero el índice de una consulta lenta. Pero al crear uno hay que considerar condiciones de búsqueda, campos de orden, volumen de datos y frecuencia de escritura.&lt;/p&gt;
&lt;h2 id=&#34;rpc-rest-y-webhook-cómo-hablan-los-sistemas&#34;&gt;RPC, REST y Webhook: cómo hablan los sistemas
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;RPC&lt;/code&gt; significa &lt;code&gt;Remote Procedure Call&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, es llamar una función que vive en otra máquina como si fuera una función local.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;REST&lt;/code&gt; es común en Web API. Usa URLs y métodos HTTP para expresar operaciones sobre recursos, por ejemplo &lt;code&gt;GET /users&lt;/code&gt; para consultar usuarios y &lt;code&gt;POST /orders&lt;/code&gt; para crear pedidos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Webhook&lt;/code&gt; es una notificación en sentido contrario. En vez de preguntar todo el tiempo &amp;ldquo;¿ya está?&amp;rdquo;, el otro sistema llama tu URL cuando ocurre algo.&lt;/p&gt;
&lt;p&gt;Forma simple de recordarlo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;RPC&lt;/code&gt;: llamar una función remota.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REST&lt;/code&gt;: gestionar recursos con HTTP.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Webhook&lt;/code&gt;: recibir aviso cuando algo sucede.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cdn-y-load-balancing-acercar-contenido-y-repartir-carga&#34;&gt;CDN y Load Balancing: acercar contenido y repartir carga
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CDN&lt;/code&gt; significa &lt;code&gt;Content Delivery Network&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, colocar recursos estáticos en nodos más cercanos al usuario. Al acceder a imágenes, videos, CSS o JS, no siempre hace falta ir al servidor de origen.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Load Balancing&lt;/code&gt; significa balanceo de carga.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, si hay demasiado tráfico, no obligar a un solo servidor a cargar con todo; repartir las peticiones entre varias máquinas.&lt;/p&gt;
&lt;p&gt;Uno trata de estar más cerca del usuario; el otro evita agotar una máquina. Los sitios grandes suelen usar ambos.&lt;/p&gt;
&lt;h2 id=&#34;docker-container-y-kubernetes-empaquetar-ejecutar-y-orquestar&#34;&gt;Docker, Container y Kubernetes: empaquetar, ejecutar y orquestar
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Docker&lt;/code&gt; es una herramienta común de contenedores, y &lt;code&gt;Container&lt;/code&gt; significa contenedor.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, empaquetar el programa junto con el entorno que necesita para que pueda ejecutarse de forma similar en otra máquina. Así se reduce el problema de &amp;ldquo;en mi ordenador funciona, en el servidor no&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Kubernetes&lt;/code&gt;, a menudo escrito &lt;code&gt;K8s&lt;/code&gt;, es un sistema de orquestación de contenedores.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, cuando hay muchos contenedores, decide dónde corren, cómo reiniciarlos si fallan, cómo repartir tráfico y cómo actualizar versiones.&lt;/p&gt;
&lt;p&gt;Si solo tienes un servicio pequeño, Docker puede bastar. Si tienes muchos servicios, máquinas y réplicas, K8s empieza a tener más sentido.&lt;/p&gt;
&lt;h2 id=&#34;cicd-construir-y-desplegar-automáticamente&#34;&gt;CI/CD: construir y desplegar automáticamente
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CI&lt;/code&gt; significa &lt;code&gt;Continuous Integration&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, cuando se envía código, el sistema lo descarga, ejecuta pruebas y lo construye automáticamente para detectar problemas pronto.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CD&lt;/code&gt; puede significar &lt;code&gt;Continuous Delivery&lt;/code&gt; o &lt;code&gt;Continuous Deployment&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, cuando la build pasa, el código se envía de forma más estable y automática a pruebas o producción.&lt;/p&gt;
&lt;p&gt;No resuelve &amp;ldquo;cómo escribir código&amp;rdquo;, sino &amp;ldquo;cómo publicar lo escrito con menos errores&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;serialization-empaquetar-objetos-en-un-formato-transmisible&#34;&gt;Serialization: empaquetar objetos en un formato transmisible
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Serialization&lt;/code&gt; significa serialización.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, convertir objetos del programa en un formato que se pueda guardar o transmitir, como JSON, XML o Protobuf.&lt;/p&gt;
&lt;p&gt;Lo contrario, &lt;code&gt;Deserialization&lt;/code&gt;, convierte esos formatos de vuelta en objetos que el programa puede usar.&lt;/p&gt;
&lt;p&gt;Cuando frontend y backend intercambian JSON, o dos servicios usan Protobuf, hay serialización de por medio.&lt;/p&gt;
&lt;h2 id=&#34;token-embedding-y-vector-db-convertir-texto-en-formas-que-el-modelo-puede-procesar&#34;&gt;Token, Embedding y Vector DB: convertir texto en formas que el modelo puede procesar
&lt;/h2&gt;&lt;p&gt;En modelos grandes, &lt;code&gt;Token&lt;/code&gt; suele ser la unidad básica en la que se divide el texto. No siempre equivale a un carácter chino o a una palabra inglesa; es más bien la granularidad interna con la que el modelo procesa texto.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Embedding&lt;/code&gt; significa vector de incrustación.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, convierte texto, imágenes u otros contenidos en una secuencia de números para que el modelo pueda comparar similitudes.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Vector DB&lt;/code&gt; significa base de datos vectorial.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, guarda esos vectores y permite encontrar rápido contenido con significado parecido.&lt;/p&gt;
&lt;p&gt;Por ejemplo, si preguntas &amp;ldquo;cómo resetear el router&amp;rdquo;, el sistema puede buscar en la base vectorial contenidos como &amp;ldquo;restaurar configuración de fábrica&amp;rdquo;, &amp;ldquo;olvidé la contraseña Wi-Fi&amp;rdquo; o &amp;ldquo;fallo al entrar al panel&amp;rdquo;, y pasarlos al modelo como referencia.&lt;/p&gt;
&lt;h2 id=&#34;rag-buscar-primero-responder-después&#34;&gt;RAG: buscar primero, responder después
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;RAG&lt;/code&gt; significa &lt;code&gt;Retrieval-Augmented Generation&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, antes de responder, el modelo busca información relevante en una base de conocimiento y luego responde usando esos materiales.&lt;/p&gt;
&lt;p&gt;Esto reduce el problema de que los modelos grandes inventen cosas desde la memoria. Al conectar documentos internos, bases de conocimiento, manuales de producto o fragmentos de código, el modelo puede usar materiales actuales proporcionados por ti.&lt;/p&gt;
&lt;p&gt;Un flujo típico es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El usuario hace una pregunta.&lt;/li&gt;
&lt;li&gt;El sistema convierte la pregunta en un &lt;code&gt;Embedding&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Busca documentos relacionados en una &lt;code&gt;Vector DB&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Envía fragmentos de documentos y la pregunta a un &lt;code&gt;LLM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;El modelo genera la respuesta.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Así que RAG suena avanzado, pero en esencia es: primero consulta materiales, luego organiza la respuesta.&lt;/p&gt;
&lt;h2 id=&#34;agent-un-flujo-automatizado-que-descompone-tareas&#34;&gt;Agent: un flujo automatizado que descompone tareas
&lt;/h2&gt;&lt;p&gt;En el contexto de IA, &lt;code&gt;Agent&lt;/code&gt; suele traducirse como agente inteligente.&lt;/p&gt;
&lt;p&gt;En lenguaje simple, no solo responde una frase; puede dividir un objetivo en pasos, llamar herramientas, observar resultados y decidir la siguiente acción.&lt;/p&gt;
&lt;p&gt;Por ejemplo, si le pides &amp;ldquo;analiza por qué fallan las pruebas en este repositorio&amp;rdquo;, un modelo de chat común quizá solo dé consejos. Un Agent puede leer archivos, ejecutar pruebas, revisar errores, modificar código y volver a ejecutar pruebas.&lt;/p&gt;
&lt;p&gt;Por supuesto, Agent no significa fiabilidad garantizada. Es básicamente &amp;ldquo;modelo + llamadas a herramientas + bucle de estado&amp;rdquo;. Que funcione bien depende de permisos, límites de la tarea, manejo de errores y confirmación humana.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Muchos términos informáticos parecen avanzados porque vienen envueltos en siglas, diagramas de arquitectura y marketing de producto. Al desmontarlos, muchos describen acciones muy simples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;TTS&lt;/code&gt;: leer texto en voz alta.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;STT&lt;/code&gt;: transcribir voz.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;OCR&lt;/code&gt;: copiar texto desde imágenes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;API&lt;/code&gt;: abrir una entrada de llamada.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SDK&lt;/code&gt;: empaquetar herramientas de llamada.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CRUD&lt;/code&gt;: crear, leer, actualizar y borrar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Cache&lt;/code&gt;: guardar una copia de resultados comunes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Queue&lt;/code&gt;: poner tareas en fila para procesarlas después.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Index&lt;/code&gt;: poner una tabla de contenidos a los datos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CDN&lt;/code&gt;: acercar contenido al usuario.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Load Balancing&lt;/code&gt;: repartir peticiones.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Docker&lt;/code&gt;: empaquetar el entorno de ejecución.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CI/CD&lt;/code&gt;: automatizar pruebas y despliegue.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Embedding&lt;/code&gt;: convertir contenido en vectores numéricos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RAG&lt;/code&gt;: buscar primero, responder después.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Agent&lt;/code&gt;: dejar que el modelo use herramientas paso a paso.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conviene conservar los términos porque ayudan a buscar, comunicarse y leer documentación. Pero no hace falta dejarse intimidar. Primero tradúcelos a lenguaje simple; luego vuelve a los detalles técnicos. Muchos conceptos se vuelven mucho más claros.&lt;/p&gt;
&lt;h2 id=&#34;referencia&#34;&gt;Referencia
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Respuesta de Zhihu: &lt;a class=&#34;link&#34; href=&#34;https://www.zhihu.com/question/267978646/answer/2035405228460201515&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.zhihu.com/question/267978646/answer/2035405228460201515&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Dirty Frag CVE-2026-43284: riesgo de escalada local en Linux y guía de mitigación</title>
        <link>https://knightli.com/es/2026/05/09/dirty-frag-cve-2026-43284-linux-lpe-mitigation/</link>
        <pubDate>Sat, 09 May 2026 07:25:55 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/09/dirty-frag-cve-2026-43284-linux-lpe-mitigation/</guid>
        <description>&lt;p&gt;Dirty Frag es un conjunto de vulnerabilidades de escalada local de privilegios en el kernel Linux, divulgadas en mayo de 2026 y con indicios de explotación activa. Microsoft la describe como un riesgo post-compromiso: después de que un atacante consigue ejecución con pocos privilegios, puede usar el fallo para escalar a root. Ubuntu también clasifica CVE-2026-43284 como High.&lt;/p&gt;
&lt;p&gt;El peligro no está en un “compromiso remoto de un clic”. El peligro está en que, una vez dentro, el atacante puede ampliar el control rápidamente. Si consigue ejecución local mediante credenciales SSH débiles, una web shell, escape de contenedor, una cuenta de servicio con pocos privilegios o acceso remoto tras phishing, Dirty Frag puede permitir root y luego desactivar herramientas de seguridad, leer credenciales, manipular logs, moverse lateralmente o persistir.&lt;/p&gt;
&lt;h2 id=&#34;qué-cve-están-implicados&#34;&gt;Qué CVE están implicados
&lt;/h2&gt;&lt;p&gt;La información pública asocia Dirty Frag principalmente con dos identificadores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CVE-2026-43284&lt;/code&gt;: relacionado con la ruta xfrm/ESP del kernel Linux. Las referencias de Microsoft a &lt;code&gt;esp4&lt;/code&gt; y &lt;code&gt;esp6&lt;/code&gt; pertenecen a esta zona de riesgo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CVE-2026-43500&lt;/code&gt;: Microsoft indica que está relacionado con &lt;code&gt;rxrpc&lt;/code&gt;, pero al 8 de mayo de 2026 el CVE aún no estaba publicado en NVD y el estado de parches seguía evolucionando.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por eso no conviene mirar solo un CVE. Es más seguro revisar si &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt;, &lt;code&gt;rxrpc&lt;/code&gt; y funciones relacionadas con xfrm/IPsec están activas, son necesarias y ya tienen parche de la distribución.&lt;/p&gt;
&lt;h2 id=&#34;explicación-técnica-resumida&#34;&gt;Explicación técnica resumida
&lt;/h2&gt;&lt;p&gt;Según Microsoft y Ubuntu, CVE-2026-43284 afecta al manejo de red y fragmentos de memoria del kernel Linux, especialmente al tratamiento de fragmentos de página compartidos en la ruta ESP/IPsec.&lt;/p&gt;
&lt;p&gt;En términos simples, páginas de datos pueden adjuntarse a buffers de red mediante mecanismos como splice. Si rutas posteriores del kernel tratan esos fragmentos como datos privados que se pueden modificar in-place, puede producirse descifrado o modificación in-place donde no debería. Un atacante puede manipular el comportamiento de page cache y acabar logrando escalada local.&lt;/p&gt;
&lt;p&gt;Esto se parece a CopyFail (&lt;code&gt;CVE-2026-31431&lt;/code&gt;): ambos giran en torno a page cache de Linux, rutas de datos del kernel y escalada local. Dirty Frag es peligroso porque introduce más rutas de ataque y puede ser más fiable que exploits LPE tradicionales dependientes de ventanas de carrera estrechas.&lt;/p&gt;
&lt;h2 id=&#34;entornos-prioritarios&#34;&gt;Entornos prioritarios
&lt;/h2&gt;&lt;p&gt;Dirty Frag es una vulnerabilidad local, así que el atacante ya debe poder ejecutar código en la máquina. Prioriza:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Servidores Linux con SSH expuesto.&lt;/li&gt;
&lt;li&gt;Servidores web donde pueda escribirse una web shell.&lt;/li&gt;
&lt;li&gt;Hosts multiusuario, bastiones, máquinas de desarrollo y runners CI/CD.&lt;/li&gt;
&lt;li&gt;Hosts de contenedores, nodos Kubernetes y nodos OpenShift.&lt;/li&gt;
&lt;li&gt;Sistemas que usen IPsec, VPN, xfrm o funcionalidad relacionada con RxRPC.&lt;/li&gt;
&lt;li&gt;Servidores con Ubuntu, RHEL, CentOS Stream, AlmaLinux, Fedora, openSUSE y otras distribuciones comunes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si un servidor no tiene usuarios locales, contenedores ni rutas de aplicación expuestas, el riesgo es menor. Pero cualquier sistema donde un atacante pueda conseguir una shell de bajo privilegio debe tratar esto como un problema de kernel de alta prioridad.&lt;/p&gt;
&lt;h2 id=&#34;primero-parchear&#34;&gt;Primero parchear
&lt;/h2&gt;&lt;p&gt;La corrección más segura es instalar la actualización de seguridad del kernel de tu distribución y reiniciar con el kernel nuevo.&lt;/p&gt;
&lt;p&gt;La página de Ubuntu indica que &lt;code&gt;CVE-2026-43284&lt;/code&gt; se publicó el 8 de mayo de 2026 y se clasifica como High. Microsoft también dice que Linux Kernel Organization publicó correcciones para &lt;code&gt;CVE-2026-43284&lt;/code&gt; y recomienda aplicar parches cuanto antes.&lt;/p&gt;
&lt;p&gt;Empieza revisando el sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /etc/os-release
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después actualiza el kernel según la distribución:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt full-upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Tras actualizar, confirma que el sistema arrancó con el kernel nuevo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -r
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Instalar paquetes de kernel sin reiniciar deja el kernel antiguo ejecutándose, así que la vulnerabilidad puede seguir presente.&lt;/p&gt;
&lt;h2 id=&#34;mitigación-temporal-desactivar-módulos-relacionados&#34;&gt;Mitigación temporal: desactivar módulos relacionados
&lt;/h2&gt;&lt;p&gt;Si aún no hay parches, o producción no puede reiniciarse de inmediato, evalúa si puedes desactivar temporalmente los módulos relacionados. La mitigación de Ubuntu bloquea la carga de &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt; y &lt;code&gt;rxrpc&lt;/code&gt;, y los descarga si ya están cargados.&lt;/p&gt;
&lt;p&gt;Crear reglas modprobe:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install esp4 /bin/false&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/modprobe.d/dirty-frag.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install esp6 /bin/false&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/modprobe.d/dirty-frag.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;install rxrpc /bin/false&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/modprobe.d/dirty-frag.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Actualizar initramfs para evitar carga temprana:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-initramfs -u -k all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Descargar módulos ya cargados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rmmod esp4 esp6 rxrpc 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Comprobar si siguen cargados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep -qE &lt;span class=&#34;s1&#34;&gt;&amp;#39;^(esp4|esp6|rxrpc) &amp;#39;&lt;/span&gt; /proc/modules &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Affected modules are loaded&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Affected modules are NOT loaded&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si un módulo está en uso, puede no descargarse. En ese caso, la regla de bloqueo probablemente solo surtirá efecto tras reiniciar.&lt;/p&gt;
&lt;h2 id=&#34;evalúa-impacto-antes-de-desactivar&#34;&gt;Evalúa impacto antes de desactivar
&lt;/h2&gt;&lt;p&gt;No pegues esos comandos a ciegas. &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt; y funciones xfrm/IPsec pueden usarse en VPN, túneles, redes cifradas, redes Kubernetes/contenedores o configuraciones empresariales. &lt;code&gt;rxrpc&lt;/code&gt; también puede afectar cargas que dependan de ese protocolo.&lt;/p&gt;
&lt;p&gt;Antes de ejecutar en producción, revisa al menos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsmod &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s1&#34;&gt;&amp;#39;^(esp4|esp6|rxrpc|xfrm)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip xfrm state
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip xfrm policy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si dependes de IPsec VPN o funciones relacionadas del kernel, desactivar módulos puede cortar conectividad. En ese caso, es mejor programar parcheo del kernel y ventana de mantenimiento que depender mucho tiempo del bloqueo de módulos.&lt;/p&gt;
&lt;h2 id=&#34;no-omitas-comprobaciones-post-compromiso&#34;&gt;No omitas comprobaciones post-compromiso
&lt;/h2&gt;&lt;p&gt;Microsoft recuerda que la mitigación no necesariamente revierte cambios ya introducidos por explotación exitosa. Si el atacante ya obtuvo root, puede haber dejado persistencia, modificado archivos, alterado logs o accedido a datos de sesión.&lt;/p&gt;
&lt;p&gt;Comprueba al menos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;journalctl -k --since &lt;span class=&#34;s2&#34;&gt;&amp;#34;24 hours ago&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -Ei &lt;span class=&#34;s2&#34;&gt;&amp;#34;dirty|frag|exploit|segfault|xfrm|rxrpc|esp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;last -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lastlog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo find /tmp /var/tmp /dev/shm -type f -mtime -3 -ls
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo find / -perm -4000 -type f -mtime -7 -ls 2&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;También revisa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Lanzamientos anómalos de &lt;code&gt;su&lt;/code&gt;, &lt;code&gt;sudo&lt;/code&gt; o procesos SUID/SGID.&lt;/li&gt;
&lt;li&gt;Ejecutables ELF creados recientemente.&lt;/li&gt;
&lt;li&gt;Archivos PHP, JSP o ASP sospechosos en directorios web.&lt;/li&gt;
&lt;li&gt;Cambios en SSH authorized_keys.&lt;/li&gt;
&lt;li&gt;Persistencia nueva en systemd services, cron o rc.local.&lt;/li&gt;
&lt;li&gt;Contenedores privilegiados o montajes sospechosos en hosts de contenedores.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si sospechas explotación, aísla el host, conserva evidencias, rota credenciales y luego limpia. No asumas que descargar módulos o limpiar cachés hace seguro el sistema.&lt;/p&gt;
&lt;h2 id=&#34;sobre-drop_caches&#34;&gt;Sobre drop_caches
&lt;/h2&gt;&lt;p&gt;Microsoft menciona que en algunos escenarios de verificación de integridad post-explotación puede evaluarse limpiar caché:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /proc/sys/vm/drop_caches
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto no es una corrección de la vulnerabilidad ni un comando de limpieza de incidente. Limpiar cachés puede aumentar I/O de disco y afectar rendimiento en producción. Úsalo solo como paso auxiliar tras entender el impacto. La corrección real sigue siendo parchear, reiniciar, verificar integridad y revisar persistencia.&lt;/p&gt;
&lt;h2 id=&#34;orden-recomendado-de-respuesta&#34;&gt;Orden recomendado de respuesta
&lt;/h2&gt;&lt;p&gt;Para producción, una secuencia razonable es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inventariar activos Linux y versiones de kernel.&lt;/li&gt;
&lt;li&gt;Priorizar sistemas con SSH expuesto, workloads web, hosts de contenedores y acceso multiusuario.&lt;/li&gt;
&lt;li&gt;Parchear y reiniciar cuanto antes los sistemas que puedan reiniciarse.&lt;/li&gt;
&lt;li&gt;En sistemas que aún no puedan parchearse o reiniciarse, evaluar desactivar &lt;code&gt;esp4&lt;/code&gt;, &lt;code&gt;esp6&lt;/code&gt; y &lt;code&gt;rxrpc&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Aumentar monitorización de &lt;code&gt;su&lt;/code&gt;, SUID/SGID, ELF sospechosos, web shells e indicadores de escape de contenedor.&lt;/li&gt;
&lt;li&gt;Ejecutar comprobaciones post-compromiso y rotar credenciales en hosts sospechosos.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Dirty Frag no es una vulnerabilidad “remote one-click”, pero aumenta mucho el riesgo tras una intrusión. Si un atacante puede ejecutar código local con pocos privilegios, &lt;code&gt;CVE-2026-43284&lt;/code&gt; y la superficie asociada a &lt;code&gt;rxrpc&lt;/code&gt; pueden permitir escalada a root.&lt;/p&gt;
&lt;p&gt;Para administradores, la prioridad no es estudiar PoC. La prioridad es confirmar exposición del kernel, instalar actualizaciones de seguridad de la distribución y reiniciar, evaluar mitigaciones de bloqueo de módulos antes de la ventana de parcheo, e inspeccionar sistemas expuestos o sospechosos en busca de problemas de integridad y persistencia.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.microsoft.com/en-us/security/blog/2026/05/08/active-attack-dirty-frag-linux-vulnerability-expands-post-compromise-risk/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Microsoft Security Blog: Active attack: Dirty Frag Linux vulnerability expands post-compromise risk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ubuntu.com/security/CVE-2026-43284&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ubuntu: CVE-2026-43284&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://ubuntu.com/blog/dirty-frag-linux-vulnerability-fixes-available&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Ubuntu: Dirty Frag Linux kernel local privilege escalation vulnerability mitigations&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Guía de Btrfs Scrub: verificación de datos, reparación automática y mantenimiento periódico</title>
        <link>https://knightli.com/es/2026/05/09/btrfs-scrub-check-repair-guide/</link>
        <pubDate>Sat, 09 May 2026 07:11:01 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/09/btrfs-scrub-check-repair-guide/</guid>
        <description>&lt;p&gt;Btrfs scrub es una de las funciones de mantenimiento más importantes y más malentendidas de Btrfs. No es fsck en el sentido tradicional. Es una pasada de validación online que lee datos y metadata del filesystem, verifica checksums, superblocks, metadata block headers y errores de lectura del disco, e intenta reparar daños cuando existe una réplica buena conocida.&lt;/p&gt;
&lt;p&gt;Si usas Btrfs en un NAS, servidor doméstico, disco de backup o array multidispositivo, scrub debería formar parte del mantenimiento periódico. Su valor no es “ejecutarlo después del desastre”, sino detectar corrupción silenciosa temprano, mientras los discos aún se pueden leer y todavía existen réplicas buenas.&lt;/p&gt;
&lt;h2 id=&#34;qué-comprueba-scrub&#34;&gt;Qué comprueba scrub
&lt;/h2&gt;&lt;p&gt;Según la documentación oficial de Btrfs, scrub recorre datos y metadata del filesystem y comprueba principalmente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Errores de checksum en bloques de datos.&lt;/li&gt;
&lt;li&gt;Errores básicos de super block.&lt;/li&gt;
&lt;li&gt;Errores básicos de metadata block header.&lt;/li&gt;
&lt;li&gt;Errores de lectura de disco.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En filesystems que usan perfiles de block group replicados, como RAID1, scrub sobre un montaje read-write puede reparar automáticamente algunos daños. La reparación no es recuperación mágica. Btrfs copia datos buenos verificados desde otra réplica.&lt;/p&gt;
&lt;p&gt;Este punto es clave: la reparación de scrub depende de que exista una copia buena conocida. En un disco único con una sola copia de los datos, scrub puede detectar errores de checksum, pero normalmente no puede restaurar el contenido original por sí mismo.&lt;/p&gt;
&lt;h2 id=&#34;comandos-comunes&#34;&gt;Comandos comunes
&lt;/h2&gt;&lt;p&gt;Iniciar scrub sobre un punto de montaje:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub start /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejecutarlo en foreground, útil para observar manualmente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub start -B /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ver estado:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub status /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Cancelar un scrub en ejecución:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub cancel /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Reanudar un scrub interrumpido:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub resume /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si especificas una ruta montada de Btrfs, Btrfs hace scrub de todos los dispositivos del filesystem en paralelo. Si especificas un dispositivo, solo se hace scrub de ese dispositivo. Pero si la réplica del dispositivo indicado no puede leerse o verificarse, Btrfs intenta leer una copia buena desde otro dispositivo.&lt;/p&gt;
&lt;h2 id=&#34;scrub-no-es-fsck&#34;&gt;Scrub no es fsck
&lt;/h2&gt;&lt;p&gt;Este es el error más común. Scrub no es &lt;code&gt;btrfs check&lt;/code&gt; ni un comprobador tradicional de filesystem.&lt;/p&gt;
&lt;p&gt;Scrub puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usar checksums para detectar corrupción de datos o metadata.&lt;/li&gt;
&lt;li&gt;Reparar automáticamente cuando existe otra réplica fiable.&lt;/li&gt;
&lt;li&gt;Detectar errores de lectura de disco y algunos errores estructurales básicos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scrub no puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reconstruir datos cuando no existe una réplica buena.&lt;/li&gt;
&lt;li&gt;Sustituir una comprobación offline del filesystem.&lt;/li&gt;
&lt;li&gt;Reparar toda corrupción compleja de estructuras de árbol.&lt;/li&gt;
&lt;li&gt;Garantizar que el contenido a nivel de aplicación sea correcto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si las estructuras del filesystem están gravemente dañadas, pueden necesitarse herramientas como &lt;code&gt;btrfs check&lt;/code&gt; bajo guía experta. No trates scrub como un comando universal de reparación.&lt;/p&gt;
&lt;h2 id=&#34;riesgos-de-archivos-nocow&#34;&gt;Riesgos de archivos NOCOW
&lt;/h2&gt;&lt;p&gt;La documentación de Btrfs advierte de un punto importante: al establecer el atributo &lt;code&gt;NOCOW&lt;/code&gt; con &lt;code&gt;chattr +C&lt;/code&gt;, la implementación actual también activa implícitamente &lt;code&gt;NODATASUM&lt;/code&gt;. Eso significa que los datos del archivo no tienen checksum.&lt;/p&gt;
&lt;p&gt;Scrub aún puede validar y reparar la metadata de esos archivos, pero no puede validar el contenido de sus datos. Esto es especialmente arriesgado en configuraciones con varias réplicas: si una copia de un archivo NOCOW se daña, Btrfs no tiene checksum de datos para saber qué réplica es buena, así que puede devolver contenido dañado a user space.&lt;/p&gt;
&lt;p&gt;Algunas aplicaciones usan &lt;code&gt;+C&lt;/code&gt; por defecto por rendimiento. systemd journal y algunos escenarios de libvirt storage pool son ejemplos conocidos. Para imágenes de VM, bases de datos y directorios de logs puede tener sentido por rendimiento, pero significa que no puedes esperar que scrub proteja sus datos igual que protege archivos COW normales.&lt;/p&gt;
&lt;h2 id=&#34;read-only-scrub-todavía-puede-escribir&#34;&gt;Read-only scrub todavía puede escribir
&lt;/h2&gt;&lt;p&gt;Otro punto contraintuitivo: ejecutar read-only scrub en un filesystem montado read-write puede causar algunas escrituras.&lt;/p&gt;
&lt;p&gt;La documentación oficial explica que se debe a una limitación de diseño para evitar carreras entre marcar block groups como read-only y escribir de vuelta block group items. En otras palabras, si quieres que scrub no escriba nada, debes ejecutar read-only scrub sobre un filesystem montado read-only. Añadir una opción de read-only scrub sobre un montaje read-write no basta.&lt;/p&gt;
&lt;p&gt;Para usuarios normales, esto significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El scrub online rutinario puede ejecutarse sobre un montaje read-write.&lt;/li&gt;
&lt;li&gt;Para forense, análisis de fallos o comprobaciones muy conservadoras, confirma antes el estado del montaje.&lt;/li&gt;
&lt;li&gt;No interpretes read-only scrub como cero escrituras absolutas.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;interrupción-y-reanudación&#34;&gt;Interrupción y reanudación
&lt;/h2&gt;&lt;p&gt;En kernels recientes, scrub puede ser interrumpido por eventos como suspend, hibernate, filesystem freezing, cgroup freezing y pending signals. Tras una interrupción, el scrub en ejecución se cancela, pero puede reanudarse con &lt;code&gt;btrfs scrub resume&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;El estado de scrub se registra en:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/var/lib/btrfs/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los nombres suelen parecerse a:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scrub.status.UUID
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scrub.progress.UUID
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El archivo de estado se actualiza periódicamente. Un scrub reanudado continúa desde la última posición guardada, no desde el principio.&lt;/p&gt;
&lt;h2 id=&#34;cada-cuánto-ejecutarlo&#34;&gt;Cada cuánto ejecutarlo
&lt;/h2&gt;&lt;p&gt;La recomendación oficial es una vez al mes. En la práctica, ajusta según la importancia de los datos y el estado de los discos.&lt;/p&gt;
&lt;p&gt;Calendarios comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NAS doméstico: una vez al mes.&lt;/li&gt;
&lt;li&gt;Discos de backup: tras sesiones largas conectados o una vez al mes.&lt;/li&gt;
&lt;li&gt;Arrays multidispositivo importantes: una vez al mes, o más a menudo si hace falta.&lt;/li&gt;
&lt;li&gt;Migración a disco nuevo o sospecha de fallo: ejecutar justo después de migrar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scrub puede usar alrededor del 80% del ancho de banda del dispositivo en un filesystem inactivo, así que no conviene ejecutarlo en horas pico. En arrays HDD, la latencia puede subir notablemente durante scrub. En SSD también añade read amplification y presión de fondo.&lt;/p&gt;
&lt;h2 id=&#34;limitar-ancho-de-banda-de-scrub&#34;&gt;Limitar ancho de banda de scrub
&lt;/h2&gt;&lt;p&gt;Antes se usaba &lt;code&gt;ionice&lt;/code&gt; para reducir el impacto de scrub sobre I/O foreground. La documentación oficial advierte que no todos los I/O schedulers lo soportan igual. CFQ ya no está disponible de forma general. BFQ soporta el comportamiento de prioridad relacionado, pero conviene entenderlo antes de usarlo. Para schedulers comunes como &lt;code&gt;mq-deadline&lt;/code&gt;, suele ser mejor usar cgroup2 I/O controller o límites específicos de Btrfs.&lt;/p&gt;
&lt;p&gt;Ejemplo con systemd para limitar ancho de banda de lectura:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemd-run -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;IOReadBandwidthMax=/dev/sdx 10M&amp;#34;&lt;/span&gt; btrfs scrub start -B /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Desde Linux 5.14, Btrfs puede establecer límites de scrub por dispositivo mediante sysfs:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; 100m &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/btrfs/FSID/devinfo/DEVID/scrub_speed_max
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Mostrar límites actuales:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub limit /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esta configuración no es persistente y desaparece al desmontar el filesystem. Sustituye &lt;code&gt;FSID&lt;/code&gt; y &lt;code&gt;DEVID&lt;/code&gt; por los valores reales de tu sistema. Puedes empezar comprobando:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs filesystem show /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /sys/fs/btrfs/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;flujo-práctico-de-mantenimiento&#34;&gt;Flujo práctico de mantenimiento
&lt;/h2&gt;&lt;p&gt;Un flujo razonable de mantenimiento Btrfs puede ser:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub start -B /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs scrub status /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs device stats /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dmesg -T &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -Ei &lt;span class=&#34;s2&#34;&gt;&amp;#34;btrfs|checksum|i/o error|read error&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si scrub informa corrected errors, Btrfs reparó datos desde una réplica buena, pero no debes ignorarlo. Sigue revisando SMART, cables, alimentación, controladores y Btrfs device stats.&lt;/p&gt;
&lt;p&gt;Si scrub informa uncorrectable errors, Btrfs no encontró una copia buena. Haz backup cuanto antes de lo que aún pueda leerse, identifica archivos o dispositivos afectados, y reemplaza hardware o restaura desde backup según corresponda.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Btrfs scrub tiene un papel claro: verificación online de datos y reparación desde réplicas. No es fsck y no es backup.&lt;/p&gt;
&lt;p&gt;Funciona mejor en filesystems Btrfs con checksums y réplicas redundantes, donde puede encontrar corrupción silenciosa de forma periódica y restaurar desde copias buenas. No puede proteger datos de archivos NOCOW sin checksum, ni recuperar contenido dañado si no hay una réplica buena.&lt;/p&gt;
&lt;p&gt;Si guardas datos importantes en Btrfs, ejecuta scrub mensualmente y úsalo junto con SMART, device stats, backups y alertas. La seguridad de datos fiable viene de checksums, redundancia, monitorización y backups trabajando juntos, no de un solo comando.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://btrfs.readthedocs.io/en/latest/Scrub.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Documentación oficial de Btrfs: Scrub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>¿F2FS congela un HC620 SMR? Guía de diagnóstico para discos SMR en Linux</title>
        <link>https://knightli.com/es/2026/05/08/hc620-smr-f2fs-io-wait-freeze/</link>
        <pubDate>Fri, 08 May 2026 22:34:39 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/hc620-smr-f2fs-io-wait-freeze/</guid>
        <description>&lt;p&gt;Cuando un HC620 de helio con SMR se usa con F2FS, síntomas como congelamientos del sistema, aplicaciones sin respuesta y &lt;code&gt;iowait&lt;/code&gt; alto durante mucho tiempo normalmente no se deben a una sola opción mal configurada. Son el resultado de un choque entre las características del dispositivo y la política del filesystem.&lt;/p&gt;
&lt;p&gt;Western Digital Ultrastar DC HC620 es un disco Host-managed SMR. Encaja mejor con escrituras secuenciales, cargas zoned-aware y stacks de software que entienden las restricciones del dispositivo. F2FS es un filesystem log-structured diseñado para flash. Aunque puede reorganizar muchas escrituras aleatorias como escrituras secuenciales, la falta de espacio libre, el GC frecuente o las actualizaciones intensas de metadata pueden llevar a un disco mecánico SMR a ciclos internos largos de mantenimiento.&lt;/p&gt;
&lt;h2 id=&#34;primero-confirma-si-es-este-problema&#34;&gt;Primero confirma si es este problema
&lt;/h2&gt;&lt;p&gt;Empieza con estas comprobaciones:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iostat -x &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iotop -oPa
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dmesg -T &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -Ei &lt;span class=&#34;s2&#34;&gt;&amp;#34;f2fs|blk|zoned|reset|timeout|I/O error&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si &lt;code&gt;%util&lt;/code&gt; se mantiene cerca de 100%, &lt;code&gt;await&lt;/code&gt; es alto y muchos procesos quedan en estado &lt;code&gt;D&lt;/code&gt;, el cuello de botella probablemente está en el I/O del dispositivo de bloques.&lt;/p&gt;
&lt;p&gt;Luego confirma si el disco aparece como dispositivo zoned:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -o NAME,MODEL,SIZE,ROTA,ZONED,SCHED,MOUNTPOINTS
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/block/sdX/queue/zoned
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si es Host-managed SMR, un filesystem normal y cargas con escrituras aleatorias pueden rendir muy mal. A diferencia de muchos SMR de escritorio gestionados por el propio disco, esta clase depende más de que el software del host entienda las reglas de escritura.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-f2fs-puede-amplificar-el-bloqueo&#34;&gt;Por qué F2FS puede amplificar el bloqueo
&lt;/h2&gt;&lt;p&gt;El problema de SMR es que no puede sobrescribir ubicaciones arbitrarias tan libremente como un disco CMR. Las pistas se superponen para aumentar capacidad. Cuando las escrituras se vuelven aleatorias, las sobrescrituras son frecuentes o la caché se agota, el disco necesita mover y reorganizar datos.&lt;/p&gt;
&lt;p&gt;F2FS fue creado para NAND flash. Usa escrituras log-structured y recupera espacio mediante segment cleaning y garbage collection. En SSD esto suele ser natural porque no hay seek mecánico. En discos mecánicos, especialmente SMR, las lecturas y escrituras generadas por GC pueden convertirse en tail latency severa.&lt;/p&gt;
&lt;p&gt;Cuando background GC de F2FS, escrituras foreground, checkpoints, actualizaciones de metadata y la limpieza SMR interna del disco se superponen, la cola de I/O puede permanecer saturada durante mucho tiempo. En espacio de usuario, copiar archivos, borrar directorios, descargar, descomprimir o escribir en bases de datos puede hacer que el sistema parezca congelado.&lt;/p&gt;
&lt;h2 id=&#34;empieza-con-opciones-de-montaje-conservadoras&#34;&gt;Empieza con opciones de montaje conservadoras
&lt;/h2&gt;&lt;p&gt;Si no puedes migrar inmediatamente, ajusta primero &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UUID=xxxx  /data  f2fs  defaults,nodiscard,active_logs=2,gc_merge,flush_merge,lazytime  0  0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Qué hace cada opción:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;nodiscard&lt;/code&gt;: desactiva discard en tiempo real. Los discos mecánicos normalmente no necesitan TRIM/discard frecuente como un SSD.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;active_logs=2&lt;/code&gt;: F2FS admite 2, 4 o 6 active logs; el valor por defecto suele ser 6. Bajar a 2 puede reducir presión de seek por logs concurrentes.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gc_merge&lt;/code&gt;: permite que el hilo de background GC gestione algunas peticiones de foreground GC, reduciendo bloqueos cuando un proceso dispara GC lento.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flush_merge&lt;/code&gt;: fusiona peticiones de cache flush, útil si el dispositivo maneja flush lentamente.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;lazytime&lt;/code&gt;: reduce escrituras de metadata causadas por algunas actualizaciones de tiempo de acceso.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No trates &lt;code&gt;checkpoint=disable&lt;/code&gt; como una opción normal de rendimiento. Puede reducir presión de checkpoint, pero aumenta el riesgo tras cortes de energía o fallos. La documentación del kernel también indica que el filesystem sigue necesitando GC mientras checkpoint está desactivado para garantizar espacio utilizable. Si no entiendes bien el coste, no lo uses como solución permanente.&lt;/p&gt;
&lt;h2 id=&#34;ajusta-el-io-scheduler&#34;&gt;Ajusta el I/O scheduler
&lt;/h2&gt;&lt;p&gt;Los discos mecánicos y SMR suelen necesitar fusión de peticiones y control de latencia. Mira primero el scheduler actual:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/block/sdX/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Puedes probar &lt;code&gt;mq-deadline&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; mq-deadline &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/block/sdX/queue/scheduler
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para uso de escritorio, también merece probar &lt;code&gt;bfq&lt;/code&gt;. No mires solo throughput secuencial. Observa si bajan los bloqueos, si &lt;code&gt;await&lt;/code&gt; mejora y si el sistema se siente más estable.&lt;/p&gt;
&lt;h2 id=&#34;limita-el-background-gc-de-f2fs&#34;&gt;Limita el background GC de F2FS
&lt;/h2&gt;&lt;p&gt;La ruta sysfs de F2FS depende del nombre real del dispositivo. Compruébalo primero:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls /sys/fs/f2fs/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego ajusta el intervalo de GC para el dispositivo correspondiente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;60000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/f2fs/sdX/gc_min_sleep_time
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;120000&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /sys/fs/f2fs/sdX/gc_max_sleep_time
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Aquí &lt;code&gt;sdX&lt;/code&gt; es solo un ejemplo. El nombre real puede ser &lt;code&gt;sda1&lt;/code&gt;, &lt;code&gt;dm-0&lt;/code&gt; u otro. Aumentar GC sleep time reduce la frecuencia con la que background GC compite por I/O, pero la recuperación de espacio será más lenta. Si el disco está casi lleno, puede volver a dispararse foreground GC, así que conviene dejar espacio libre suficiente.&lt;/p&gt;
&lt;h2 id=&#34;mejores-opciones-a-largo-plazo&#34;&gt;Mejores opciones a largo plazo
&lt;/h2&gt;&lt;p&gt;Si el disco guarda datos importantes, la opción más segura a largo plazo es hacer backup y cambiar de filesystem, o usar un disco más adecuado.&lt;/p&gt;
&lt;p&gt;Para discos mecánicos grandes, considera:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XFS: adecuado para archivos grandes, discos de backup, bibliotecas multimedia, archivos y escrituras secuenciales.&lt;/li&gt;
&lt;li&gt;EXT4: compatible, estable y con mucha documentación de diagnóstico.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si el disco es Host-managed SMR, confirma también que kernel, controlador, filesystem y aplicaciones soportan realmente zoned block devices. De lo contrario, usarlo como un disco normal de escrituras aleatorias puede provocar bloqueos largos e impredecibles.&lt;/p&gt;
&lt;h2 id=&#34;consejos-prácticos&#34;&gt;Consejos prácticos
&lt;/h2&gt;&lt;p&gt;Este tipo de disco encaja mejor con datos fríos, archivos, backups, multimedia y escrituras secuenciales. No es buena opción para cachés de descarga, imágenes de contenedores, discos de VM, bases de datos, descompresión frecuente o escrituras aleatorias de archivos pequeños.&lt;/p&gt;
&lt;p&gt;Si debes seguir usando F2FS, al menos haz esto:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Desactiva discard en tiempo real.&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;active_logs=2&lt;/code&gt; para reducir logs concurrentes.&lt;/li&gt;
&lt;li&gt;Activa &lt;code&gt;gc_merge&lt;/code&gt; y &lt;code&gt;flush_merge&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Mantén bastante espacio libre.&lt;/li&gt;
&lt;li&gt;Evita colocar descargas, bases de datos e imágenes de VM en este disco.&lt;/li&gt;
&lt;li&gt;Observa &lt;code&gt;iostat -x 1&lt;/code&gt;, no solo la velocidad media.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En resumen, los congelamientos de HC620 + F2FS aparecen cuando se combinan las restricciones de escritura de SMR, el GC de F2FS y la tail latency de un disco mecánico. La mitigación a corto plazo es ajustar opciones de montaje, scheduler y background GC. La solución a largo plazo es migrar a XFS/EXT4 o usar el SMR solo para cargas secuenciales de archivo.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://docs.kernel.org/filesystems/f2fs.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Linux Kernel Documentation: F2FS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://documents.westerndigital.com/content/dam/doc-library/en_us/assets/public/western-digital/product/data-center-drives/ultrastar-dc-hc600-series/data-sheet-ultrastar-dc-hc620.pdf&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Western Digital Ultrastar DC HC620 Data Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Despliegue privado local de DeepSeek V4: elegir entre chips nacionales y clusters de GPU de consumo</title>
        <link>https://knightli.com/es/2026/05/08/deepseek-v4-local-private-deployment/</link>
        <pubDate>Fri, 08 May 2026 09:39:35 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/deepseek-v4-local-private-deployment/</guid>
        <description>&lt;p&gt;Tras el lanzamiento de DeepSeek V4, muchas empresas empezaron a hacerse una pregunta: ¿se puede evitar una API externa y desplegar el modelo en un centro de datos propio, una nube privada o un cluster dedicado?&lt;/p&gt;
&lt;p&gt;La necesidad es muy real. Finanzas, sanidad, gobierno, fabricacion, legal y equipos de I+D a menudo no pueden enviar documentos internos, codigo, contratos, tickets o datos de clientes directamente a modelos de nube publica. En estos escenarios, el atractivo de DeepSeek V4 no esta solo en la capacidad del modelo, sino en que ofrece a las empresas una opcion mas cercana a una infraestructura LLM controlable.&lt;/p&gt;
&lt;p&gt;Sin embargo, desplegar DeepSeek V4 localmente no es tan simple como descargar el modelo y buscar unas cuantas GPU. Especialmente en modelos MoE muy grandes como Pro, el numero total de parametros, parametros activos, longitud de contexto, KV cache, concurrencia y framework de inferencia determinan directamente el coste de hardware. Lo que una empresa debe hacer no es perseguir a ciegas la version completa, sino confirmar primero que forma de despliegue necesita el negocio.&lt;/p&gt;
&lt;h2 id=&#34;aclarar-primero-el-objetivo-del-despliegue&#34;&gt;Aclarar primero el objetivo del despliegue
&lt;/h2&gt;&lt;p&gt;El despliegue privado local en empresas suele tener tres objetivos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Que los datos no salgan del dominio: documentos internos, codigo, materiales de clientes, logs y bases de conocimiento no abandonan el entorno empresarial.&lt;/li&gt;
&lt;li&gt;Estabilidad y control: servicios de modelo, permisos, auditoria, logs y ritmo de actualizaciones quedan bajo control de la empresa.&lt;/li&gt;
&lt;li&gt;Reducir coste a largo plazo: con llamadas frecuentes, la inferencia local puede ser mas controlable que comprar API externas durante mucho tiempo.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si solo unos pocos empleados preguntan de vez en cuando, el despliegue local no siempre compensa. La privatizacion encaja mejor con escenarios frecuentes, estables, sensibles en datos y con flujos claros, por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas sobre una base de conocimiento interna.&lt;/li&gt;
&lt;li&gt;Revision de codigo y asistentes de desarrollo.&lt;/li&gt;
&lt;li&gt;Resumen de tickets de atencion al cliente.&lt;/li&gt;
&lt;li&gt;Analisis de contratos, historias clinicas e informes.&lt;/li&gt;
&lt;li&gt;Asistentes para consultas de bases de datos.&lt;/li&gt;
&lt;li&gt;Automatizacion de flujos con Agent.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos escenarios comparten rasgos: datos sensibles, llamadas estables y posibilidad de incorporarse a la gobernanza empresarial mediante permisos y logs.&lt;/p&gt;
&lt;h2 id=&#34;no-perseguir-pro-completo-desde-el-primer-dia&#34;&gt;No perseguir Pro completo desde el primer dia
&lt;/h2&gt;&lt;p&gt;Las versiones comunes de DeepSeek V4 incluyen Pro y Flash. Segun materiales publicos, Pro se orienta a razonamiento mas fuerte y tareas Agent complejas, mientras Flash enfatiza coste y velocidad de respuesta. Al elegir, una empresa no deberia asumir que todo el negocio necesita Pro.&lt;/p&gt;
&lt;p&gt;Puedes dividir por complejidad de tarea:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas simples, resumen, clasificacion y generacion de etiquetas: priorizar Flash o modelos mas pequenos.&lt;/li&gt;
&lt;li&gt;RAG para bases de conocimiento internas: Flash cubre muchos escenarios; RAG, permisos y calidad de recuperacion importan mas.&lt;/li&gt;
&lt;li&gt;Code Agents, razonamiento complejo y analisis de contexto largo: entonces evaluar Pro.&lt;/li&gt;
&lt;li&gt;Tareas de alto valor y baja frecuencia: se puede usar Pro, pero no necesariamente con alta concurrencia.&lt;/li&gt;
&lt;li&gt;Asistentes de oficina comunes: no hace falta ocupar durante mucho tiempo los recursos de inferencia mas caros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La ventaja de los modelos MoE es que cada inferencia solo activa una parte de los parametros, pero eso no significa que la presion de hardware sea pequena. Almacenamiento de pesos, paralelismo de expertos, comunicacion de red, cache de contexto y planificacion concurrente siguen siendo pesados. Especialmente con contexto de nivel 1M token, lo que consume recursos no suele ser una respuesta aislada, sino el contexto largo, la concurrencia multiusuario y las sesiones persistentes.&lt;/p&gt;
&lt;h2 id=&#34;ruta-de-chips-nacionales-adecuada-para-nube-privada-empresarial&#34;&gt;Ruta de chips nacionales: adecuada para nube privada empresarial
&lt;/h2&gt;&lt;p&gt;Si una empresa ya tiene un pool de computo nacional, o requisitos de Xinchuang, cumplimiento o control de cadena de suministro, puede evaluar primero chips nacionales como Ascend y Cambricon.&lt;/p&gt;
&lt;p&gt;Las ventajas de esta ruta son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Encaja mejor con requisitos de localizacion y control de cadena de suministro.&lt;/li&gt;
&lt;li&gt;Es adecuada para centros de datos empresariales, nubes dedicadas y proyectos de gobierno/empresa.&lt;/li&gt;
&lt;li&gt;Facilita unificar permisos, auditoria, aislamiento de recursos y operaciones.&lt;/li&gt;
&lt;li&gt;Es mas amable para servicios estables a largo plazo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero la ruta de chips nacionales tambien requiere mirar tres problemas reales.&lt;/p&gt;
&lt;p&gt;Primero, adaptacion del framework. Que el modelo pueda ejecutarse no depende solo de la potencia del chip, sino de si el framework de inferencia, operadores, bibliotecas de comunicacion, formatos de cuantizacion, paralelismo de expertos MoE y optimizacion de contexto largo estan maduros.&lt;/p&gt;
&lt;p&gt;Segundo, experiencia de ingenieria. La empresa necesita mas que &amp;ldquo;arranco correctamente&amp;rdquo;; necesita servicio estable: multiinquilino, limitacion de tasa, monitorizacion, recuperacion ante fallos, despliegues grises, auditoria de logs y aislamiento de permisos.&lt;/p&gt;
&lt;p&gt;Tercero, diferencias de ecosistema. El mismo modelo no tendra exactamente el mismo rendimiento, precision, soporte de cuantizacion y herramientas de despliegue en NVIDIA, Ascend, Cambricon u otras plataformas. Antes de producción hay que hacer pruebas de carga reales, no mirar solo la potencia nominal.&lt;/p&gt;
&lt;p&gt;Por tanto, los chips nacionales encajan mejor con empresas de presupuesto claro, requisitos altos de cumplimiento y voluntad de invertir en ingenieria de plataforma. No es la ruta mas facil, pero puede ser la que mejor encaje con la gobernanza a largo plazo.&lt;/p&gt;
&lt;h2 id=&#34;clusters-de-gpu-de-consumo-adecuados-para-pilotos-y-equipos-pequenos&#34;&gt;Clusters de GPU de consumo: adecuados para pilotos y equipos pequenos
&lt;/h2&gt;&lt;p&gt;Si el objetivo es validar primero el valor de negocio, un cluster de GPU de consumo es mas facil para empezar. GPU como RTX 4090, RTX 5090, RTX 3090 y RTX 3060 12GB tienen mas herramientas comunitarias, modelos cuantizados y referencias de inferencia local, por lo que el coste de prueba y error es menor.&lt;/p&gt;
&lt;p&gt;La ruta de GPU de consumo encaja con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pilotos internos de equipos de I+D.&lt;/li&gt;
&lt;li&gt;Preguntas sobre bases de conocimiento en pymes.&lt;/li&gt;
&lt;li&gt;Asistentes de codigo de baja concurrencia.&lt;/li&gt;
&lt;li&gt;Procesamiento offline de documentos.&lt;/li&gt;
&lt;li&gt;Herramientas internas sin requisitos estrictos de SLA.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero tambien tiene limites claros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;La VRAM es pequena y cuesta alojar directamente un modelo grande completo.&lt;/li&gt;
&lt;li&gt;La comunicacion multi-GPU es debil, y la comunicacion entre maquinas es mas complicada.&lt;/li&gt;
&lt;li&gt;La estabilidad a plena carga durante largo tiempo es peor que en soluciones de servidor.&lt;/li&gt;
&lt;li&gt;Chasis, alimentacion, refrigeracion, drivers y operaciones se convierten en costes ocultos.&lt;/li&gt;
&lt;li&gt;No conviene prometer alta disponibilidad empresarial desde el principio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un enfoque mas realista es ejecutar primero Flash, versiones destiladas, versiones cuantizadas o modelos pequenos en GPU de consumo, hacer funcionar el flujo de negocio y decidir despues si migrar a GPU de servidor o a una plataforma de computo nacional tras validar volumen de llamadas, efecto y gobernanza de datos.&lt;/p&gt;
&lt;h2 id=&#34;posible-arquitectura-de-despliegue&#34;&gt;Posible arquitectura de despliegue
&lt;/h2&gt;&lt;p&gt;Una arquitectura privada empresarial relativamente estable puede dividirse en seis capas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Capa de modelo: DeepSeek V4 Pro, V4 Flash o modelos destilados mas pequenos segun la tarea.&lt;/li&gt;
&lt;li&gt;Capa de inferencia: SGLang, vLLM, llama.cpp, stacks de inferencia NPU de fabricantes o servicios propios.&lt;/li&gt;
&lt;li&gt;Capa de gateway: autenticacion unificada, limitacion de tasa, auditoria, enrutamiento de modelos y logs de llamadas.&lt;/li&gt;
&lt;li&gt;Capa de conocimiento: base vectorial, busqueda de texto completo, analisis de documentos, filtrado por permisos y RAG.&lt;/li&gt;
&lt;li&gt;Capa de aplicacion: atencion al cliente, asistentes de codigo, analisis de documentos, preguntas sobre informes y flujos Agent.&lt;/li&gt;
&lt;li&gt;Capa de operaciones: monitorizacion, alertas, estadisticas de coste, despliegues grises, rollback y auditoria de seguridad.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Las capas que mas se subestiman son el gateway y la capa de conocimiento. Muchos proyectos fallan no porque el modelo sea inutilizable, sino porque permisos, recuperacion, logs, gestion de contexto, plantillas de prompt y flujos de negocio no estan bien hechos.&lt;/p&gt;
&lt;p&gt;Al desplegar LLM dentro de una empresa, el modelo debe tratarse como una capacidad de infraestructura, no como una pagina de chat aislada. El valor real aparece cuando el modelo entra en los flujos y puede procesar de forma estable los datos y tareas propios de la empresa.&lt;/p&gt;
&lt;h2 id=&#34;criterios-para-elegir-hardware&#34;&gt;Criterios para elegir hardware
&lt;/h2&gt;&lt;p&gt;El hardware no debe evaluarse solo por &amp;ldquo;si puede correr&amp;rdquo;, sino tambien por &amp;ldquo;si puede prestar servicio de forma estable&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Puedes elegir por etapas:&lt;/p&gt;
&lt;h3 id=&#34;etapa-de-validacion&#34;&gt;Etapa de validacion
&lt;/h3&gt;&lt;p&gt;El objetivo es demostrar si merece la pena hacer el negocio.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usar 1-4 GPU de consumo.&lt;/li&gt;
&lt;li&gt;Priorizar Flash, modelos pequenos, modelos destilados o modelos cuantizados.&lt;/li&gt;
&lt;li&gt;Mantener baja la concurrencia y centrarse en la tasa de finalizacion de tareas.&lt;/li&gt;
&lt;li&gt;No prometer alta disponibilidad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En esta etapa no conviene comprar hardware a gran escala demasiado pronto. Primero confirma si los empleados realmente lo usan, si el negocio ahorra tiempo y si las respuestas pueden entrar en el flujo.&lt;/p&gt;
&lt;h3 id=&#34;etapa-piloto&#34;&gt;Etapa piloto
&lt;/h3&gt;&lt;p&gt;El objetivo es que un departamento o una linea de negocio lo use de forma estable.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usar 4-16 GPU o un conjunto de nodos NPU nacionales.&lt;/li&gt;
&lt;li&gt;Agregar gateway unificado, logs y control de permisos.&lt;/li&gt;
&lt;li&gt;Construir RAG, analisis de documentos, enrutamiento de modelos y cache.&lt;/li&gt;
&lt;li&gt;Empezar a medir tokens, concurrencia, latencia y tasa de fallos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En esta etapa hay que empezar a cuidar operaciones. El efecto del modelo es solo una parte; estabilidad, coste y gobernanza de datos son igual de importantes.&lt;/p&gt;
&lt;h3 id=&#34;etapa-de-produccion&#34;&gt;Etapa de produccion
&lt;/h3&gt;&lt;p&gt;El objetivo es entrar en servicio empresarial.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Usar GPU de servidor, clusters de computo nacional o pools de recursos de nube privada.&lt;/li&gt;
&lt;li&gt;Establecer multiples replicas, limitacion de tasa, failover y planificacion de capacidad.&lt;/li&gt;
&lt;li&gt;Enrutar modelos por tarea: tareas simples a modelos ligeros, tareas complejas a Pro.&lt;/li&gt;
&lt;li&gt;Conectar con sistemas de identidad, auditoria y politicas de seguridad de la empresa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En produccion no se recomienda enviar todas las solicitudes al modelo mas fuerte. Un enrutamiento razonable suele ahorrar mas dinero que acumular hardware.&lt;/p&gt;
&lt;h2 id=&#34;como-elegir-framework-de-inferencia&#34;&gt;Como elegir framework de inferencia
&lt;/h2&gt;&lt;p&gt;Modelos como DeepSeek V4 exigen mucho al framework de inferencia. Cuando intervienen MoE, contexto largo, atencion dispersa, cuantizacion y paralelismo multi-GPU, la madurez del framework afecta directamente velocidad y estabilidad.&lt;/p&gt;
&lt;p&gt;Las opciones comunes pueden entenderse asi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SGLang&lt;/code&gt;: adecuado para equipos que buscan inferencia de alto rendimiento, Agent, llamadas multi-turno a herramientas y orquestacion de servicios complejos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;vLLM&lt;/code&gt;: ecosistema maduro, adecuado para servicios LLM generales, pero el soporte concreto depende de la version y del progreso de adaptacion del modelo.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;llama.cpp&lt;/code&gt;: mas adecuado para modelos pequenos, modelos cuantizados y despliegue en edge; no para alojar directamente un MoE enorme completo.&lt;/li&gt;
&lt;li&gt;Stacks de inferencia NPU nacionales: adecuados para Xinchuang y entornos de computo nacional, pero hay que verificar operadores, cuantizacion y contexto largo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No elijas framework solo por benchmark. Una empresa deberia probar sus entradas reales: longitud de documentos internos, concurrencia, longitud media de salida, tasa de acierto de RAG, numero de llamadas a herramientas de Agent y reintentos tras fallos.&lt;/p&gt;
&lt;h2 id=&#34;la-seguridad-de-datos-debe-hacerse-fuera-del-modelo&#34;&gt;La seguridad de datos debe hacerse fuera del modelo
&lt;/h2&gt;&lt;p&gt;El despliegue privado no significa seguridad automatica. Ejecutar el modelo localmente solo resuelve una parte de si los datos salen de la empresa.&lt;/p&gt;
&lt;p&gt;Tambien hay que completar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuentas y permisos: cada departamento solo puede acceder a su propia base de conocimiento.&lt;/li&gt;
&lt;li&gt;Auditoria de logs: quien pregunto que, que modelo se llamo y que documentos se consultaron.&lt;/li&gt;
&lt;li&gt;Enmascaramiento de datos: informacion de clientes, numeros de documento, telefonos, importes de contrato y otros campos sensibles deben tratarse.&lt;/li&gt;
&lt;li&gt;Seguridad de prompts: evitar que usuarios eludan permisos o filtren prompts de sistema mediante prompts.&lt;/li&gt;
&lt;li&gt;Revision de salidas: en escenarios importantes debe haber revision humana o por reglas.&lt;/li&gt;
&lt;li&gt;Ciclo de vida de datos: documentos subidos, indices vectoriales, cache y registros de sesion deben poder eliminarse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para construir LLM locales, la empresa no puede involucrar solo al equipo de algoritmos. Seguridad, legal, operaciones y responsables de negocio tambien deben participar; si no, los riesgos se concentraran tras el lanzamiento.&lt;/p&gt;
&lt;h2 id=&#34;el-coste-no-son-solo-las-gpu&#34;&gt;El coste no son solo las GPU
&lt;/h2&gt;&lt;p&gt;El coste del despliegue local suele subestimarse. Ademas de GPU o NPU, hay que contar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Servidores, racks, alimentacion, refrigeracion y red.&lt;/li&gt;
&lt;li&gt;Almacenamiento y copias.&lt;/li&gt;
&lt;li&gt;Adaptacion de framework de inferencia y desarrollo de ingenieria.&lt;/li&gt;
&lt;li&gt;Monitorizacion operativa y gestion de incidentes.&lt;/li&gt;
&lt;li&gt;Actualizacion de modelos, rollback y pruebas de compatibilidad.&lt;/li&gt;
&lt;li&gt;Auditoria de seguridad y sistemas de permisos.&lt;/li&gt;
&lt;li&gt;Prompts, RAG y flujos de trabajo del lado del negocio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si el volumen de llamadas es bajo, una API externa puede ser mas barata. Si el volumen es alto, los datos son sensibles y el flujo es estable, el despliegue local amortiza mejor el coste.&lt;/p&gt;
&lt;p&gt;Una estrategia mas razonable es el despliegue hibrido:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Datos muy sensibles usan modelos locales.&lt;/li&gt;
&lt;li&gt;Tareas generales de baja sensibilidad pueden usar API externas.&lt;/li&gt;
&lt;li&gt;Tareas simples usan modelos pequenos.&lt;/li&gt;
&lt;li&gt;Tareas complejas usan DeepSeek V4 Pro.&lt;/li&gt;
&lt;li&gt;Tareas frecuentes priorizan optimizar cache, recuperacion y enrutamiento de modelos.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ruta-recomendada-de-implantacion&#34;&gt;Ruta recomendada de implantacion
&lt;/h2&gt;&lt;p&gt;Una empresa puede avanzar en este orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Elegir primero 2-3 escenarios de alto valor, sin desplegar en toda la empresa.&lt;/li&gt;
&lt;li&gt;Usar GPU de consumo o computo a pequena escala para un PoC.&lt;/li&gt;
&lt;li&gt;Ejecutar primero Flash, modelos destilados o modelos cuantizados, conectando RAG y permisos.&lt;/li&gt;
&lt;li&gt;Introducir Pro para comparar en tareas complejas.&lt;/li&gt;
&lt;li&gt;Registrar volumen real de llamadas, latencia, tasa de fallos y tiempo humano ahorrado.&lt;/li&gt;
&lt;li&gt;Despues decidir si comprar clusters de chips nacionales o GPU de servidor.&lt;/li&gt;
&lt;li&gt;Antes de produccion, completar gateway, auditoria, monitorizacion, limitacion de tasa y rollback.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esta ruta es mas estable que comprar un gran cluster desde el principio. El mayor riesgo para una empresa no es que el modelo no sea lo bastante fuerte, sino gastar mucho dinero y descubrir despues que el flujo de negocio no puede absorber esa capacidad.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;DeepSeek V4 abre mas imaginacion para el despliegue privado local en empresas, pero no es simplemente un &amp;ldquo;ChatGPT local&amp;rdquo;. La dificultad real esta en la ingenieria: hardware, frameworks, enrutamiento de modelos, permisos, RAG, auditoria, monitorizacion y control de costes deben considerarse juntos.&lt;/p&gt;
&lt;p&gt;La ruta de chips nacionales encaja mejor con empresas de alto cumplimiento y planes de nube privada a largo plazo. Los clusters de GPU de consumo encajan mejor con pilotos y validacion rapida en equipos pequenos y medianos. Pro sirve para razonamiento complejo y Agent; Flash o modelos pequenos son mejores para muchas tareas comunes.&lt;/p&gt;
&lt;p&gt;Si solo recuerdas una frase: el despliegue privado de DeepSeek V4 no debe empezar por comprar hardware, sino por escenarios de negocio, limites de datos y volumen de llamadas. Primero haz funcionar el escenario; despues decide si usar un modelo grande, que tamano debe tener y sobre que computo desplegarlo.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://apnews.com/article/deepseek-ai-china-gpt-v4-d2ed33f2521917193616e061674d5f92&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;AP News: DeepSeek launches an update of its AI model&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/blog/deepseekv4&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Hugging Face Blog: DeepSeek-V4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.lmsys.org/blog/2026-04-25-deepseek-v4/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;LMSYS Blog: DeepSeek-V4 on Day 0&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Modelos LLM locales recomendados para una GPU RTX 3060</title>
        <link>https://knightli.com/es/2026/05/08/rtx-3060-local-llm-models/</link>
        <pubDate>Fri, 08 May 2026 09:25:24 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/rtx-3060-local-llm-models/</guid>
        <description>&lt;p&gt;La versión más común de la RTX 3060 tiene 12GB de VRAM. No es una GPU de IA de gama alta, pero funciona muy bien para LLM locales, especialmente modelos de 7B, 8B, 9B y 12B.&lt;/p&gt;
&lt;p&gt;Si solo quieres una regla rápida:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;En una RTX 3060 12GB, prioriza modelos de alrededor de 8B en cuantización Q4_K_M o Q5_K_M. Elige Q4 para más estabilidad y prueba Q5 si quieres mejor calidad.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;No empieces persiguiendo modelos de 32B o 70B. Aunque puedan ejecutarse con cuantización muy baja y CPU offload, la velocidad y la experiencia normalmente no son adecuadas para uso diario.&lt;/p&gt;
&lt;h2 id=&#34;primero-mira-el-límite-de-vram&#34;&gt;Primero mira el límite de VRAM
&lt;/h2&gt;&lt;p&gt;Al ejecutar LLM locales en una RTX 3060 12GB, el límite real es la VRAM.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Tamaño del modelo&lt;/th&gt;
          &lt;th&gt;Cuantización recomendada&lt;/th&gt;
          &lt;th&gt;Experiencia en RTX 3060 12GB&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;3B / 4B&lt;/td&gt;
          &lt;td&gt;Q4, Q5, Q8&lt;/td&gt;
          &lt;td&gt;Muy fácil, rápido&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;7B / 8B / 9B&lt;/td&gt;
          &lt;td&gt;Q4_K_M, Q5_K_M&lt;/td&gt;
          &lt;td&gt;Lo más recomendado; buen equilibrio&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;12B / 14B&lt;/td&gt;
          &lt;td&gt;Q4_K_M&lt;/td&gt;
          &lt;td&gt;Se puede probar, cuidado con contexto grande&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;30B+&lt;/td&gt;
          &lt;td&gt;Q2 / Q3 o offload parcial&lt;/td&gt;
          &lt;td&gt;Se puede experimentar, no diario&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;70B+&lt;/td&gt;
          &lt;td&gt;Cuantización extrema o mucha CPU/RAM&lt;/td&gt;
          &lt;td&gt;Más bien experimental&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Un LLM local no solo consume VRAM por el archivo del modelo. También consumen contexto, KV cache, batch size, framework de inferencia y drivers.&lt;/p&gt;
&lt;p&gt;Por eso 12GB de VRAM no significa cargar sin más un archivo de modelo de 12GB. Es mejor dejar margen para el sistema y el contexto.&lt;/p&gt;
&lt;h2 id=&#34;recomendación-1-qwen3-8b&#34;&gt;Recomendación 1: Qwen3 8B
&lt;/h2&gt;&lt;p&gt;Si usas principalmente chino, &lt;code&gt;Qwen3 8B&lt;/code&gt; es uno de los primeros modelos que vale la pena probar en una RTX 3060.&lt;/p&gt;
&lt;p&gt;Sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas y respuestas en chino.&lt;/li&gt;
&lt;li&gt;Resumen y reescritura.&lt;/li&gt;
&lt;li&gt;Asistente diario de conocimiento.&lt;/li&gt;
&lt;li&gt;Explicación simple de código.&lt;/li&gt;
&lt;li&gt;RAG local.&lt;/li&gt;
&lt;li&gt;Flujos Agent ligeros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elección recomendada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Qwen3 8B GGUF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q4_K_M: primera opción
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q5_K_M: mejor calidad, más presión de VRAM
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La familia Qwen suele funcionar bien con chino. Para escritura diaria, organización de información y comprensión de instrucciones en chino, Qwen3 8B es un buen punto de partida.&lt;/p&gt;
&lt;h2 id=&#34;recomendación-2-llama-31-8b-instruct&#34;&gt;Recomendación 2: Llama 3.1 8B Instruct
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Llama 3.1 8B Instruct&lt;/code&gt; es un modelo general estable, con buena capacidad en inglés y ecosistema maduro.&lt;/p&gt;
&lt;p&gt;Sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas en inglés.&lt;/li&gt;
&lt;li&gt;Ayuda ligera con código.&lt;/li&gt;
&lt;li&gt;Chat general.&lt;/li&gt;
&lt;li&gt;Resumen de documentos.&lt;/li&gt;
&lt;li&gt;Pruebas de prompts.&lt;/li&gt;
&lt;li&gt;Comparar herramientas de inferencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elección recomendada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Llama 3.1 8B Instruct GGUF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q4_K_M: mejor velocidad y estabilidad de VRAM
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q5_K_M: mejor calidad de respuesta
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si procesas sobre todo material en inglés, o quieres un modelo con muchos tutoriales y buena compatibilidad, Llama 3.1 8B sigue siendo una buena base.&lt;/p&gt;
&lt;h2 id=&#34;recomendación-3-gemma-3-12b&#34;&gt;Recomendación 3: Gemma 3 12B
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;Gemma 3 12B&lt;/code&gt; está más cerca del límite práctico de una RTX 3060 12GB.&lt;/p&gt;
&lt;p&gt;Consume más VRAM que los modelos 8B, pero con cuantización Q4 todavía puede funcionar en una tarjeta de 12GB. Es una opción para quien quiera probar un modelo algo mayor en una sola GPU.&lt;/p&gt;
&lt;p&gt;Sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas generales de mayor calidad.&lt;/li&gt;
&lt;li&gt;Procesamiento de contenido en inglés.&lt;/li&gt;
&lt;li&gt;Resúmenes y análisis algo más complejos.&lt;/li&gt;
&lt;li&gt;Probar una mejora sobre modelos 8B.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elección recomendada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Gemma 3 12B GGUF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q4_K_M u oficial QAT Q4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No abras demasiado el contexto
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si falta VRAM, reduce primero la longitud de contexto o vuelve a un modelo 8B. Para una 3060, 12B es &amp;ldquo;probable&amp;rdquo;, no una recomendación automática.&lt;/p&gt;
&lt;h2 id=&#34;recomendación-4-deepseek-r1-distill-qwen-8b&#34;&gt;Recomendación 4: DeepSeek R1 Distill Qwen 8B
&lt;/h2&gt;&lt;p&gt;Si quieres probar modelos locales con estilo de razonamiento, puedes usar modelos como &lt;code&gt;DeepSeek R1 Distill Qwen 8B&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sirve para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Problemas simples de razonamiento.&lt;/li&gt;
&lt;li&gt;Análisis por pasos.&lt;/li&gt;
&lt;li&gt;Aprender el estilo de salida de modelos de razonamiento.&lt;/li&gt;
&lt;li&gt;Experimentos locales de bajo costo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elección recomendada:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DeepSeek R1 Distill Qwen 8B GGUF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Estos modelos a veces generan procesos de razonamiento más largos, así que la velocidad y el uso de contexto pueden sentirse más pesados que en modelos instruct normales. Para chat diario no siempre son más cómodos que Qwen3 8B, pero sirven bien para experimentar.&lt;/p&gt;
&lt;h2 id=&#34;recomendación-5-phi--minicpm--modelos-pequeños&#34;&gt;Recomendación 5: Phi / MiniCPM / modelos pequeños
&lt;/h2&gt;&lt;p&gt;Si tu 3060 es de 8GB, o tu RAM también es limitada, considera primero modelos de 3B o 4B.&lt;/p&gt;
&lt;p&gt;Sirven para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Preguntas rápidas.&lt;/li&gt;
&lt;li&gt;Resúmenes simples.&lt;/li&gt;
&lt;li&gt;Integración en pequeñas herramientas locales.&lt;/li&gt;
&lt;li&gt;Chat de baja latencia.&lt;/li&gt;
&lt;li&gt;Pruebas en equipos antiguos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No siempre igualan la calidad de 8B o 12B, pero son ligeros, rápidos y fáciles de desplegar.&lt;/p&gt;
&lt;h2 id=&#34;cómo-elegir-cuantización&#34;&gt;Cómo elegir cuantización
&lt;/h2&gt;&lt;p&gt;El formato local común es &lt;code&gt;GGUF&lt;/code&gt;, con cuantizaciones como Q4, Q5, Q6 y Q8.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Cuantización&lt;/th&gt;
          &lt;th&gt;Características&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Q4_K_M&lt;/td&gt;
          &lt;td&gt;Pequeña, rápida, calidad suficiente&lt;/td&gt;
          &lt;td&gt;Primera opción en 3060&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Q5_K_M&lt;/td&gt;
          &lt;td&gt;Mejor calidad, más consumo&lt;/td&gt;
          &lt;td&gt;Probar con modelos 8B&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Q6 / Q8&lt;/td&gt;
          &lt;td&gt;Más cerca de calidad original, más grande&lt;/td&gt;
          &lt;td&gt;Modelos pequeños o más VRAM&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Q2 / Q3&lt;/td&gt;
          &lt;td&gt;Ahorra VRAM, baja calidad notable&lt;/td&gt;
          &lt;td&gt;Experimentar con modelos grandes&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Para RTX 3060 12GB, lo más práctico es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modelos 8B: Q4_K_M o Q5_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modelos 12B: primero Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modelos mayores: no recomendados como uso diario
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;qué-herramienta-usar&#34;&gt;Qué herramienta usar
&lt;/h2&gt;&lt;p&gt;Los principiantes pueden empezar con &lt;code&gt;Ollama&lt;/code&gt;, porque instalar y ejecutar modelos es sencillo.&lt;/p&gt;
&lt;p&gt;Comandos comunes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama run qwen3:8b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama run llama3.1:8b
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres controlar mejor archivos GGUF, GPU layers y longitud de contexto, usa &lt;code&gt;llama.cpp&lt;/code&gt; o herramientas gráficas basadas en llama.cpp.&lt;/p&gt;
&lt;p&gt;Opciones comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Ollama&lt;/code&gt;: lo más simple, ideal para empezar.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;LM Studio&lt;/code&gt;: interfaz gráfica amigable, útil para descargar y cambiar modelos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;llama.cpp&lt;/code&gt;: control más fino, bueno para ajustar rendimiento.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text-generation-webui&lt;/code&gt;: muchas funciones, útil para probar backends.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para chat local y preguntas simples, Ollama o LM Studio bastan.&lt;/p&gt;
&lt;h2 id=&#34;no-abras-demasiado-el-contexto&#34;&gt;No abras demasiado el contexto
&lt;/h2&gt;&lt;p&gt;Muchos modelos anuncian soporte de contexto largo, pero en una RTX 3060 no conviene usar siempre el máximo.&lt;/p&gt;
&lt;p&gt;Cuanto más largo el contexto, más KV cache se usa y mayor presión de VRAM. Incluso si el modelo carga, un contexto largo puede reducir la velocidad.&lt;/p&gt;
&lt;p&gt;Sugerencia:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Chat normal: 4K a 8K
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Resumen de documentos: 8K a 16K
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RAG de documentos largos: divide primero; no pegues todo de una vez
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La 3060 funciona mejor con &amp;ldquo;contexto medio + buen modelo + buena recuperación&amp;rdquo; que intentando meter cientos de miles de tokens.&lt;/p&gt;
&lt;h2 id=&#34;elegir-según-uso&#34;&gt;Elegir según uso
&lt;/h2&gt;&lt;p&gt;Si escribes principalmente en chino:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Primero: Qwen3 8B Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alternativa: DeepSeek R1 Distill Qwen 8B
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si escribes principalmente en inglés:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Primero: Llama 3.1 8B Instruct Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Alternativa: Gemma 3 12B Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres velocidad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modelos 3B / 4B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8B Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Contexto entre 4K y 8K
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres más calidad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8B Q5_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;12B Q4_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Acepta menor velocidad
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si quieres ayuda con código:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Modelos de código 8B sirven para explicar y pequeños cambios
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Para ingeniería compleja, usa modelos cloud más fuertes
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los modelos locales en 3060 son útiles para explicar código, completar funciones, generar scripts pequeños y ayudar sin conexión. Para grandes refactors, bugs complejos y tareas Agent entre archivos, no esperes rendimiento al nivel de Claude Sonnet o GPT-5.&lt;/p&gt;
&lt;h2 id=&#34;expectativas-razonables&#34;&gt;Expectativas razonables
&lt;/h2&gt;&lt;p&gt;La RTX 3060 12GB puede convertir los LLM locales de &amp;ldquo;juguete&amp;rdquo; en herramienta diaria, pero no replica modelos cloud de primera línea en casa.&lt;/p&gt;
&lt;p&gt;Ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Bajo costo.&lt;/li&gt;
&lt;li&gt;Más VRAM que tarjetas de 8GB.&lt;/li&gt;
&lt;li&gt;Buena experiencia con modelos 8B.&lt;/li&gt;
&lt;li&gt;Uso offline.&lt;/li&gt;
&lt;li&gt;Procesamiento local de datos sensibles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Límites:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Modelos grandes no van fluidos.&lt;/li&gt;
&lt;li&gt;Contexto largo consume VRAM.&lt;/li&gt;
&lt;li&gt;Menor velocidad que tarjetas de gama alta.&lt;/li&gt;
&lt;li&gt;Modelos locales pequeños tienen razonamiento complejo limitado.&lt;/li&gt;
&lt;li&gt;Multimodalidad y flujos Agent consumen más recursos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La ruta estable es: usar 8B como asistente local diario, probar 12B para mejor calidad y dejar tareas complejas a modelos cloud.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Modelos locales recomendados para RTX 3060 12GB:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chino general: &lt;code&gt;Qwen3 8B Q4_K_M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Inglés general: &lt;code&gt;Llama 3.1 8B Instruct Q4_K_M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Prueba de más calidad: &lt;code&gt;Gemma 3 12B Q4_K_M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Experimento de razonamiento: &lt;code&gt;DeepSeek R1 Distill Qwen 8B Q4_K_M&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Experiencia rápida con poca VRAM: modelos pequeños 3B / 4B&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elige primero &lt;code&gt;Q4_K_M&lt;/code&gt;; en modelos 8B puedes probar &lt;code&gt;Q5_K_M&lt;/code&gt;. Empieza con Ollama o LM Studio.&lt;/p&gt;
&lt;p&gt;No trates la 3060 como un servidor de grandes modelos. Úsala como asistente local de conocimiento, procesador privado de documentos, ayuda ligera de código y tarjeta de experimentación, y encajará mejor con sus capacidades reales.&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Qwen3 8B GGUF: &lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/Qwen/Qwen3-8B-GGUF&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://huggingface.co/Qwen/Qwen3-8B-GGUF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Llama 3.1 8B GGUF: &lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/macandchiz/Llama-3.1-8B-Instruct-GGUF&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://huggingface.co/macandchiz/Llama-3.1-8B-Instruct-GGUF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Gemma 3 12B GGUF: &lt;a class=&#34;link&#34; href=&#34;https://huggingface.co/unsloth/gemma-3-12b-it-GGUF&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://huggingface.co/unsloth/gemma-3-12b-it-GGUF&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;llama.cpp: &lt;a class=&#34;link&#34; href=&#34;https://github.com/ggml-org/llama.cpp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/ggml-org/llama.cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Ollama: &lt;a class=&#34;link&#34; href=&#34;https://ollama.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ollama.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cómo dibujar líneas discontinuas, flechas, curvas y cambiar el tamaño del lienzo en AI</title>
        <link>https://knightli.com/es/2026/05/08/ai-dashed-line-arrow-curve-artboard/</link>
        <pubDate>Fri, 08 May 2026 09:18:53 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/08/ai-dashed-line-arrow-curve-artboard/</guid>
        <description>&lt;p&gt;Aquí &lt;code&gt;AI&lt;/code&gt; se refiere a software común de diseño vectorial, no a generación de imágenes con inteligencia artificial.&lt;/p&gt;
&lt;p&gt;Muchas personas que empiezan con software AI buscan las mismas preguntas: cómo dibujar líneas discontinuas, cómo dibujar flechas, cómo dibujar curvas y cómo cambiar el tamaño del lienzo. Son operaciones básicas, pero sus entradas están repartidas entre trazo, herramienta pluma, herramienta de línea y herramienta de mesa de trabajo.&lt;/p&gt;
&lt;p&gt;Este texto las organiza en un orden práctico.&lt;/p&gt;
&lt;h2 id=&#34;cómo-dibujar-una-línea-discontinua-en-ai&#34;&gt;Cómo dibujar una línea discontinua en AI
&lt;/h2&gt;&lt;p&gt;En software AI, una línea discontinua no suele ser una herramienta separada. Se configura desde el panel de trazo.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Usa la &lt;code&gt;herramienta de línea&lt;/code&gt;, &lt;code&gt;herramienta pluma&lt;/code&gt; o &lt;code&gt;herramienta de forma&lt;/code&gt; para dibujar una línea o ruta.&lt;/li&gt;
&lt;li&gt;Selecciona esa línea.&lt;/li&gt;
&lt;li&gt;Abre &lt;code&gt;Ventana&lt;/code&gt; -&amp;gt; &lt;code&gt;Trazo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Marca &lt;code&gt;Línea discontinua&lt;/code&gt; en el panel de trazo.&lt;/li&gt;
&lt;li&gt;Ajusta los valores de &lt;code&gt;guion&lt;/code&gt; e &lt;code&gt;intervalo&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Configuración común:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Guion&lt;/code&gt;: longitud de cada segmento visible.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Intervalo&lt;/code&gt;: espacio entre segmentos.&lt;/li&gt;
&lt;li&gt;Grosor de trazo: controla el ancho de la línea.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para una línea discontinua uniforme, prueba:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Guion: 8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Intervalo: 8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para una línea de puntos, cambia el extremo del trazo a redondo y usa un guion muy pequeño:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Guion: 0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Intervalo: 8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Extremo: redondo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Así se verá más como una fila de puntos.&lt;/p&gt;
&lt;h2 id=&#34;qué-hacer-si-la-línea-discontinua-no-aparece&#34;&gt;Qué hacer si la línea discontinua no aparece
&lt;/h2&gt;&lt;p&gt;Si marcas línea discontinua y no ves cambios, revisa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si el objeto tiene color de trazo.&lt;/li&gt;
&lt;li&gt;Si el grosor de trazo es demasiado pequeño.&lt;/li&gt;
&lt;li&gt;Si seleccionaste el objeto correcto.&lt;/li&gt;
&lt;li&gt;Si los valores de &lt;code&gt;guion&lt;/code&gt; e &lt;code&gt;intervalo&lt;/code&gt; son demasiado bajos.&lt;/li&gt;
&lt;li&gt;Si el objeto solo tiene relleno y no trazo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Muchos problemas de líneas son simplemente &amp;ldquo;el objeto tiene ruta, pero no tiene trazo&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;cómo-dibujar-una-flecha-en-ai&#34;&gt;Cómo dibujar una flecha en AI
&lt;/h2&gt;&lt;p&gt;Las flechas tampoco suelen dibujarse como un objeto separado. Se agregan como estilo de trazo sobre una ruta.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Dibuja una línea recta con la &lt;code&gt;herramienta de línea&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona la línea.&lt;/li&gt;
&lt;li&gt;Abre &lt;code&gt;Ventana&lt;/code&gt; -&amp;gt; &lt;code&gt;Trazo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Busca &lt;code&gt;Flechas&lt;/code&gt; en la parte inferior del panel.&lt;/li&gt;
&lt;li&gt;Elige una flecha para el inicio o el final.&lt;/li&gt;
&lt;li&gt;Ajusta la escala de la flecha.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si la flecha queda al revés, puedes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cambiarla del inicio al final en el panel de trazo.&lt;/li&gt;
&lt;li&gt;Usar un comando para invertir la dirección de la ruta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lo más simple es dibujar la línea de nuevo: arrastra desde la cola hacia la punta. El punto final será la dirección de la flecha.&lt;/p&gt;
&lt;h2 id=&#34;cómo-dibujar-una-flecha-de-doble-punta&#34;&gt;Cómo dibujar una flecha de doble punta
&lt;/h2&gt;&lt;p&gt;Una flecha de doble punta solo necesita flechas tanto al inicio como al final.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Selecciona la línea.&lt;/li&gt;
&lt;li&gt;Abre el panel de trazo.&lt;/li&gt;
&lt;li&gt;Elige una flecha en la primera posición.&lt;/li&gt;
&lt;li&gt;Elige otra flecha en la segunda posición.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si las flechas son demasiado grandes o pequeñas, ajusta &lt;code&gt;Escala&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;En general, el tamaño de la flecha debe coincidir con el grosor de línea. Una línea fina con una flecha enorme se ve desequilibrada; una línea gruesa con una flecha diminuta se lee mal.&lt;/p&gt;
&lt;h2 id=&#34;cómo-dibujar-una-curva-en-ai&#34;&gt;Cómo dibujar una curva en AI
&lt;/h2&gt;&lt;p&gt;La forma más común de dibujar curvas es usar la &lt;code&gt;herramienta pluma&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Método básico:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Selecciona la &lt;code&gt;herramienta pluma&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Haz clic una vez en el lienzo para crear el primer punto de ancla.&lt;/li&gt;
&lt;li&gt;En la segunda posición, mantén presionado y arrastra, no hagas solo clic.&lt;/li&gt;
&lt;li&gt;Al arrastrar aparecen manejadores de dirección, y se crea la curva.&lt;/li&gt;
&lt;li&gt;Sigue haciendo clic y arrastrando para formar una curva continua.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;La idea clave es: para líneas rectas, haz clic; para curvas, haz clic y arrastra.&lt;/p&gt;
&lt;p&gt;Muchos principiantes no logran dibujar curvas porque solo hacen clic y nunca arrastran los manejadores.&lt;/p&gt;
&lt;h2 id=&#34;cómo-suavizar-una-curva&#34;&gt;Cómo suavizar una curva
&lt;/h2&gt;&lt;p&gt;Después de dibujar una curva, puedes ajustarla con estas herramientas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Selección directa&lt;/code&gt;: selecciona puntos de ancla y mueve puntos o manejadores.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Herramienta de punto de ancla&lt;/code&gt;: cambia entre esquinas y puntos suaves.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Herramienta suavizar&lt;/code&gt;: hace la ruta más fluida.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Herramienta curvatura&lt;/code&gt;: crea curvas suaves de forma más simple.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si solo quieres una curva natural, la &lt;code&gt;herramienta curvatura&lt;/code&gt; es más amigable para principiantes que la pluma. No requiere arrastrar muchos manejadores a mano; basta con hacer clic en algunos puntos.&lt;/p&gt;
&lt;h2 id=&#34;dibujar-curvas-con-la-herramienta-curvatura&#34;&gt;Dibujar curvas con la herramienta curvatura
&lt;/h2&gt;&lt;p&gt;La herramienta curvatura funciona más como &amp;ldquo;pon puntos y la curva los sigue&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Selecciona la &lt;code&gt;herramienta curvatura&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Haz clic en el primer punto del lienzo.&lt;/li&gt;
&lt;li&gt;Haz clic en el segundo punto.&lt;/li&gt;
&lt;li&gt;Haz clic en un tercer punto, y el software creará la curva automáticamente.&lt;/li&gt;
&lt;li&gt;Arrastra puntos existentes para cambiar la forma.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si quieres una esquina, haz doble clic en un punto para alternar entre punto suave y punto de esquina.&lt;/p&gt;
&lt;p&gt;Para principiantes, suele ser más fácil crear la forma general con curvatura y luego ajustar con selección directa.&lt;/p&gt;
&lt;h2 id=&#34;cómo-cambiar-el-tamaño-del-lienzo-en-ai&#34;&gt;Cómo cambiar el tamaño del lienzo en AI
&lt;/h2&gt;&lt;p&gt;En AI, &amp;ldquo;tamaño del lienzo&amp;rdquo; normalmente significa &lt;code&gt;tamaño de mesa de trabajo&lt;/code&gt;. Si quieres cambiar el rango de exportación, tamaño de diseño o tamaño de página, cambia la mesa de trabajo.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Selecciona la &lt;code&gt;herramienta mesa de trabajo&lt;/code&gt; en la barra lateral.&lt;/li&gt;
&lt;li&gt;Haz clic en la mesa de trabajo actual.&lt;/li&gt;
&lt;li&gt;Escribe ancho y alto en la barra de propiedades superior.&lt;/li&gt;
&lt;li&gt;También puedes arrastrar los bordes manualmente.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ejemplos de tamaños comunes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Portada WeChat: 900 x 383 px
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Portada Xiaohongshu: 1242 x 1660 px
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cuadrado Instagram: 1080 x 1080 px
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Papel A4: 210 x 297 mm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si tu unidad no es px, cambia la unidad en el documento o panel de propiedades.&lt;/p&gt;
&lt;h2 id=&#34;cambiar-tamaño-desde-el-panel-de-mesas-de-trabajo&#34;&gt;Cambiar tamaño desde el panel de mesas de trabajo
&lt;/h2&gt;&lt;p&gt;Además de usar la herramienta, también puedes gestionar varias mesas desde el panel correspondiente.&lt;/p&gt;
&lt;p&gt;Pasos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre &lt;code&gt;Ventana&lt;/code&gt; -&amp;gt; &lt;code&gt;Mesas de trabajo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Selecciona la mesa que quieres modificar.&lt;/li&gt;
&lt;li&gt;Abre las opciones de mesa de trabajo.&lt;/li&gt;
&lt;li&gt;Escribe ancho, alto y posición.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si un archivo contiene varias páginas, tamaños de póster o versiones de exportación, el panel es más claro que arrastrar a mano.&lt;/p&gt;
&lt;h2 id=&#34;cambiar-la-mesa-de-trabajo-afecta-los-gráficos&#34;&gt;¿Cambiar la mesa de trabajo afecta los gráficos?
&lt;/h2&gt;&lt;p&gt;Cambiar solo el tamaño de la mesa normalmente no escala automáticamente los gráficos dentro.&lt;/p&gt;
&lt;p&gt;Eso significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si la mesa se agranda, los gráficos mantienen su tamaño.&lt;/li&gt;
&lt;li&gt;Si la mesa se reduce, los gráficos también mantienen su tamaño, pero pueden quedar fuera del área.&lt;/li&gt;
&lt;li&gt;Al exportar, normalmente solo se exporta lo que está dentro de la mesa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si quieres que los gráficos escalen junto con la mesa, selecciónalos y escálalos manualmente, o usa la herramienta de escala o el panel de transformación.&lt;/p&gt;
&lt;h2 id=&#34;entradas-y-atajos-útiles&#34;&gt;Entradas y atajos útiles
&lt;/h2&gt;&lt;p&gt;Entradas útiles:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Panel de trazo: Ventana -&amp;gt; Trazo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Panel de mesas de trabajo: Ventana -&amp;gt; Mesas de trabajo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Herramienta mesa de trabajo: Shift + O
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Herramienta pluma: P
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Selección directa: A
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Distintas versiones pueden tener interfaces algo diferentes, pero la lógica central es la misma: líneas discontinuas y flechas están en trazo, curvas usan herramientas de ruta, y el tamaño del lienzo se cambia mediante mesas de trabajo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Para dibujar líneas discontinuas en AI: selecciona una ruta, marca &lt;code&gt;Línea discontinua&lt;/code&gt; en el panel &lt;code&gt;Trazo&lt;/code&gt; y ajusta guion e intervalo.&lt;/p&gt;
&lt;p&gt;Para dibujar flechas en AI: dibuja una línea y agrega una flecha al inicio o al final desde el panel &lt;code&gt;Trazo&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Para dibujar curvas en AI: usa la &lt;code&gt;herramienta pluma&lt;/code&gt; haciendo clic y arrastrando, o usa la &lt;code&gt;herramienta curvatura&lt;/code&gt; para curvas suaves más fáciles.&lt;/p&gt;
&lt;p&gt;Para cambiar el tamaño del lienzo en AI: usa la &lt;code&gt;herramienta mesa de trabajo&lt;/code&gt; o el panel &lt;code&gt;Mesas de trabajo&lt;/code&gt; para modificar ancho y alto.&lt;/p&gt;
&lt;p&gt;Con estas operaciones, la mayoría de líneas básicas, diagramas de flujo, gráficos de anotación y ajustes de tamaño de página se vuelven manejables.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Como elegir una distribucion Linux de escritorio en 2026: comparativa entre Ubuntu, Deepin/UOS, Linux Mint y Fedora</title>
        <link>https://knightli.com/es/2026/05/07/linux-desktop-distro-comparison-2026/</link>
        <pubDate>Thu, 07 May 2026 21:17:11 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/07/linux-desktop-distro-comparison-2026/</guid>
        <description>&lt;p&gt;Al elegir una distribucion Linux de escritorio en 2026, lo importante no es cual es la mas &amp;ldquo;pura&amp;rdquo; ni la mas &amp;ldquo;avanzada&amp;rdquo;, sino cual puedes usar todos los dias con comodidad.&lt;/p&gt;
&lt;p&gt;Linux de escritorio es distinto de Linux para servidores. En servidores pesan mas el ciclo de vida, la estabilidad de paquetes y las normas de operacion. En el escritorio tambien importan la interfaz, los controladores, la tienda de aplicaciones, los metodos de entrada, el software de oficina, la tarjeta grafica, Bluetooth, el audio, el panel tactil, los monitores externos y todas esas pequenas molestias del uso diario.&lt;/p&gt;
&lt;p&gt;Si quieres pelearte menos con el sistema, empieza mirando Ubuntu, Linux Mint y Deepin/UOS. Si eres desarrollador y aceptas usar una pila de software mas nueva con un ritmo tecnologico mas rapido, Fedora merece atencion.&lt;/p&gt;
&lt;h2 id=&#34;conclusion-rapida&#34;&gt;Conclusion rapida
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Distribucion&lt;/th&gt;
          &lt;th&gt;Mas adecuada para&lt;/th&gt;
          &lt;th&gt;Fortalezas principales&lt;/th&gt;
          &lt;th&gt;Puntos a tener en cuenta&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Ubuntu 26.04 LTS&lt;/td&gt;
          &lt;td&gt;Principiantes, desarrolladores, equipo principal&lt;/td&gt;
          &lt;td&gt;Mucha documentacion, ecosistema completo, buen soporte de hardware y software&lt;/td&gt;
          &lt;td&gt;GNOME por defecto requiere adaptacion; la estrategia de Snap no gusta a todos&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Deepin / UOS&lt;/td&gt;
          &lt;td&gt;Usuarios chinos, entornos localizados, quienes valoran la experiencia visual&lt;/td&gt;
          &lt;td&gt;Bonita y facil de usar, buena localizacion china, fuerte compatibilidad con software domestico y empresarial&lt;/td&gt;
          &lt;td&gt;La edicion comunitaria y la comercial tienen posiciones distintas; conviene entender su estrategia de actualizaciones&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Linux Mint&lt;/td&gt;
          &lt;td&gt;Migracion de Windows a Linux, usuarios que priorizan estabilidad&lt;/td&gt;
          &lt;td&gt;Interfaz familiar, muy facil de usar, escritorio Cinnamon estable&lt;/td&gt;
          &lt;td&gt;Ritmo mas lento en tecnologias nuevas; la pila por defecto no es agresiva&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Fedora&lt;/td&gt;
          &lt;td&gt;Desarrolladores y usuarios que quieren tecnologia Linux reciente&lt;/td&gt;
          &lt;td&gt;Kernel nuevo, GNOME nuevo, adopcion rapida de nuevas tecnologias&lt;/td&gt;
          &lt;td&gt;Actualizaciones frecuentes; menos comoda que una LTS para usuarios conservadores&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;En una frase:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Principiantes y escritorio principal&lt;/strong&gt;: Ubuntu 26.04 LTS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Experiencia china y localizacion&lt;/strong&gt;: Deepin / UOS.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Migracion suave desde Windows&lt;/strong&gt;: Linux Mint.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Desarrolladores y exploracion de tecnologias nuevas&lt;/strong&gt;: Fedora.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ubuntu-2604-lts-el-escritorio-todoterreno&#34;&gt;Ubuntu 26.04 LTS: el escritorio todoterreno
&lt;/h2&gt;&lt;p&gt;Ubuntu 26.04 LTS &lt;code&gt;Resolute Raccoon&lt;/code&gt; se publico en abril de 2026. Como version LTS, es adecuada para un escritorio principal de largo plazo.&lt;/p&gt;
&lt;p&gt;La ventaja de Ubuntu es muy directa: tiene mas documentacion, mas tutoriales y es mas facil encontrar respuestas cuando algo falla. Si quieres instalar VS Code, Docker, controladores NVIDIA, Steam, Chrome, Slack, JetBrains, CUDA, Python o Node.js, Ubuntu suele ser uno de los objetivos prioritarios para fabricantes y comunidad.&lt;/p&gt;
&lt;p&gt;Ubuntu 26.04 LTS es adecuada para:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;quienes usan Linux de escritorio en serio por primera vez;&lt;/li&gt;
&lt;li&gt;usuarios que quieren un sistema principal de largo plazo;&lt;/li&gt;
&lt;li&gt;desarrolladores que necesitan un entorno Linux estable;&lt;/li&gt;
&lt;li&gt;usuarios que necesitan muchos tutoriales, controladores y soporte de software comercial;&lt;/li&gt;
&lt;li&gt;quienes quieren conectar el ecosistema de escritorio, servidor y WSL.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sus fortalezas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ciclo de vida LTS largo;&lt;/li&gt;
&lt;li&gt;imagenes oficiales y documentacion maduras;&lt;/li&gt;
&lt;li&gt;escritorio GNOME moderno, con buena experiencia en panel tactil y multiples monitores;&lt;/li&gt;
&lt;li&gt;ecosistema completo de controladores, nube, contenedores y herramientas de desarrollo;&lt;/li&gt;
&lt;li&gt;bajo coste de busqueda cuando aparece un problema.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El punto principal es que Ubuntu usa GNOME por defecto, y su logica no es igual a la de Windows. Los principiantes pueden necesitar acostumbrarse a la vista de actividades, el Dock, los espacios de trabajo y el lanzador de aplicaciones. Ubuntu tambien sigue impulsando Snap, y algunos usuarios no aprecian su velocidad de arranque, su modelo de gestion de paquetes o su estrategia de ecosistema.&lt;/p&gt;
&lt;p&gt;Mi lectura: si no sabes que distribucion de escritorio elegir, Ubuntu 26.04 LTS sigue siendo la respuesta por defecto mas segura. No es la mejor en cada aspecto aislado, pero su puntuacion global es la mas alta.&lt;/p&gt;
&lt;h2 id=&#34;deepin--uos-experiencia-de-escritorio-china-y-compatibilidad-localizada&#34;&gt;Deepin / UOS: experiencia de escritorio china y compatibilidad localizada
&lt;/h2&gt;&lt;p&gt;La fortaleza de Deepin y UOS es que entienden mejor a los usuarios chinos de escritorio.&lt;/p&gt;
&lt;p&gt;Deepin 25 se publico en 2025 y sigue recibiendo actualizaciones en 2026 mediante versiones como deepin 25.1. Las notas oficiales de deepin 25 destacan mejoras del escritorio DDE, UOS AI, el sistema inmutable Solid, la compatibilidad de aplicaciones Linyaps, el subsistema Distrobox y la vista previa del compositor de ventanas Treeland.&lt;/p&gt;
&lt;p&gt;Estas direcciones muestran que Deepin/UOS no se limita a crear una piel bonita para Linux. Intenta resolver dolores historicos del escritorio chino:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;instalacion de aplicaciones y conflictos de dependencias;&lt;/li&gt;
&lt;li&gt;compatibilidad con software domestico;&lt;/li&gt;
&lt;li&gt;calidad visual y facilidad de uso del escritorio;&lt;/li&gt;
&lt;li&gt;rollback cuando fallan las actualizaciones del sistema;&lt;/li&gt;
&lt;li&gt;entrada en chino, trabajo de oficina y ecosistema de software empresarial;&lt;/li&gt;
&lt;li&gt;compatibilidad y transicion desde aplicaciones Windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deepin / UOS es adecuado para:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;usuarios que valoran mas la interfaz china, los metodos de entrada, el trabajo de oficina y la localizacion;&lt;/li&gt;
&lt;li&gt;quienes quieren un escritorio Linux bonito y listo para usar;&lt;/li&gt;
&lt;li&gt;personas que trabajan en entornos de hardware y software localizados;&lt;/li&gt;
&lt;li&gt;usuarios que necesitan software de oficina empresarial, software domestico, CPU domesticas o certificaciones de compatibilidad;&lt;/li&gt;
&lt;li&gt;quienes no quieren configurar GNOME/KDE desde cero.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fortalezas de Deepin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;interfaz DDE unificada y cuidada;&lt;/li&gt;
&lt;li&gt;mejores detalles para usuarios chinos;&lt;/li&gt;
&lt;li&gt;tienda de aplicaciones y configuracion del sistema mas cercanas a los habitos de usuarios comunes;&lt;/li&gt;
&lt;li&gt;Linyaps, Distrobox y enfoques similares ayudan a reducir problemas de compatibilidad de aplicaciones Linux;&lt;/li&gt;
&lt;li&gt;la edicion comercial UOS tiene valor practico en escenarios de localizacion y empresa.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La advertencia clave es que la edicion comunitaria de Deepin y la edicion comercial de UOS no tienen exactamente el mismo posicionamiento. Deepin encaja mejor con la experiencia personal y los usuarios de comunidad. UOS se orienta mas a gobierno, empresa, localizacion, servicios comerciales y entornos certificados. Para entornos de oficina en produccion, hay que revisar hardware, software y requisitos de la organizacion, no solo la interfaz.&lt;/p&gt;
&lt;p&gt;Mi lectura: si eres usuario chino y te importan especialmente la apariencia, el metodo de entrada, el software domestico y la experiencia de oficina, Deepin/UOS resulta atractivo. Pero si eres un desarrollador intensivo y dependes del ecosistema Linux upstream mas estandar, Ubuntu o Fedora pueden sentirse mas fluidos.&lt;/p&gt;
&lt;h2 id=&#34;linux-mint-lo-mas-parecido-a-windows-y-lo-mas-comodo&#34;&gt;Linux Mint: lo mas parecido a Windows y lo mas comodo
&lt;/h2&gt;&lt;p&gt;La posicion de Linux Mint siempre ha sido estable: hacer que Linux sea facil para usuarios normales.&lt;/p&gt;
&lt;p&gt;En 2026, la linea principal de Linux Mint sigue alrededor de la serie 22.x y se basa en Ubuntu 24.04 LTS. Linux Mint 22.3 &lt;code&gt;Zena&lt;/code&gt; se publico a comienzos de 2026. No es una vitrina de la tecnologia mas nueva, sino un sistema de escritorio estable, familiar y con bajo coste de aprendizaje.&lt;/p&gt;
&lt;p&gt;Linux Mint es especialmente adecuado para usuarios de Windows que migran a Linux, sobre todo con el escritorio Cinnamon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;menu en la esquina inferior izquierda;&lt;/li&gt;
&lt;li&gt;barra de tareas;&lt;/li&gt;
&lt;li&gt;bandeja del sistema;&lt;/li&gt;
&lt;li&gt;logica familiar para minimizar y maximizar ventanas;&lt;/li&gt;
&lt;li&gt;panel de configuracion;&lt;/li&gt;
&lt;li&gt;gestor de archivos;&lt;/li&gt;
&lt;li&gt;gestor de actualizaciones.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estos detalles hacen que se parezca mucho a un escritorio Windows tradicional. Para usuarios que no quieren adaptarse al flujo de GNOME, Linux Mint es mas facil de empezar que Ubuntu.&lt;/p&gt;
&lt;p&gt;Linux Mint es adecuado para:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;usuarios que migran de Windows a Linux;&lt;/li&gt;
&lt;li&gt;instalar Linux para padres, familiares o usuarios no tecnicos;&lt;/li&gt;
&lt;li&gt;quienes quieren un escritorio estable sin perseguir tecnologias nuevas;&lt;/li&gt;
&lt;li&gt;uso de navegador, oficina, video, gestion de archivos y desarrollo ligero;&lt;/li&gt;
&lt;li&gt;personas a las que no les gusta GNOME y no quieren ajustar KDE.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Sus fortalezas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;escritorio Cinnamon intuitivo;&lt;/li&gt;
&lt;li&gt;gestor de actualizaciones amable;&lt;/li&gt;
&lt;li&gt;sistema conservador y estable;&lt;/li&gt;
&lt;li&gt;mejor trato a equipos antiguos;&lt;/li&gt;
&lt;li&gt;mucha documentacion de comunidad y relativamente pocas sorpresas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El punto clave es que Linux Mint no prioriza tecnologias nuevas. Wayland, PipeWire, los GNOME/KDE mas recientes, los kernels mas nuevos y Mesa de ultima generacion normalmente no llegan primero alli. Su objetivo es &amp;ldquo;trabajar de forma fiable hoy&amp;rdquo;, no &amp;ldquo;usar inmediatamente la tecnologia Linux de escritorio mas nueva&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Mi lectura: si quieres convertir un portatil Windows en Linux sin explicar demasiados conceptos, Linux Mint es una de las opciones mas seguras. No tiene el ecosistema comercial de Ubuntu ni la frescura de Fedora, pero la experiencia diaria es muy solida.&lt;/p&gt;
&lt;h2 id=&#34;fedora-desarrolladores-y-tecnologias-nuevas-primero&#34;&gt;Fedora: desarrolladores y tecnologias nuevas primero
&lt;/h2&gt;&lt;p&gt;Fedora es una de las primeras lineas de la tecnologia Linux de escritorio.&lt;/p&gt;
&lt;p&gt;En mayo de 2026, la version principal actual es Fedora Linux 44. Fedora Workstation lleva mucho tiempo siendo una de las distribuciones donde GNOME, Wayland, PipeWire, Mesa, el kernel, systemd y otras tecnologias aterrizan pronto.&lt;/p&gt;
&lt;p&gt;Fedora es adecuada para:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;desarrolladores Linux;&lt;/li&gt;
&lt;li&gt;usuarios de GNOME;&lt;/li&gt;
&lt;li&gt;quienes quieren kernels, Mesa, compiladores y cadenas de herramientas nuevos antes;&lt;/li&gt;
&lt;li&gt;usuarios que quieren probar pilas modernas de escritorio Linux como Wayland, PipeWire y Flatpak;&lt;/li&gt;
&lt;li&gt;quienes no temen actualizar cada seis meses.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Fortalezas de Fedora:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;adopcion rapida de tecnologias nuevas;&lt;/li&gt;
&lt;li&gt;sistema por defecto relativamente limpio;&lt;/li&gt;
&lt;li&gt;experiencia GNOME cercana a upstream;&lt;/li&gt;
&lt;li&gt;cadena de desarrollo mas reciente;&lt;/li&gt;
&lt;li&gt;integracion estrecha con Flatpak y el ecosistema de escritorio open source;&lt;/li&gt;
&lt;li&gt;soporte generalmente activo para hardware moderno.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sus advertencias tambien son claras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ciclo de vida mas corto y necesidad de actualizar con regularidad;&lt;/li&gt;
&lt;li&gt;no es ideal para personas que no quieren mantener el sistema en absoluto;&lt;/li&gt;
&lt;li&gt;NVIDIA, codecs propietarios y parte del software comercial requieren repositorios adicionales;&lt;/li&gt;
&lt;li&gt;si quieres &amp;ldquo;instalarlo y no tocarlo durante cinco anos&amp;rdquo;, Fedora encaja peor que una distribucion LTS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mi lectura: Fedora es excelente para desarrolladores, entusiastas de Linux y usuarios de tecnologias nuevas. No es el escritorio mas sencillo para usuarios corrientes, pero permite ver antes hacia donde puede ir el futuro de Linux de escritorio.&lt;/p&gt;
&lt;h2 id=&#34;como-elegir&#34;&gt;Como elegir
&lt;/h2&gt;&lt;h3 id=&#34;primera-instalacion-de-linux-para-principiantes&#34;&gt;Primera instalacion de Linux para principiantes
&lt;/h3&gt;&lt;p&gt;Elige primero Ubuntu 26.04 LTS o Linux Mint.&lt;/p&gt;
&lt;p&gt;Ubuntu destaca por documentacion y ecosistema. Linux Mint destaca por parecerse a Windows y por su bajo coste de aprendizaje. Si estas dispuesto a adaptarte a GNOME, elige Ubuntu. Si quieres que se parezca a Windows tanto como sea posible, elige Linux Mint.&lt;/p&gt;
&lt;h3 id=&#34;oficina-china-y-entornos-localizados&#34;&gt;Oficina china y entornos localizados
&lt;/h3&gt;&lt;p&gt;Mira primero Deepin / UOS.&lt;/p&gt;
&lt;p&gt;Si necesitas software de oficina domestico, navegadores domesticos, sistemas gubernamentales o empresariales, CPU domesticas o entornos de compatibilidad exigidos por la organizacion, UOS tiene mas valor practico. Los usuarios personales que quieran un escritorio chino bonito pueden mirar Deepin.&lt;/p&gt;
&lt;h3 id=&#34;equipo-principal-para-desarrolladores&#34;&gt;Equipo principal para desarrolladores
&lt;/h3&gt;&lt;p&gt;Ubuntu 26.04 LTS y Fedora merecen atencion.&lt;/p&gt;
&lt;p&gt;Si valoras estabilidad, tutoriales y soporte de software comercial, elige Ubuntu. Si quieres kernels nuevos, GNOME nuevo, toolchains recientes y la frontera de las tecnologias open source, elige Fedora.&lt;/p&gt;
&lt;h3 id=&#34;equipos-antiguos-o-domesticos&#34;&gt;Equipos antiguos o domesticos
&lt;/h3&gt;&lt;p&gt;Linux Mint es mas adecuado.&lt;/p&gt;
&lt;p&gt;Su interfaz tradicional, uso de recursos relativamente amable y baja presion de mantenimiento lo hacen mejor para equipos antiguos, maquinas domesticas de navegacion y escritorios de oficina ligera que el enfoque de Fedora en tecnologias nuevas.&lt;/p&gt;
&lt;h3 id=&#34;aigpucadenas-de-herramientas-de-desarrollo&#34;&gt;AI/GPU/cadenas de herramientas de desarrollo
&lt;/h3&gt;&lt;p&gt;Elige primero Ubuntu.&lt;/p&gt;
&lt;p&gt;NVIDIA drivers, CUDA, PyTorch, TensorFlow, Docker, VS Code, JetBrains y herramientas similares siguen usando Ubuntu con mucha frecuencia en guias oficiales y tutoriales. Fedora tambien puede funcionar, pero resolver problemas suele requerir mas experiencia con Linux.&lt;/p&gt;
&lt;h2 id=&#34;que-revisar-antes-de-elegir&#34;&gt;Que revisar antes de elegir
&lt;/h2&gt;&lt;p&gt;No juzgues Linux de escritorio solo por capturas de pantalla. La experiencia real depende de estos detalles:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;si los controladores graficos son estables, sobre todo NVIDIA;&lt;/li&gt;
&lt;li&gt;si Wi-Fi, Bluetooth, huella digital y camara funcionan correctamente;&lt;/li&gt;
&lt;li&gt;si monitores externos, escalado y configuracion multimonitor resultan comodos;&lt;/li&gt;
&lt;li&gt;si los metodos de entrada en chino funcionan bien;&lt;/li&gt;
&lt;li&gt;si las aplicaciones comunes tienen paquetes oficiales o versiones Flatpak;&lt;/li&gt;
&lt;li&gt;si las actualizaciones del sistema son faciles de entender;&lt;/li&gt;
&lt;li&gt;si es facil encontrar soluciones cuando aparecen problemas;&lt;/li&gt;
&lt;li&gt;si puedes aceptar el flujo de trabajo del escritorio por defecto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mucha gente fracasa al cambiar a Linux no porque el kernel sea debil, sino porque el metodo de entrada, el escalado, WeChat, la banca online, la impresora o los controladores graficos se sienten mal en el uso diario.&lt;/p&gt;
&lt;h2 id=&#34;mis-recomendaciones&#34;&gt;Mis recomendaciones
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Escenario&lt;/th&gt;
          &lt;th&gt;Recomendacion&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Escritorio principal para principiantes&lt;/td&gt;
          &lt;td&gt;Ubuntu 26.04 LTS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Migracion desde Windows&lt;/td&gt;
          &lt;td&gt;Linux Mint&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Escritorio chino bonito&lt;/td&gt;
          &lt;td&gt;Deepin&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Oficina localizada / entorno gubernamental y empresarial&lt;/td&gt;
          &lt;td&gt;UOS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Entorno estable para desarrolladores&lt;/td&gt;
          &lt;td&gt;Ubuntu 26.04 LTS&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Experiencia con tecnologia Linux reciente&lt;/td&gt;
          &lt;td&gt;Fedora Linux 44&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Equipo antiguo para oficina ligera&lt;/td&gt;
          &lt;td&gt;Linux Mint&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Desarrollo AI/GPU&lt;/td&gt;
          &lt;td&gt;Ubuntu 26.04 LTS&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;conclusion-breve&#34;&gt;Conclusion breve
&lt;/h2&gt;&lt;p&gt;Ubuntu 26.04 LTS es la opcion de escritorio todoterreno mas segura en 2026, adecuada para principiantes, desarrolladores y equipos principales.&lt;/p&gt;
&lt;p&gt;Deepin/UOS es fuerte en experiencia china, diseno visual y compatibilidad localizada, adecuado para usuarios que valoran la experiencia local y los entornos gubernamentales o empresariales.&lt;/p&gt;
&lt;p&gt;Linux Mint es extremadamente facil de usar y estable, especialmente para una migracion suave de Windows a Linux.&lt;/p&gt;
&lt;p&gt;Fedora destaca en tecnologia nueva y experiencia para desarrolladores, y encaja con usuarios dispuestos a seguir la vanguardia del escritorio Linux.&lt;/p&gt;
&lt;p&gt;La calidad de un sistema de escritorio depende al final de si quieres seguir usandolo cada dia despues de encender el ordenador. Una distribucion con la que puedas vivir comodamente importa mas que una que se vea mejor en una tabla de parametros.&lt;/p&gt;
&lt;h2 id=&#34;enlaces-relacionados&#34;&gt;Enlaces relacionados
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Ubuntu 26.04 LTS: &lt;a class=&#34;link&#34; href=&#34;https://releases.ubuntu.com/26.04/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://releases.ubuntu.com/26.04/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;deepin 25 Release Note: &lt;a class=&#34;link&#34; href=&#34;https://www.deepin.org/en/deepin-25-release/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.deepin.org/en/deepin-25-release/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;deepin 25.1.0 Release Note: &lt;a class=&#34;link&#34; href=&#34;https://www.deepin.org/en/deepin-25-1-release/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.deepin.org/en/deepin-25-1-release/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Linux Mint website: &lt;a class=&#34;link&#34; href=&#34;https://linuxmint.com/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://linuxmint.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora Workstation: &lt;a class=&#34;link&#34; href=&#34;https://fedoraproject.org/workstation/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://fedoraproject.org/workstation/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fedora Release Notes: &lt;a class=&#34;link&#34; href=&#34;https://docs.fedoraproject.org/en-US/fedora/latest/release-notes/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://docs.fedoraproject.org/en-US/fedora/latest/release-notes/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cómo controlar el orden de borrado en fdupes: conservar duplicados por prioridad de directorio</title>
        <link>https://knightli.com/es/2026/05/06/fdupes-delete-duplicates-by-directory-priority/</link>
        <pubDate>Wed, 06 May 2026 09:23:09 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/06/fdupes-delete-duplicates-by-directory-priority/</guid>
        <description>&lt;p&gt;Al usar &lt;code&gt;fdupes&lt;/code&gt; para eliminar archivos duplicados entre tres directorios, como &lt;code&gt;a&lt;/code&gt;, &lt;code&gt;b&lt;/code&gt; y &lt;code&gt;c&lt;/code&gt;, si quieres conservar primero &lt;code&gt;a&lt;/code&gt;, luego &lt;code&gt;b&lt;/code&gt;, y eliminar primero los duplicados de &lt;code&gt;c&lt;/code&gt;, la clave no es una regla compleja. Es el orden de los argumentos de directorio.&lt;/p&gt;
&lt;p&gt;En modo de borrado no interactivo, &lt;code&gt;fdupes&lt;/code&gt; conserva el primer archivo que ve en cada grupo de duplicados y elimina los duplicados posteriores. Por tanto, los argumentos de directorio deben ordenarse de mayor prioridad de conservación a menor.&lt;/p&gt;
&lt;p&gt;En otras palabras, para lograr &amp;ldquo;eliminar primero de c, luego de b, y conservar a tanto como sea posible&amp;rdquo;, escribe el comando así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN a b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El orden de escaneo es &lt;code&gt;a -&amp;gt; b -&amp;gt; c&lt;/code&gt;. Cuando el mismo archivo existe en los tres directorios, el archivo de &lt;code&gt;a&lt;/code&gt; se encuentra primero y se conserva, mientras que los duplicados de &lt;code&gt;b&lt;/code&gt; y &lt;code&gt;c&lt;/code&gt; se eliminan. Si solo &lt;code&gt;b&lt;/code&gt; y &lt;code&gt;c&lt;/code&gt; contienen duplicados, se conserva &lt;code&gt;b&lt;/code&gt; y se elimina &lt;code&gt;c&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;significado-de-los-parámetros&#34;&gt;Significado de los parámetros
&lt;/h2&gt;&lt;p&gt;Los parámetros comunes son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-r&lt;/code&gt;: escanear subdirectorios de forma recursiva.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-d&lt;/code&gt;: eliminar archivos duplicados.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-N&lt;/code&gt;: cuando se usa con &lt;code&gt;-d&lt;/code&gt;, omitir la confirmación interactiva, conservar el primer archivo de cada grupo de duplicados y eliminar el resto.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por tanto, el formato básico para eliminación automática de duplicados es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN 目录A 目录B 目录C
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Cuanto antes aparece un directorio, mayor es su prioridad de conservación. Cuanto más tarde aparece, más probable es que sus archivos duplicados sean eliminados.&lt;/p&gt;
&lt;h2 id=&#34;previsualizar-antes-de-eliminar&#34;&gt;Previsualizar antes de eliminar
&lt;/h2&gt;&lt;p&gt;Usar &lt;code&gt;-dN&lt;/code&gt; elimina archivos directamente, así que es mejor previsualizar primero los grupos de duplicados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -r a b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La salida se agrupa por archivos duplicados. En cada grupo, el archivo mostrado antes es el que más probablemente se conservará en modo de borrado no interactivo.&lt;/p&gt;
&lt;p&gt;También puedes ver información de resumen:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rm a b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si los datos son importantes, guarda el resultado e inspecciónalo manualmente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -r a b c &amp;gt; duplicates.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de confirmar que el orden dentro de cada grupo de duplicados coincide con lo esperado, ejecuta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN a b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;cómo-se-manejan-los-subdirectorios&#34;&gt;Cómo se manejan los subdirectorios
&lt;/h2&gt;&lt;p&gt;Mientras &lt;code&gt;-r&lt;/code&gt; esté activado, &lt;code&gt;fdupes&lt;/code&gt; escanea recursivamente todos los archivos bajo los directorios que pasas. La prioridad de conservación sigue determinada por el orden en que las rutas aparecen en el comando.&lt;/p&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN dir_a dir_b dir_c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto significa:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dir_a&lt;/code&gt; tiene la prioridad más alta.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dir_b&lt;/code&gt; viene después.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dir_c&lt;/code&gt; tiene la prioridad más baja.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si &lt;code&gt;dir_a/sub1/file.txt&lt;/code&gt; y &lt;code&gt;dir_c/sub1/file.txt&lt;/code&gt; tienen contenido idéntico, se conserva el archivo bajo &lt;code&gt;dir_a&lt;/code&gt;. Si &lt;code&gt;dir_a/x/y/file.txt&lt;/code&gt; y &lt;code&gt;dir_c/file.txt&lt;/code&gt; tienen contenido idéntico, el archivo bajo &lt;code&gt;dir_a&lt;/code&gt; también se conserva primero. &lt;code&gt;fdupes&lt;/code&gt; compara contenido de archivos; los nombres y la profundidad de directorio no tienen que coincidir.&lt;/p&gt;
&lt;h2 id=&#34;controlar-con-precisión-la-prioridad-de-subdirectorios&#34;&gt;Controlar con precisión la prioridad de subdirectorios
&lt;/h2&gt;&lt;p&gt;Si solo pasas directorios padre, el orden de escaneo dentro de subdirectorios depende del comportamiento de recorrido de &lt;code&gt;fdupes&lt;/code&gt;. Esto basta en la mayoría de casos. Pero si quieres que un subdirectorio específico tenga más prioridad, escríbelo explícitamente antes de su directorio padre.&lt;/p&gt;
&lt;p&gt;Por ejemplo, supón que quieres conservar primero &lt;code&gt;dir_a&lt;/code&gt;, luego &lt;code&gt;dir_b/special&lt;/code&gt;, después procesar el resto de &lt;code&gt;dir_b&lt;/code&gt;, y finalmente procesar &lt;code&gt;dir_c&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN dir_a dir_b/special dir_b dir_c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto hace que &lt;code&gt;dir_b/special&lt;/code&gt; se escanee antes que &lt;code&gt;dir_b&lt;/code&gt;. Cuando &lt;code&gt;dir_b&lt;/code&gt; se escanea después, los archivos bajo &lt;code&gt;special&lt;/code&gt; ya han sido registrados, así que ese subdirectorio tiene efectivamente mayor prioridad que el resto de &lt;code&gt;dir_b&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Este patrón es útil cuando:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;a&lt;/code&gt; es el directorio base más importante.&lt;/li&gt;
&lt;li&gt;Un subdirectorio dentro de &lt;code&gt;b&lt;/code&gt; es más importante que el resto de &lt;code&gt;b&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;c&lt;/code&gt; es principalmente un directorio de respaldo de baja prioridad.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El orden de rutas puede extenderse más:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN a b/important b c/keep-first c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La regla sigue siendo la misma: cuanto antes aparece, más probable es que se conserve.&lt;/p&gt;
&lt;h2 id=&#34;usar-una-lista-para-muchos-directorios&#34;&gt;Usar una lista para muchos directorios
&lt;/h2&gt;&lt;p&gt;Si hay muchos directorios y subdirectorios, escribir manualmente un comando largo es propenso a errores. Puedes escribir las rutas en un archivo de texto como &lt;code&gt;folders.txt&lt;/code&gt;, ordenadas por prioridad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/path/to/dir_a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/path/to/dir_b/sub_important
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/path/to/dir_b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/path/to/dir_c/sub_1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/path/to/dir_c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego pásalas a &lt;code&gt;fdupes&lt;/code&gt; con &lt;code&gt;xargs&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat folders.txt &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs fdupes -rdN
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si las rutas pueden contener espacios, usa entrada separada por nulos para mayor seguridad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tr &lt;span class=&#34;s1&#34;&gt;&amp;#39;\n&amp;#39;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;\0&amp;#39;&lt;/span&gt; &amp;lt; folders.txt &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -0 fdupes -rdN
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;límites-importantes&#34;&gt;Límites importantes
&lt;/h2&gt;&lt;p&gt;Primero, &lt;code&gt;fdupes&lt;/code&gt; compara contenido de archivos, no nombres. Dos archivos con nombres completamente distintos pueden tratarse como duplicados si su contenido es idéntico.&lt;/p&gt;
&lt;p&gt;Segundo, si el directorio &lt;code&gt;a&lt;/code&gt; contiene duplicados internamente, &lt;code&gt;fdupes -rdN a b c&lt;/code&gt; también puede eliminar duplicados posteriores dentro de &lt;code&gt;a&lt;/code&gt;. Este comando significa &amp;ldquo;conservar el primer archivo según el orden global de escaneo&amp;rdquo;, no &amp;ldquo;no eliminar nunca nada bajo a&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Tercero, por defecto, &lt;code&gt;fdupes&lt;/code&gt; no sigue enlaces simbólicos. Si necesitas manejar archivos detrás de symlinks, confirma si necesitas &lt;code&gt;-s&lt;/code&gt; y si eso coincide con tus expectativas de seguridad de datos.&lt;/p&gt;
&lt;p&gt;Cuarto, &lt;code&gt;fdupes&lt;/code&gt; solo elimina archivos duplicados. No limpia directorios vacíos. Después de eliminar, si &lt;code&gt;b&lt;/code&gt; y &lt;code&gt;c&lt;/code&gt; contienen carpetas vacías, puedes ejecutar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find b c -type d -empty -delete
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;hábito-de-operación-más-seguro&#34;&gt;Hábito de operación más seguro
&lt;/h2&gt;&lt;p&gt;Si los directorios contienen datos importantes, no empieces con &lt;code&gt;-rdN&lt;/code&gt;. Un flujo más seguro es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ejecutar primero &lt;code&gt;fdupes -r a b c&lt;/code&gt; para ver grupos de duplicados.&lt;/li&gt;
&lt;li&gt;Confirmar que el primer archivo de cada grupo es el que quieres conservar.&lt;/li&gt;
&lt;li&gt;Luego ejecutar &lt;code&gt;fdupes -rdN a b c&lt;/code&gt; para eliminación automática.&lt;/li&gt;
&lt;li&gt;Después de eliminar, revisar si hay que limpiar directorios vacíos.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si te preocupa mucho eliminar archivos bajo &lt;code&gt;a&lt;/code&gt; por accidente, primero limpia un rango más pequeño de directorios de baja prioridad, o exporta los resultados y fíltralos manualmente. El orden de directorios en &lt;code&gt;fdupes&lt;/code&gt; es útil, pero no es una regla de control de acceso. Una vez que una ruta entra en el escaneo, los archivos duplicados dentro de ella pueden participar en decisiones de eliminación.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Para eliminar archivos duplicados con &lt;code&gt;fdupes&lt;/code&gt; por prioridad, coloca antes los directorios que quieres conservar y después los directorios de los que quieres eliminar.&lt;/p&gt;
&lt;p&gt;Para conservar &lt;code&gt;a&lt;/code&gt;, luego &lt;code&gt;b&lt;/code&gt;, y eliminar primero de &lt;code&gt;c&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN a b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para dar mayor prioridad a un subdirectorio, escríbelo antes de su directorio padre:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdupes -rdN a b/important b c
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La frase clave es simple: &lt;code&gt;fdupes -dN&lt;/code&gt; conserva los archivos duplicados que aparecen primero y elimina los duplicados que aparecen después. El orden de directorios es tu prioridad de conservación.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Edge corrige la vulnerabilidad critica CVE-2026-2441 en mayo de 2026: visitar una pagina maliciosa podria permitir ejecucion remota de codigo</title>
        <link>https://knightli.com/es/2026/05/06/microsoft-edge-cve-2026-2441-security-update/</link>
        <pubDate>Wed, 06 May 2026 08:30:17 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/06/microsoft-edge-cve-2026-2441-security-update/</guid>
        <description>&lt;p&gt;Microsoft Edge publico recientemente varias rondas de actualizaciones de seguridad para corregir problemas procedentes del proyecto Chromium y de componentes propios de Edge. Entre ellos, &lt;code&gt;CVE-2026-2441&lt;/code&gt; fue reportada por el equipo de Chromium como explotada en la naturaleza, y tanto el canal estable como el canal estable extendido de Microsoft Edge ya incluyen la correccion.&lt;/p&gt;
&lt;p&gt;Si usas Edge a diario, especialmente en Windows para cuentas, correo, banca, paneles de administracion o sistemas empresariales, conviene confirmar cuanto antes que el navegador esta actualizado a la version mas reciente.&lt;/p&gt;
&lt;h2 id=&#34;riesgo-de-la-vulnerabilidad&#34;&gt;Riesgo de la vulnerabilidad
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;CVE-2026-2441&lt;/code&gt; es una vulnerabilidad de alto riesgo que ya ha llamado la atencion de atacantes y ha sido explotada. La forma tipica de explotar fallos de navegador consiste en inducir al usuario a visitar una pagina con contenido especialmente preparado, activando defectos del motor de renderizado o de componentes relacionados.&lt;/p&gt;
&lt;p&gt;En ataques reales, este tipo de vulnerabilidad puede traer riesgos como:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecutar codigo malicioso o combinarse con otros fallos para superar el sandbox.&lt;/li&gt;
&lt;li&gt;Evadir parte de las restricciones de seguridad y ampliar la superficie de ataque.&lt;/li&gt;
&lt;li&gt;Robar datos sensibles, informacion de sesion o contenido de paginas del navegador.&lt;/li&gt;
&lt;li&gt;Provocar cierres del navegador, paginas anormales o denegacion de servicio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hay que recordar que, cuando un parche acaba de publicarse, los detalles completos del ataque normalmente no se hacen publicos para evitar que mas atacantes reproduzcan la vulnerabilidad. Para usuarios comunes, la defensa mas efectiva es actualizar a tiempo.&lt;/p&gt;
&lt;h2 id=&#34;alcance-afectado&#34;&gt;Alcance afectado
&lt;/h2&gt;&lt;p&gt;Microsoft Edge se basa en Chromium, por lo que vulnerabilidades relacionadas pueden afectar versiones de Edge en varias plataformas, incluidas Windows, macOS, Linux y moviles. Cualquier version del navegador anterior a una version que incluya el parche esta en riesgo.&lt;/p&gt;
&lt;p&gt;Segun las notas de seguridad de Microsoft Edge, el canal estable &lt;code&gt;145.0.3800.58&lt;/code&gt;, publicado el 14 de febrero de 2026, ya incluye la correccion de &lt;code&gt;CVE-2026-2441&lt;/code&gt;; el canal estable extendido &lt;code&gt;144.0.3719.130&lt;/code&gt;, publicado el 17 de febrero de 2026, tambien la incluye. Las versiones posteriores siguen acumulando parches de seguridad del proyecto Chromium.&lt;/p&gt;
&lt;p&gt;Hasta el 6 de mayo de 2026, la version de seguridad estable mas reciente listada en la pagina de actualizaciones de Edge era &lt;code&gt;147.0.3912.98&lt;/code&gt;, publicada el 30 de abril de 2026. Si la version local esta claramente por debajo, deberias actualizar de inmediato.&lt;/p&gt;
&lt;h2 id=&#34;actualizar-edge-ahora&#34;&gt;Actualizar Edge ahora
&lt;/h2&gt;&lt;p&gt;Los usuarios comunes pueden comprobar y actualizar asi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abre Microsoft Edge.&lt;/li&gt;
&lt;li&gt;Escribe &lt;code&gt;edge://settings/help&lt;/code&gt; en la barra de direcciones y pulsa Enter.&lt;/li&gt;
&lt;li&gt;Espera a que el navegador busque actualizaciones automaticamente.&lt;/li&gt;
&lt;li&gt;Cuando termine, haz clic en &amp;ldquo;Reiniciar&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;En entornos empresariales, los administradores deberian revisar politicas de gestion de endpoints, WSUS, Intune, directivas de grupo o sistemas de parches de terceros para confirmar que las actualizaciones de Edge no llevan mucho tiempo retrasadas. En dispositivos que no puedan actualizarse de inmediato, conviene reducir el acceso a sitios desconocidos y limitar antes la navegacion externa de grupos de usuarios de alto riesgo.&lt;/p&gt;
&lt;h2 id=&#34;recomendaciones-de-proteccion&#34;&gt;Recomendaciones de proteccion
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Actualiza Edge cuanto antes y reinicia el navegador despues.&lt;/li&gt;
&lt;li&gt;No hagas clic en enlaces de correo, chats o anuncios de origen desconocido.&lt;/li&gt;
&lt;li&gt;Evita usar navegadores antiguos para paneles de administracion, pagos, correo u otras paginas sensibles.&lt;/li&gt;
&lt;li&gt;Mantén Windows, el antivirus y las extensiones del navegador actualizados.&lt;/li&gt;
&lt;li&gt;Elimina extensiones del navegador que no uses desde hace tiempo o cuyo origen no sea claro.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;fuentes&#34;&gt;Fuentes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/zh-cn/deployedge/microsoft-edge-relnotes-security&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Notas de la version de actualizaciones de seguridad de Microsoft Edge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://msrc.microsoft.com/update-guide/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Guia de actualizaciones de seguridad de Microsoft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Lo importante de &lt;code&gt;CVE-2026-2441&lt;/code&gt; no es que sus detalles sean complejos, sino que ya fue reportada como explotada en la naturaleza. Para usuarios individuales y terminales empresariales, la accion mas directa es abrir &lt;code&gt;edge://settings/help&lt;/code&gt;, confirmar que Edge se actualizo y reiniciar.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cuál es la diferencia entre Snap, Flatpak y apt</title>
        <link>https://knightli.com/es/2026/05/02/snap-flatpak-apt-differences/</link>
        <pubDate>Sat, 02 May 2026 11:22:26 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/02/snap-flatpak-apt-differences/</guid>
        <description>&lt;p&gt;Al instalar software en Ubuntu, a menudo aparecen tres nombres: &lt;code&gt;apt&lt;/code&gt;, Snap y Flatpak. Todos pueden instalar aplicaciones, pero resuelven problemas distintos.&lt;/p&gt;
&lt;p&gt;En resumen:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Herramienta&lt;/th&gt;
          &lt;th&gt;Rol principal&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;apt&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Gestor de paquetes tradicional de Ubuntu/Debian&lt;/td&gt;
          &lt;td&gt;Componentes del sistema, herramientas de línea de comandos, software mantenido por la distribución&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Snap&lt;/td&gt;
          &lt;td&gt;Formato de empaquetado promovido por Canonical&lt;/td&gt;
          &lt;td&gt;Apps de escritorio en Ubuntu, herramientas de servidor, software con actualización automática&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Flatpak&lt;/td&gt;
          &lt;td&gt;Formato entre distribuciones centrado en apps de escritorio&lt;/td&gt;
          &lt;td&gt;Apps gráficas, apps sandboxed, ecosistema Flathub&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;apt-parte-del-sistema&#34;&gt;apt: parte del sistema
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; es el gestor de paquetes tradicional de sistemas Debian y Ubuntu. Instala paquetes &lt;code&gt;.deb&lt;/code&gt; desde repositorios de la distribución, con dependencias mantenidas por la propia distribución.&lt;/p&gt;
&lt;p&gt;Uso típico:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install firefox
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; tiene estas características:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Se integra más profundamente con el sistema.&lt;/li&gt;
&lt;li&gt;Las dependencias se gestionan de forma centralizada por la distribución.&lt;/li&gt;
&lt;li&gt;Las versiones de software suelen seguir el ciclo de lanzamiento de la distribución.&lt;/li&gt;
&lt;li&gt;Es muy adecuado para bibliotecas del sistema, drivers, herramientas de línea de comandos y componentes de servidor.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Su desventaja también es clara: las versiones pueden ser antiguas. Las distribuciones priorizan estabilidad, así que no siempre envían inmediatamente la última versión upstream.&lt;/p&gt;
&lt;h2 id=&#34;snap-aplicación-y-dependencias-en-un-solo-paquete&#34;&gt;Snap: aplicación y dependencias en un solo paquete
&lt;/h2&gt;&lt;p&gt;Snap es un formato de empaquetado promovido por Canonical. Empaqueta una app con muchas de sus dependencias de runtime, reduciendo la dependencia de versiones exactas de bibliotecas del sistema.&lt;/p&gt;
&lt;p&gt;La instalación se ve parecida:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo snap install firefox
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ventajas de Snap:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El mismo paquete puede ejecutarse más fácilmente entre versiones de Ubuntu.&lt;/li&gt;
&lt;li&gt;Las apps pueden actualizarse de forma independiente a las actualizaciones del sistema.&lt;/li&gt;
&lt;li&gt;Hay cierto aislamiento y control de permisos por defecto.&lt;/li&gt;
&lt;li&gt;Funciona bien para apps de escritorio que necesitan actualizaciones rápidas y algunas herramientas de servidor.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Quejas comunes incluyen arranque más lento, mayor uso de disco, integración de temas menos natural y un modelo de actualización que da menos control al usuario que &lt;code&gt;apt&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;flatpak-más-orientado-a-apps-de-escritorio&#34;&gt;Flatpak: más orientado a apps de escritorio
&lt;/h2&gt;&lt;p&gt;Flatpak también es un formato de empaquetado entre distribuciones, pero está más centrado en apps de escritorio Linux. Muchas apps Flatpak vienen de Flathub.&lt;/p&gt;
&lt;p&gt;Instalación típica:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak install flathub org.mozilla.firefox
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Flatpak tiene estas características:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Fuerte soporte entre distribuciones.&lt;/li&gt;
&lt;li&gt;Foco en distribución de apps de escritorio.&lt;/li&gt;
&lt;li&gt;Usa runtimes para compartir dependencias base.&lt;/li&gt;
&lt;li&gt;Modelo de sandbox y permisos más claro.&lt;/li&gt;
&lt;li&gt;Gran selección de software en Flathub.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Flatpak también usa espacio extra, especialmente al instalar un runtime por primera vez. Cuando varias apps comparten un runtime, el sobrecoste se vuelve menos derrochador.&lt;/p&gt;
&lt;h2 id=&#34;la-mayor-diferencia-dependencias&#34;&gt;La mayor diferencia: dependencias
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; se parece más a integrar software en el sistema. Las apps dependen de bibliotecas ya presentes en el sistema, y varios paquetes comparten las mismas dependencias.&lt;/p&gt;
&lt;p&gt;Snap y Flatpak se parecen más a enviar una app con su propio entorno de runtime. La app lleva parte de lo que necesita, reduciendo problemas causados por distintas versiones del sistema.&lt;/p&gt;
&lt;p&gt;Eso crea un compromiso:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Enfoque&lt;/th&gt;
          &lt;th&gt;Pros&lt;/th&gt;
          &lt;th&gt;Contras&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;apt&lt;/code&gt; comparte dependencias del sistema&lt;/td&gt;
          &lt;td&gt;Ahorra espacio, se integra bien, mantenimiento centralizado&lt;/td&gt;
          &lt;td&gt;Las versiones están atadas a la distribución&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Snap/Flatpak llevan piezas de runtime&lt;/td&gt;
          &lt;td&gt;Entre versiones, entre distribuciones, actualizaciones más fáciles&lt;/td&gt;
          &lt;td&gt;Paquetes más grandes, posible arranque más lento, integración más débil&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;aislamiento-y-permisos&#34;&gt;Aislamiento y permisos
&lt;/h2&gt;&lt;p&gt;El software instalado con &lt;code&gt;apt&lt;/code&gt; suele ejecutarse directamente en el entorno del sistema. Se integra de forma natural, pero tiene menos aislamiento.&lt;/p&gt;
&lt;p&gt;Snap y Flatpak usan ideas de sandbox. Las apps no pueden acceder libremente a todos los recursos del sistema por defecto; necesitan interfaces de permiso para archivos, cámara, red, notificaciones de escritorio y otros recursos.&lt;/p&gt;
&lt;p&gt;Eso no las vuelve absolutamente seguras, pero da un límite de permisos más claro. Para apps de escritorio de fuentes mixtas, eso importa.&lt;/p&gt;
&lt;h2 id=&#34;las-actualizaciones-funcionan-distinto&#34;&gt;Las actualizaciones funcionan distinto
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; suele seguir las actualizaciones del sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Snap se actualiza automáticamente. Es cómodo, pero también controvertido: los usuarios no tienen que gestionar versiones, pero también tienen menos control.&lt;/p&gt;
&lt;p&gt;Flatpak puede actualizarse manualmente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flatpak update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Así que si te importa cuándo ocurren las actualizaciones, &lt;code&gt;apt&lt;/code&gt; y Flatpak suelen sentirse más controlables. Si quieres que las apps se mantengan actuales automáticamente, Snap es más desatendido.&lt;/p&gt;
&lt;h2 id=&#34;cuál-deberías-usar&#34;&gt;Cuál deberías usar
&lt;/h2&gt;&lt;p&gt;Elige por escenario:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Herramientas del sistema, drivers y componentes de servidor: prefiere &lt;code&gt;apt&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Apps de escritorio recomendadas por Ubuntu: Snap está bien.&lt;/li&gt;
&lt;li&gt;Apps de escritorio más nuevas, especialmente entre distribuciones: Flatpak suele ser buena opción.&lt;/li&gt;
&lt;li&gt;Si la misma app existe en los tres formatos: compara estabilidad, velocidad de arranque, integración de temas y necesidades de actualización.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Un enfoque conservador es: usar &lt;code&gt;apt&lt;/code&gt; para la capa del sistema, y luego elegir Snap o Flatpak para apps de escritorio según haga falta.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;apt&lt;/code&gt;, Snap y Flatpak no se reemplazan completamente entre sí. Son modelos de distribución distintos.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;apt&lt;/code&gt; es mejor para mantener el sistema. Snap enfatiza dependencias empaquetadas y actualizaciones automáticas. Flatpak es mejor para apps de escritorio entre distribuciones y entrega sandboxed.&lt;/p&gt;
&lt;p&gt;Para uso diario, no hace falta obsesionarse con cuál es mejor. Usa &lt;code&gt;apt&lt;/code&gt; para software del sistema. Para apps de escritorio, sigue la recomendación de tu distribución y tu propia experiencia: funcionamiento estable, actualizaciones controladas y permisos claros son lo que importa.&lt;/p&gt;
&lt;p&gt;Referencia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.reddit.com/r/Ubuntu/comments/9awvip/eli5_snap_and_flatpak_how_are_they_differ_from_apt/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.reddit.com/r/Ubuntu/comments/9awvip/eli5_snap_and_flatpak_how_are_they_differ_from_apt/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cambios del driver NTFS en Linux 7.0 y 7.1, explicados</title>
        <link>https://knightli.com/es/2026/05/02/linux-7-0-7-1-ntfs-driver/</link>
        <pubDate>Sat, 02 May 2026 10:46:20 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/02/linux-7-0-7-1-ntfs-driver/</guid>
        <description>&lt;p&gt;Después de Linux 7.0, Linux 7.1 entró en la siguiente ventana de integración de funciones. Un cambio llamativo es un nuevo driver NTFS para el kernel.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Nuevo&amp;rdquo; no significa que Linux admita NTFS por primera vez, ni que &lt;code&gt;ntfs3&lt;/code&gt; vaya a ser reemplazado. Más exactamente, Linux 7.1 añade un nuevo driver NTFS opcional de lectura y escritura dentro del kernel. Está basado en el antiguo driver &lt;code&gt;ntfs&lt;/code&gt; del kernel, modernizado y ampliado con soporte de escritura más completo.&lt;/p&gt;
&lt;h2 id=&#34;resumen-rápido&#34;&gt;Resumen rápido
&lt;/h2&gt;&lt;p&gt;Linux tiene ahora tres caminos principales para NTFS:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Opción&lt;/th&gt;
          &lt;th&gt;Ubicación&lt;/th&gt;
          &lt;th&gt;Soporte lectura-escritura&lt;/th&gt;
          &lt;th&gt;Mejor para&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ntfs-3g&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;FUSE en espacio de usuario&lt;/td&gt;
          &lt;td&gt;Lectura-escritura&lt;/td&gt;
          &lt;td&gt;Priorizar estabilidad; valor por defecto histórico en muchas distribuciones&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;code&gt;ntfs3&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Espacio de kernel&lt;/td&gt;
          &lt;td&gt;Lectura-escritura&lt;/td&gt;
          &lt;td&gt;Integración más directa con el kernel y rendimiento&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Nuevo &lt;code&gt;ntfs&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;Espacio de kernel&lt;/td&gt;
          &lt;td&gt;Lectura-escritura&lt;/td&gt;
          &lt;td&gt;Implementación opcional añadida en Linux 7.1&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Esto no es una migración forzada. Simplemente añade otra opción. La mayoría de usuarios puede seguir usando por ahora los valores por defecto de su distribución.&lt;/p&gt;
&lt;h2 id=&#34;relación-entre-70-y-71&#34;&gt;Relación entre 7.0 y 7.1
&lt;/h2&gt;&lt;p&gt;Linux 7.0 solo marca el paso a la serie 7.x del kernel. No significa que el soporte NTFS se reescribiera de golpe en 7.0. El cambio relacionado con NTFS aparece en el ciclo de funciones de Linux 7.1.&lt;/p&gt;
&lt;p&gt;NTFS sigue siendo importante para usuarios de escritorio Linux porque sistemas dual-boot, discos externos, unidades USB y discos de datos de Windows suelen usarlo. La parte delicada es la escritura: si un driver de sistema de archivos tiene un bug, los datos del usuario pueden verse afectados directamente. Por eso los cambios en drivers NTFS se tratan con cuidado.&lt;/p&gt;
&lt;h2 id=&#34;ntfs-3g-ntfs3-y-el-nuevo-ntfs&#34;&gt;&lt;code&gt;ntfs-3g&lt;/code&gt;, &lt;code&gt;ntfs3&lt;/code&gt; y el nuevo &lt;code&gt;ntfs&lt;/code&gt;
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;ntfs-3g&lt;/code&gt; es un driver FUSE en espacio de usuario. Durante mucho tiempo ha gestionado el soporte de lectura y escritura NTFS en Linux. Puede no ser siempre la opción más rápida, pero es maduro, compatible y bien documentado.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ntfs3&lt;/code&gt; es el driver NTFS dentro del kernel aportado por Paragon Software y ya integrado en Linux. Tiene una ruta más corta, se integra de forma más directa con VFS y puede ofrecer mejor rendimiento. Pero los drivers de sistemas de archivos requieren una disciplina fuerte de mantenimiento, y &lt;code&gt;ntfs3&lt;/code&gt; ha generado discusión sobre ritmo de mantenimiento y calidad de código tras su integración.&lt;/p&gt;
&lt;p&gt;El nuevo driver &lt;code&gt;ntfs&lt;/code&gt; de Linux 7.1 está mantenido por Namjae Jeon. No está escrito desde cero; moderniza el antiguo driver &lt;code&gt;ntfs&lt;/code&gt; del kernel, añade soporte de escritura y coexiste con &lt;code&gt;ntfs3&lt;/code&gt; como otra implementación opcional.&lt;/p&gt;
&lt;p&gt;En resumen:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ntfs-3g&lt;/code&gt;: conservador, maduro, en espacio de usuario.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ntfs3&lt;/code&gt;: opción mainline existente dentro del kernel.&lt;/li&gt;
&lt;li&gt;Nuevo &lt;code&gt;ntfs&lt;/code&gt;: nueva opción dentro del kernel en 7.1, todavía digna de observación.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;cuál-usar&#34;&gt;Cuál usar
&lt;/h2&gt;&lt;p&gt;No hace falta cambiar de inmediato. Un orden conservador sería:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Seguir usando el valor por defecto de la distribución para datos importantes, normalmente &lt;code&gt;ntfs-3g&lt;/code&gt; o un &lt;code&gt;ntfs3&lt;/code&gt; ya probado.&lt;/li&gt;
&lt;li&gt;Probar &lt;code&gt;ntfs3&lt;/code&gt; cuando el rendimiento importe.&lt;/li&gt;
&lt;li&gt;Probar el nuevo driver &lt;code&gt;ntfs&lt;/code&gt; primero con datos temporales, de prueba o recuperables.&lt;/li&gt;
&lt;li&gt;Hacer copia de seguridad de particiones NTFS importantes antes de escribir.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para montar manualmente con &lt;code&gt;ntfs3&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -t ntfs3 /dev/sdX1 /mnt/ntfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para acceso temporal de solo lectura:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -o ro /dev/sdX1 /mnt/ntfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para comprobar qué driver se está usando:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;findmnt -T /mnt/ntfs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep ntfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;notas-para-dual-boot&#34;&gt;Notas para dual-boot
&lt;/h2&gt;&lt;p&gt;Si una partición NTFS viene de un disco de sistema Windows, asegúrate de que Windows esté completamente apagado antes de escribir en ella. Fast Startup e hibernación pueden dejar el volumen NTFS en un estado incompleto, y las escrituras desde Linux podrían causar problemas de consistencia.&lt;/p&gt;
&lt;p&gt;Comprueba primero:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Desactivar Windows Fast Startup.&lt;/li&gt;
&lt;li&gt;Asegurarse de que la partición no esté hibernada.&lt;/li&gt;
&lt;li&gt;Confirmar que BitLocker u otro cifrado no bloquea el acceso.&lt;/li&gt;
&lt;li&gt;Expulsar de forma segura unidades externas desde Windows.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Estas reglas aplican tanto si usas &lt;code&gt;ntfs-3g&lt;/code&gt;, &lt;code&gt;ntfs3&lt;/code&gt; o el nuevo driver &lt;code&gt;ntfs&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-existen-varios-drivers-ntfs&#34;&gt;Por qué existen varios drivers NTFS
&lt;/h2&gt;&lt;p&gt;No es raro que Linux tenga varias implementaciones para el mismo sistema de archivos. Implementaciones antiguas, nuevas, de proveedor y de comunidad pueden coexistir hasta que el estado de mantenimiento y la experiencia real aclaren el camino preferido.&lt;/p&gt;
&lt;p&gt;NTFS es especialmente adecuado para un enfoque conservador:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El riesgo para datos de usuario es alto.&lt;/li&gt;
&lt;li&gt;Los casos de compatibilidad son complejos.&lt;/li&gt;
&lt;li&gt;Las implementaciones difieren en sus compromisos entre rendimiento y estabilidad.&lt;/li&gt;
&lt;li&gt;Las distribuciones necesitan tiempo para validar valores por defecto.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Así que el nuevo driver &lt;code&gt;ntfs&lt;/code&gt; de Linux 7.1 no vuelve obsoletos de inmediato a &lt;code&gt;ntfs-3g&lt;/code&gt; ni a &lt;code&gt;ntfs3&lt;/code&gt;. Da a la comunidad del kernel otra opción mantenible.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El nuevo driver &lt;code&gt;ntfs&lt;/code&gt; de Linux 7.1 es una implementación NTFS opcional de lectura y escritura dentro del kernel. Coexiste con &lt;code&gt;ntfs-3g&lt;/code&gt; y &lt;code&gt;ntfs3&lt;/code&gt;; no reemplaza directamente a ninguno.&lt;/p&gt;
&lt;p&gt;Los usuarios normales pueden seguir usando los valores por defecto de su distribución. Quienes quieran probar rendimiento o cambios de sistemas de archivos del kernel pueden observar &lt;code&gt;ntfs3&lt;/code&gt; y el nuevo &lt;code&gt;ntfs&lt;/code&gt;, pero los datos importantes deben respaldarse antes de cambiar de driver.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>sudo vs sudo-rs: qué cambia con la versión de sudo en Rust</title>
        <link>https://knightli.com/es/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</link>
        <pubDate>Fri, 01 May 2026 19:27:08 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/sudo-vs-sudo-rs-rust-linux-command/</guid>
        <description>&lt;p&gt;&lt;code&gt;sudo&lt;/code&gt; es uno de los comandos más familiares para los usuarios de Linux.
Permite que un usuario normal ejecute temporalmente comandos con privilegios más altos dentro de un alcance autorizado, por ejemplo instalar software, cambiar la configuración del sistema o reiniciar servicios.&lt;/p&gt;
&lt;p&gt;Recientemente, &lt;code&gt;sudo-rs&lt;/code&gt; ha recibido más atención porque Ubuntu 25.10 empieza a usar de forma predeterminada la implementación en Rust &lt;code&gt;sudo-rs&lt;/code&gt; para sustituir al sudo clásico.
Para los usuarios comunes, en la superficie se sigue escribiendo &lt;code&gt;sudo&lt;/code&gt;.
El cambio real está por debajo: la implementación que se ejecuta puede ser ya la versión de sudo escrita en Rust.&lt;/p&gt;
&lt;p&gt;Esto plantea dos preguntas naturales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Hay algún problema con el sudo clásico?&lt;/li&gt;
&lt;li&gt;¿Afectará sudo-rs al uso diario y a la configuración de servidores?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La conclusión breve es: los usuarios de escritorio comunes básicamente no tienen que preocuparse; si mantienes servidores, has escrito reglas sudoers complejas o dependes de comportamientos especiales de sudo, conviene probarlo con cuidado.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-sudo-rs&#34;&gt;Qué es sudo-rs
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; es una implementación de sudo / su escrita en Rust.
Su objetivo no es crear un comando nuevo completamente distinto, sino reimplementar las funciones principales del sudo clásico mientras aprovecha las propiedades de seguridad de memoria de Rust para reducir riesgos de seguridad habituales.&lt;/p&gt;
&lt;p&gt;El sudo clásico está escrito principalmente en C. Tiene una larga historia y un conjunto de funciones muy completo.
Esa madurez aporta estabilidad, pero también carga de mantenimiento.
Gran parte del código viene de escenarios Unix/Linux muy antiguos, y con el tiempo se le añadieron muchas rutas de compatibilidad, extensiones y tratamientos de casos límite.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; opta por reimplementarlo por varias razones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;reducir problemas de seguridad de memoria con Rust;&lt;/li&gt;
&lt;li&gt;usar una estructura de código más moderna para facilitar el mantenimiento;&lt;/li&gt;
&lt;li&gt;eliminar algunas funciones históricas y comportamientos predeterminados de alto riesgo;&lt;/li&gt;
&lt;li&gt;atraer a nuevos colaboradores familiarizados con Rust;&lt;/li&gt;
&lt;li&gt;proporcionar una base más fácil de auditar para futuras herramientas de elevación de privilegios.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sin embargo, &lt;code&gt;sudo-rs&lt;/code&gt; no es un reemplazo 100% compatible del sudo clásico.
Todavía está en desarrollo. Algunas funciones tradicionales aún no se han implementado, y otras quizá nunca se implementen.&lt;/p&gt;
&lt;h2 id=&#34;qué-notarán-los-usuarios-comunes&#34;&gt;Qué notarán los usuarios comunes
&lt;/h2&gt;&lt;p&gt;Para los usuarios comunes, cambia muy poco.&lt;/p&gt;
&lt;p&gt;Se sigue usando así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O así:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En Ubuntu 25.10, &lt;code&gt;sudo&lt;/code&gt; apunta a &lt;code&gt;sudo-rs&lt;/code&gt;.
Los usuarios no tienen que cambiar el comando a &lt;code&gt;sudo-rs&lt;/code&gt;, y las llamadas habituales a &lt;code&gt;sudo&lt;/code&gt; en scripts no deberían fallar inmediatamente por un cambio de nombre del comando.&lt;/p&gt;
&lt;p&gt;El cambio más visible es la retroalimentación al escribir la contraseña.
&lt;code&gt;sudo-rs&lt;/code&gt; muestra asteriscos de forma predeterminada mientras se introduce la contraseña.
El sudo clásico también puede configurarse para comportarse así, pero muchas distribuciones no muestran ningún carácter por defecto.&lt;/p&gt;
&lt;p&gt;Algunos mensajes de error y advertencia también pueden tener textos distintos.
Por ejemplo, los fallos de contraseña, los problemas de permisos o una configuración incompatible pueden mostrar avisos que no son exactamente iguales a los anteriores.
Esto afecta poco a los usuarios humanos, pero si algunos scripts analizan la salida de error de sudo, habrá que revisarlos.&lt;/p&gt;
&lt;h2 id=&#34;qué-deben-vigilar-los-administradores&#34;&gt;Qué deben vigilar los administradores
&lt;/h2&gt;&lt;p&gt;Quienes realmente deben prestar atención son los administradores de sistemas y los usuarios avanzados.&lt;/p&gt;
&lt;p&gt;El ecosistema del sudo clásico es grande, y muchos servidores tienen configuraciones sudoers complejas.
Estas configuraciones pueden incluir coincidencia de argumentos de comandos, control de variables de entorno, registros, notificaciones por correo, comportamiento de PAM y políticas para distintos grupos de hosts.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; tiene actualmente algunas diferencias frente al sudo clásico.
Por ejemplo, el artículo original señala que &lt;code&gt;sudo-rs&lt;/code&gt; no incluye el soporte de sendmail del sudo clásico.
Algunos entornos usaban sendmail para enviar notificaciones de uso de sudo, y esas configuraciones necesitarán otra solución al migrar.&lt;/p&gt;
&lt;p&gt;En autenticación, &lt;code&gt;sudo-rs&lt;/code&gt; usa PAM.
Esto significa que comportamientos como límites de recursos y umask deberían configurarse más a través de PAM, en lugar de depender por completo del archivo sudoers.
Si antes gestionabas muchos detalles en sudoers, verifica antes del cambio que esas reglas sigan funcionando.&lt;/p&gt;
&lt;p&gt;Otro cambio importante es el soporte de comodines en posiciones de argumentos de comando.
&lt;code&gt;sudo-rs&lt;/code&gt; no admite comodines en argumentos de comandos para evitar errores comunes de configuración en archivos sudoers.
Esto es bueno para la seguridad, pero puede afectar a reglas existentes.&lt;/p&gt;
&lt;h2 id=&#34;cómo-maneja-ubuntu-sudo-y-sudo-rs&#34;&gt;Cómo maneja Ubuntu sudo y sudo-rs
&lt;/h2&gt;&lt;p&gt;A partir de Ubuntu 25.10, el sistema usa &lt;code&gt;sudo-rs&lt;/code&gt; de forma predeterminada.
Los usuarios siguen escribiendo &lt;code&gt;sudo&lt;/code&gt;, mientras por debajo se ejecuta la implementación en Rust.&lt;/p&gt;
&lt;p&gt;El sudo clásico no desaparece de inmediato.
Durante la transición de Ubuntu, el sudo clásico se conserva como &lt;code&gt;sudo-ws&lt;/code&gt;.
Si realmente necesitas la implementación tradicional, puedes usar &lt;code&gt;sudo-ws&lt;/code&gt; o cambiar el sudo predeterminado mediante el mecanismo de alternatives.&lt;/p&gt;
&lt;p&gt;El comando de cambio se parece a este:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --config sudo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Dicho esto, no se recomienda que los usuarios comunes vuelvan activamente al sudo clásico.
Si no has personalizado sudoers y no dependes de comportamientos especiales, seguir la opción predeterminada de la distribución es más sencillo.&lt;/p&gt;
&lt;p&gt;Si quieres probarlo en versiones anteriores de Ubuntu, &lt;code&gt;sudo-rs&lt;/code&gt; está disponible desde Ubuntu 24.04 en el repositorio universe.
Otras distribuciones también pueden ofrecer paquetes, pero los nombres de comandos y la integración pueden variar.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-sudo-rs-usa-rust&#34;&gt;Por qué sudo-rs usa Rust
&lt;/h2&gt;&lt;p&gt;sudo es una herramienta de altos privilegios.
Si una herramienta de este tipo tiene una vulnerabilidad, las consecuencias pueden ser mucho más graves que en un comando común.
Históricamente, sudo también ha tenido varias vulnerabilidades de elevación de privilegios.&lt;/p&gt;
&lt;p&gt;La ventaja de Rust es la seguridad de memoria.
Mediante ownership, borrow checking y el sistema de tipos, reduce problemas comunes como punteros colgantes, accesos fuera de límites y use-after-free.
Esto no garantiza que el programa sea absolutamente seguro, pero puede reducir una clase de vulnerabilidades muy común en proyectos C/C++.&lt;/p&gt;
&lt;p&gt;Para una herramienta como sudo, que lleva mucho tiempo en una posición sensible de seguridad, reescribirla en un lenguaje más seguro tiene sentido práctico.
No es &amp;ldquo;Rust por Rust&amp;rdquo;, sino un intento de reducir los costes de mantenimiento y auditoría.&lt;/p&gt;
&lt;p&gt;Por supuesto, el lenguaje no resuelve todos los problemas de seguridad.
La lógica de comprobación de permisos, el análisis de configuración, la interacción con PAM, el manejo de variables de entorno, los registros y la experiencia de usuario siguen requiriendo un diseño riguroso y pruebas prolongadas.&lt;/p&gt;
&lt;h2 id=&#34;sudo-rs-no-es-la-única-alternativa&#34;&gt;sudo-rs no es la única alternativa
&lt;/h2&gt;&lt;p&gt;En el ecosistema de sudo siempre ha habido otras alternativas.&lt;/p&gt;
&lt;p&gt;Un ejemplo común es &lt;code&gt;doas&lt;/code&gt;.
Procede de OpenBSD y está diseñado para ser más simple, con una superficie de configuración más pequeña.
Algunos usuarios lo prefieren porque no es tan complejo como sudo.&lt;/p&gt;
&lt;p&gt;También existen algunas alternativas relacionadas con Rust o systemd, como RootAsRole y &lt;code&gt;run0&lt;/code&gt; de systemd.
Sin embargo, estas herramientas no tienen exactamente los mismos objetivos ni los mismos escenarios de uso.&lt;/p&gt;
&lt;p&gt;Para la mayoría de distribuciones Linux, sudo sigue siendo la opción predeterminada.
La importancia de &lt;code&gt;sudo-rs&lt;/code&gt; es que intenta mantener los hábitos de los usuarios mientras sustituye la implementación subyacente por una base de código más moderna.&lt;/p&gt;
&lt;h2 id=&#34;qué-revisar-antes-de-migrar&#34;&gt;Qué revisar antes de migrar
&lt;/h2&gt;&lt;p&gt;Si solo eres un usuario de escritorio personal, puedes seguir la configuración predeterminada de la distribución.&lt;/p&gt;
&lt;p&gt;Si mantienes servidores o estaciones de trabajo, conviene revisar estos puntos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Si existen reglas complejas en &lt;code&gt;/etc/sudoers&lt;/code&gt; o &lt;code&gt;/etc/sudoers.d/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si se usan comodines en argumentos de comandos.&lt;/li&gt;
&lt;li&gt;Si se depende de notificaciones de correo de sudo.&lt;/li&gt;
&lt;li&gt;Si hay scripts que analizan la salida de error de sudo.&lt;/li&gt;
&lt;li&gt;Si sudoers controla umask, límites de recursos o variables de entorno.&lt;/li&gt;
&lt;li&gt;Si existen integraciones de autenticación con LDAP, PAM, SSSD u otros sistemas.&lt;/li&gt;
&lt;li&gt;Si scripts de automatización o despliegue asumen el comportamiento del sudo clásico.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Primero puedes verificarlo en una máquina de pruebas:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después ejecuta los comandos clave de mantenimiento y confirma que permisos, variables de entorno y registros se comporten como esperas.&lt;/p&gt;
&lt;h2 id=&#34;deberías-cambiar-manualmente-a-sudo-rs&#34;&gt;¿Deberías cambiar manualmente a sudo-rs?
&lt;/h2&gt;&lt;p&gt;Si tu distribución ya lo usa de forma predeterminada, los usuarios comunes pueden aceptarlo directamente.
Si usas un servidor o un entorno de producción, no conviene reemplazar sudo manualmente solo para experimentar.&lt;/p&gt;
&lt;p&gt;Un proceso más prudente sería:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;instalar &lt;code&gt;sudo-rs&lt;/code&gt; en un entorno de pruebas;&lt;/li&gt;
&lt;li&gt;verificar punto por punto la configuración sudoers existente;&lt;/li&gt;
&lt;li&gt;revisar PAM, registros, auditoría y scripts de automatización;&lt;/li&gt;
&lt;li&gt;confirmar la ruta de reversión;&lt;/li&gt;
&lt;li&gt;migrar después de que la distribución ofrezca una integración estable.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este tipo de herramienta está en la cadena de privilegios, así que no basta con juzgarla por si puede ejecutar unos cuantos comandos.
La verdadera validación está en las condiciones de borde y en los casos de fallo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;sudo-rs&lt;/code&gt; es una implementación en Rust del sudo clásico, cuyo objetivo es mantener las funciones principales de sudo sobre una base de código más moderna y segura.
Que Ubuntu 25.10 lo active por defecto muestra que las distribuciones principales están empezando a impulsar seriamente esta dirección.&lt;/p&gt;
&lt;p&gt;Para los usuarios comunes, el cambio es pequeño.
Sigues escribiendo &lt;code&gt;sudo&lt;/code&gt;; solo puede haber cambiado la implementación subyacente a &lt;code&gt;sudo-rs&lt;/code&gt;.
Como mucho, notarás asteriscos al escribir la contraseña o mensajes de error ligeramente distintos.&lt;/p&gt;
&lt;p&gt;Para los administradores de sistemas, la clave es la compatibilidad.
Si el sistema tiene reglas sudoers complejas, notificaciones sendmail, integración PAM, comodines en argumentos o scripts que dependen de la salida de sudo, hay que probar antes de actualizar.&lt;/p&gt;
&lt;p&gt;Reescribir en Rust no es una cura mágica, pero para una herramienta sensible de seguridad como sudo, reducir riesgos de seguridad de memoria y complejidad de mantenimiento es una dirección que merece atención.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://itsfoss.com/sudo-vs-sudo-rs/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;It&amp;rsquo;s FOSS: sudo vs sudo-rs: What You Need to Know&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/trifectatechfoundation/sudo-rs&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Proyecto sudo-rs en GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>X11 y Wayland: diferencias, ventajas, desventajas y cuándo elegir cada uno</title>
        <link>https://knightli.com/es/2026/05/01/x11-vs-wayland-differences-pros-cons/</link>
        <pubDate>Fri, 01 May 2026 19:23:01 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/x11-vs-wayland-differences-pros-cons/</guid>
        <description>&lt;p&gt;En el escritorio Linux aparecen con frecuencia dos nombres: &lt;code&gt;X11&lt;/code&gt; y &lt;code&gt;Wayland&lt;/code&gt;.
Ambos están relacionados con la visualización gráfica, pero pertenecen a épocas distintas y siguen ideas de arquitectura y experiencia de uso muy diferentes.&lt;/p&gt;
&lt;p&gt;En pocas palabras, X11 es el protocolo y ecosistema de visualización más antiguo. Es completo y muy compatible, pero su arquitectura es compleja y su modelo de seguridad está bastante envejecido.
Wayland es el protocolo de visualización más moderno. Su objetivo es reducir capas intermedias, mejorar la seguridad y hacer que el escritorio se sienta más fluido, aunque todavía hay software y flujos de trabajo que necesitan adaptación.&lt;/p&gt;
&lt;p&gt;Para el uso diario, la conclusión breve es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;en una instalación nueva de escritorio Linux, prueba primero Wayland;&lt;/li&gt;
&lt;li&gt;si necesitas software antiguo, escritorio remoto complejo, dispositivos de entrada especiales o ciertas herramientas profesionales, X11 puede seguir siendo más estable;&lt;/li&gt;
&lt;li&gt;para juegos y trabajo de oficina normal, Wayland ya es cada vez más usable;&lt;/li&gt;
&lt;li&gt;si encuentras problemas de compatibilidad, puedes volver a X11. No hace falta convertirlo en una cuestión de fe.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;qué-es-x11&#34;&gt;Qué es X11
&lt;/h2&gt;&lt;p&gt;X11, también llamado X Window System o Xorg, es el sistema gráfico que los escritorios Linux y Unix han usado durante muchos años.
Su diseño viene del entorno de computación en red de las primeras décadas: un programa podía ejecutarse en una máquina y mostrar su ventana en otra.&lt;/p&gt;
&lt;p&gt;La estructura típica de X11 es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;las aplicaciones dibujan el contenido de las ventanas;&lt;/li&gt;
&lt;li&gt;el X Server gestiona la pantalla, la entrada y las operaciones básicas de ventana;&lt;/li&gt;
&lt;li&gt;el gestor de ventanas controla bordes, movimiento y apilamiento;&lt;/li&gt;
&lt;li&gt;el compositor se encarga de sombras, transparencias, animaciones, control de tearing y efectos similares.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta arquitectura es flexible y permitió que X11 acumulara una gran cantidad de herramientas y extensiones.
Pero con el paso del tiempo sus problemas se hicieron evidentes: muchos componentes, rutas largas, límites de permisos poco estrictos y muchas necesidades modernas mantenidas mediante extensiones y parches.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-wayland&#34;&gt;Qué es Wayland
&lt;/h2&gt;&lt;p&gt;Wayland no es un servidor de visualización completo en el sentido tradicional, sino un protocolo de visualización más moderno.
En Wayland, el compositor suele asumir también el papel de servidor de visualización.
Mutter de GNOME, KWin de KDE y los compositores basados en wlroots pueden actuar como compositores Wayland.&lt;/p&gt;
&lt;p&gt;La estructura típica de Wayland es más corta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;las aplicaciones renderizan su propio contenido de ventana;&lt;/li&gt;
&lt;li&gt;el compositor recibe los buffers enviados por las aplicaciones;&lt;/li&gt;
&lt;li&gt;el compositor gestiona de forma centralizada ventanas, entrada, salidas de pantalla y composición;&lt;/li&gt;
&lt;li&gt;la imagen final se entrega directamente a la pila gráfica del kernel para mostrarse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Este diseño reduce los rodeos entre X Server, gestor de ventanas y compositor que existen en la arquitectura tradicional de X11.
También hace que el control de permisos sea más claro: por defecto, las aplicaciones no pueden leer libremente el contenido de otras ventanas ni escuchar sin restricciones la entrada global del teclado.&lt;/p&gt;
&lt;h2 id=&#34;diferencias-de-arquitectura&#34;&gt;Diferencias de arquitectura
&lt;/h2&gt;&lt;p&gt;La diferencia central está en el reparto de responsabilidades.&lt;/p&gt;
&lt;p&gt;En X11, el X Server ocupa la posición central y muchas aplicaciones pueden interactuar con él.
Los gestores de ventanas, compositores, métodos de entrada, herramientas de captura y herramientas de control remoto pueden obtener mucha información a través de las interfaces abiertas de X11.
Esto aporta una compatibilidad muy fuerte, pero también problemas de seguridad.&lt;/p&gt;
&lt;p&gt;En Wayland, el centro es el compositor.
Las aplicaciones no pueden acceder directamente al contenido de otras ventanas ni escuchar todo el teclado por defecto.
Funciones como capturas de pantalla, grabación, compartir pantalla, atajos globales y control remoto deben pasar por portales de escritorio, PipeWire o interfaces controladas ofrecidas por el compositor.&lt;/p&gt;
&lt;p&gt;Puedes entenderlo así:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Punto&lt;/th&gt;
          &lt;th&gt;X11&lt;/th&gt;
          &lt;th&gt;Wayland&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Época de diseño&lt;/td&gt;
          &lt;td&gt;Más antigua&lt;/td&gt;
          &lt;td&gt;Más reciente&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Componente central&lt;/td&gt;
          &lt;td&gt;X Server&lt;/td&gt;
          &lt;td&gt;Compositor&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Papel del compositor&lt;/td&gt;
          &lt;td&gt;Opcional o componente adicional&lt;/td&gt;
          &lt;td&gt;Componente central&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Aislamiento entre aplicaciones&lt;/td&gt;
          &lt;td&gt;Más débil&lt;/td&gt;
          &lt;td&gt;Más fuerte&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Visualización remota&lt;/td&gt;
          &lt;td&gt;Concepto nativo más fuerte&lt;/td&gt;
          &lt;td&gt;Depende de herramientas más nuevas&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Compatibilidad&lt;/td&gt;
          &lt;td&gt;Muy fuerte&lt;/td&gt;
          &lt;td&gt;Todavía se está completando&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Experiencia de escritorio moderna&lt;/td&gt;
          &lt;td&gt;Depende de extensiones y parches&lt;/td&gt;
          &lt;td&gt;Diseñada más cerca de las necesidades actuales&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;ventajas-de-x11&#34;&gt;Ventajas de X11
&lt;/h2&gt;&lt;p&gt;La mayor ventaja de X11 es su madurez.
Lleva muchos años en uso, y casi todos los programas gráficos de Linux funcionan bajo X11.
Herramientas antiguas, software profesional, métodos de entrada especiales, soluciones de control remoto y scripts de automatización suelen dar soporte primero a X11.&lt;/p&gt;
&lt;p&gt;Otra ventaja de X11 es su gran operabilidad.
Muchas herramientas pueden leer ventanas directamente, simular entrada, capturar la pantalla, mover ventanas y escuchar pulsaciones de teclas.
Esto resulta práctico para automatización, asistencia remota, scripts de gestión de ventanas y algunos flujos de trabajo especiales.&lt;/p&gt;
&lt;p&gt;Si tus necesidades incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;usar software GUI antiguo;&lt;/li&gt;
&lt;li&gt;depender de &lt;code&gt;xrandr&lt;/code&gt;, &lt;code&gt;xinput&lt;/code&gt;, &lt;code&gt;xdotool&lt;/code&gt; o &lt;code&gt;wmctrl&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;usar escritorio remoto tradicional o reenvío de ventanas;&lt;/li&gt;
&lt;li&gt;necesitar herramientas especiales de captura, grabación o macros de teclado y ratón;&lt;/li&gt;
&lt;li&gt;ejecutar una aplicación que todavía no es estable bajo Wayland;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;entonces X11 sigue siendo una opción muy realista.&lt;/p&gt;
&lt;h2 id=&#34;desventajas-de-x11&#34;&gt;Desventajas de X11
&lt;/h2&gt;&lt;p&gt;Las desventajas de X11 vienen sobre todo de su carga histórica.&lt;/p&gt;
&lt;p&gt;La primera es su modelo de seguridad antiguo.
En una sesión tradicional de X11, una aplicación normal a menudo puede escuchar la entrada de otras ventanas, capturar el contenido de la pantalla y simular acciones de teclado y ratón.
Desde una perspectiva moderna de seguridad de escritorio, esto es difícil de aceptar.&lt;/p&gt;
&lt;p&gt;La segunda es la complejidad de la ruta de renderizado.
X11 pasó por muchas extensiones: Composite, GLX, DRI, RandR, Present y otras.
Estas extensiones le permitieron seguir soportando escritorios modernos, pero también hicieron más compleja la pila gráfica.
En escenarios con altas tasas de refresco, varios monitores, escalado mixto, DPI mixto y entrada de baja latencia, X11 es más propenso a problemas de borde.&lt;/p&gt;
&lt;p&gt;Además, el foco de mantenimiento de X11 se ha desplazado gradualmente hacia la compatibilidad.
Los escritorios principales todavía soportan X11, pero las nuevas funciones y optimizaciones suelen llegar primero a Wayland.&lt;/p&gt;
&lt;h2 id=&#34;ventajas-de-wayland&#34;&gt;Ventajas de Wayland
&lt;/h2&gt;&lt;p&gt;Las ventajas de Wayland están sobre todo en la experiencia de escritorio moderna.&lt;/p&gt;
&lt;p&gt;Su ruta de renderizado es más directa.
Las aplicaciones renderizan buffers y el compositor se encarga de la composición y visualización unificadas, reduciendo los rodeos de la arquitectura tradicional de X11.
En animaciones, movimiento de ventanas, altas tasas de refresco, varios monitores, gestos de touchpad y escalado fraccionario, Wayland suele permitir una implementación más limpia.&lt;/p&gt;
&lt;p&gt;La seguridad también es una ventaja importante de Wayland.
Por defecto, las aplicaciones no pueden capturar otras ventanas libremente ni escuchar sin condiciones la entrada global del teclado.
Las capturas, la grabación y el uso compartido de pantalla requieren autorización del usuario y normalmente se gestionan mediante portales de escritorio y PipeWire.&lt;/p&gt;
&lt;p&gt;Wayland también se adapta mejor al hardware moderno.
Gestos de touchpad, HiDPI, frecuencia de refresco variable y distintos factores de escalado por monitor suelen ser más naturales bajo Wayland.
GNOME y KDE también han concentrado muchas mejoras de experiencia de escritorio en sus sesiones Wayland durante los últimos años.&lt;/p&gt;
&lt;h2 id=&#34;desventajas-de-wayland&#34;&gt;Desventajas de Wayland
&lt;/h2&gt;&lt;p&gt;El problema de Wayland no es que &amp;ldquo;no se pueda usar&amp;rdquo;, sino que el ecosistema todavía está migrando.&lt;/p&gt;
&lt;p&gt;Algunas herramientas dependían históricamente de las capacidades abiertas de X11, como escuchar teclas globales, enumerar ventanas, hacer clic automáticamente, capturar pantalla o mover ventanas.
En Wayland eso no se puede copiar directamente: debe implementarse mediante portales, protocolos del compositor o API del entorno de escritorio.
Por eso algunas herramientas antiguas dejan de funcionar, o solo funcionan en determinados entornos de escritorio.&lt;/p&gt;
&lt;p&gt;El escritorio remoto es un caso típico.
X11 nació con una idea de transparencia de red. Aunque la experiencia moderna no siempre sea perfecta, muchas herramientas ya maduraron a su alrededor.
Bajo Wayland, el escritorio remoto necesita PipeWire, RDP, VNC, portales de escritorio o soporte del compositor, y la experiencia concreta depende de GNOME, KDE, Sway u otros entornos.&lt;/p&gt;
&lt;p&gt;Los métodos de entrada también fueron un punto doloroso.
Hoy Fcitx5 e IBus han mejorado claramente en los escritorios Wayland principales, pero ciertas aplicaciones Electron, programas antiguos o combinaciones especiales todavía pueden tener problemas con la posición de la ventana de candidatos, el foco o los atajos.&lt;/p&gt;
&lt;p&gt;NVIDIA también fue durante mucho tiempo uno de los obstáculos para Wayland.
En los últimos años, el soporte de los drivers NVIDIA y de los entornos de escritorio ha mejorado mucho, pero si usas una GPU antigua, un driver antiguo o una configuración multimonitor poco común, X11 todavía puede ser más estable.&lt;/p&gt;
&lt;h2 id=&#34;qué-hace-xwayland&#34;&gt;Qué hace Xwayland
&lt;/h2&gt;&lt;p&gt;Mucha gente cree que, al pasar a Wayland, las aplicaciones X11 dejan de funcionar por completo.
En realidad no es así.&lt;/p&gt;
&lt;p&gt;Los escritorios Wayland suelen usar &lt;code&gt;Xwayland&lt;/code&gt; para ejecutar aplicaciones X11 antiguas.
La aplicación cree que se está ejecutando sobre X11, pero el contenido de su ventana se entrega después al compositor Wayland para mostrarse.&lt;/p&gt;
&lt;p&gt;Esto suaviza mucho la migración:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;las aplicaciones Wayland nativas usan Wayland;&lt;/li&gt;
&lt;li&gt;las aplicaciones X11 antiguas usan Xwayland;&lt;/li&gt;
&lt;li&gt;el usuario puede ejecutar ambos tipos de programas en la misma sesión de escritorio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sin embargo, Xwayland no lo resuelve todo.
Si una herramienta depende de escuchar entrada global, scripts de gestión de ventanas o extensiones X11 de bajo nivel, puede seguir encontrando restricciones.&lt;/p&gt;
&lt;h2 id=&#34;cuál-rinde-mejor&#34;&gt;Cuál rinde mejor
&lt;/h2&gt;&lt;p&gt;No se puede decir simplemente que Wayland siempre sea más rápido que X11, ni que X11 siempre sea más estable.
El rendimiento real depende del entorno de escritorio, el driver gráfico, el tipo de aplicación y el escenario de uso.&lt;/p&gt;
&lt;p&gt;En general:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;para animaciones normales de escritorio y pantallas de alta tasa de refresco, Wayland suele sentirse más fluido;&lt;/li&gt;
&lt;li&gt;para DPI mixto y escalado en varios monitores, Wayland tiene ventaja;&lt;/li&gt;
&lt;li&gt;para aplicaciones antiguas y herramientas especiales, X11 suele dar menos sorpresas;&lt;/li&gt;
&lt;li&gt;en juegos, Wayland ya está bastante maduro gracias a Xwayland y al soporte nativo, aunque algunos juegos o herramientas de captura todavía pueden preferir X11;&lt;/li&gt;
&lt;li&gt;para gráficos profesionales, control remoto y scripts de automatización, conviene probar herramienta por herramienta.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para la mayoría de usuarios comunes, el rendimiento no es la diferencia principal.
Lo que realmente decide la experiencia es la compatibilidad, los límites de seguridad, la configuración de monitores y el soporte de dispositivos de entrada.&lt;/p&gt;
&lt;h2 id=&#34;capturas-grabación-y-uso-compartido-de-pantalla&#34;&gt;Capturas, grabación y uso compartido de pantalla
&lt;/h2&gt;&lt;p&gt;Esta es una de las partes de Wayland que más se malinterpreta.&lt;/p&gt;
&lt;p&gt;En X11, las herramientas de captura y grabación normalmente pueden capturar la pantalla directamente.
Es cómodo, pero también significa que un programa malicioso puede espiar la pantalla con más facilidad.&lt;/p&gt;
&lt;p&gt;En Wayland, las aplicaciones no pueden capturar la pantalla libremente.
Las capturas, la grabación, las transmisiones y el uso compartido en reuniones suelen tener que pasar por portales de escritorio y PipeWire, con autorización del usuario.
Esto es más seguro, pero exige que las aplicaciones soporten las interfaces nuevas.&lt;/p&gt;
&lt;p&gt;Así que si una aplicación de reuniones, una herramienta de grabación o una herramienta de captura no funciona bien bajo Wayland, no significa necesariamente que Wayland &amp;ldquo;no lo soporte&amp;rdquo;.
Es más probable que la aplicación no se haya adaptado bien a los portales o a PipeWire.&lt;/p&gt;
&lt;h2 id=&#34;qué-deberían-elegir-los-jugadores&#34;&gt;Qué deberían elegir los jugadores
&lt;/h2&gt;&lt;p&gt;Los juegos en Linux ya no son exclusivos de X11.
Steam, Proton, Mesa, KDE, GNOME, Gamescope y Xwayland han hecho que la experiencia de juego en Wayland mejore mucho.&lt;/p&gt;
&lt;p&gt;Si usas una GPU AMD o Intel, Wayland normalmente ya puede servir como entorno de juego diario.
Si usas NVIDIA, los drivers nuevos también son cada vez más usables, aunque conviene mantener actualizados el driver y el entorno de escritorio.&lt;/p&gt;
&lt;p&gt;Los jugadores pueden elegir así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;juegos normales de Steam / Proton: prueba primero Wayland;&lt;/li&gt;
&lt;li&gt;si hay problemas de grabación, transmisión, overlays o latencia de entrada: compara con X11;&lt;/li&gt;
&lt;li&gt;si usas Gamescope: el ecosistema Wayland encaja mejor;&lt;/li&gt;
&lt;li&gt;si usas una GPU o driver antiguos: X11 puede ser más cómodo.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;escritorio-remoto-y-automatización&#34;&gt;Escritorio remoto y automatización
&lt;/h2&gt;&lt;p&gt;Si tu flujo de trabajo depende de escritorio remoto, automatización de ventanas o control global de teclado y ratón, conviene ser más prudente.&lt;/p&gt;
&lt;p&gt;X11 tiene muchas herramientas y un comportamiento directo en estos escenarios.
Por ejemplo, controlar ventanas con scripts, simular clics o capturar el contenido de una ventana concreta suele ser más fácil bajo X11.&lt;/p&gt;
&lt;p&gt;Por diseño de seguridad, Wayland no permite que una aplicación normal controle libremente otras ventanas.
Esto significa que las herramientas de automatización deben usar interfaces proporcionadas por el entorno de escritorio, o bien implementaciones específicas de escritorio remoto.
GNOME y KDE están completando estas capacidades, pero la consistencia entre escritorios todavía no alcanza la de X11.&lt;/p&gt;
&lt;p&gt;Si eres un usuario común de escritorio, Wayland está bien.
Si dependes mucho del control remoto, las pruebas automatizadas o scripts de gestión de ventanas, X11 todavía puede encajar mejor.&lt;/p&gt;
&lt;h2 id=&#34;cómo-saber-cuál-estás-usando&#34;&gt;Cómo saber cuál estás usando
&lt;/h2&gt;&lt;p&gt;Puedes revisar el tipo de sesión actual con una variable de entorno:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$XDG_SESSION_TYPE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si la salida es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wayland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;significa que estás en una sesión Wayland.&lt;/p&gt;
&lt;p&gt;Si la salida es:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;x11
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;significa que estás en una sesión X11.&lt;/p&gt;
&lt;p&gt;En GNOME, KDE y otros escritorios similares, normalmente puedes cambiar entre X11 y Wayland desde el menú de engranaje o selector de sesión en la pantalla de inicio de sesión.&lt;/p&gt;
&lt;h2 id=&#34;recomendaciones-de-elección&#34;&gt;Recomendaciones de elección
&lt;/h2&gt;&lt;p&gt;Puedes decidir de esta forma:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Escenario&lt;/th&gt;
          &lt;th&gt;Recomendación&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Equipo nuevo, distribución principal, oficina normal&lt;/td&gt;
          &lt;td&gt;Preferir Wayland&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Versiones recientes de GNOME / KDE&lt;/td&gt;
          &lt;td&gt;Preferir Wayland&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Varios monitores, HiDPI, alta tasa de refresco&lt;/td&gt;
          &lt;td&gt;Preferir Wayland&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Software antiguo, GPU antigua, driver antiguo&lt;/td&gt;
          &lt;td&gt;Preferir X11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Escritorio remoto, scripts de ventanas, pruebas automatizadas&lt;/td&gt;
          &lt;td&gt;Preferir X11 o probar Wayland punto por punto&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Juegos&lt;/td&gt;
          &lt;td&gt;Probar Wayland primero; si hay problemas, cambiar a X11&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Compartir pantalla en reuniones, grabación&lt;/td&gt;
          &lt;td&gt;Depende del soporte de PipeWire / portales en el software&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Escritorio sensible a seguridad o multiusuario&lt;/td&gt;
          &lt;td&gt;Preferir Wayland&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Wayland es la dirección de futuro, pero X11 no va a desaparecer de inmediato.
Ambos seguirán coexistiendo durante un tiempo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Las fortalezas de X11 son su madurez, compatibilidad y gran ecosistema de herramientas.
Encaja bien con software antiguo, escritorio remoto, automatización de ventanas y algunos flujos de trabajo especiales.
Sus puntos débiles son límites de seguridad pobres, una arquitectura compleja y una adaptación menos limpia a pantallas modernas con varios monitores, alta tasa de refresco y escalado mixto.&lt;/p&gt;
&lt;p&gt;Las fortalezas de Wayland son una arquitectura más moderna, mejor seguridad, una ruta de visualización más directa y mejor soporte para HiDPI, gestos de touchpad, varios monitores y experiencias de escritorio modernas.
Sus puntos débiles son los costes de adaptación en algunas herramientas antiguas, control remoto, capturas y grabación, y escenarios de métodos de entrada.&lt;/p&gt;
&lt;p&gt;Los usuarios comunes pueden tomar Wayland como opción predeterminada.
Si una aplicación o un periférico no se comporta bien, vuelve a X11 y compara.
Para el escritorio Linux, no se trata de tomar partido, sino de elegir la opción que resulte más cómoda según tu hardware, software y flujo de trabajo.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://wayland.freedesktop.org/architecture.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wayland Architecture&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://wayland.freedesktop.org/faq.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Wayland FAQ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://wayland.freedesktop.org/xserver.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Xwayland Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://wiki.archlinux.org/title/Wayland&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ArchWiki: Wayland&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Copy Fail CVE-2026-31431: riesgo de escape de contenedor en la ruta de copia de archivos del kernel Linux</title>
        <link>https://knightli.com/es/2026/05/01/copy-fail-cve-2026-31431-linux-kernel-container-escape/</link>
        <pubDate>Fri, 01 May 2026 18:42:34 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/copy-fail-cve-2026-31431-linux-kernel-container-escape/</guid>
        <description>&lt;p&gt;Copy Fail es una vulnerabilidad en la ruta de copia de archivos del kernel Linux, registrada como &lt;code&gt;CVE-2026-31431&lt;/code&gt;.
El análisis de Bugcrowd la describe como un problema de nivel kernel que merece atención: bajo condiciones específicas, un usuario sin privilegios puede abusar de la lógica de copia de archivos para provocar escrituras no autorizadas, lo que puede llevar a escalada de privilegios o escape de contenedor.&lt;/p&gt;
&lt;p&gt;Desde una perspectiva de riesgo, no es una vulnerabilidad normal de capa de aplicación.
El problema ocurre en la ruta del kernel que maneja copia de archivos y comportamiento de page cache, por lo que su impacto puede extenderse a contenedores, hosts compartidos, runners de CI/CD, plataformas PaaS y entornos Linux multi-tenant.
Si un atacante ya puede ejecutar código con pocos privilegios en un sistema, la vulnerabilidad puede convertirse en un escalón para romper límites de aislamiento.&lt;/p&gt;
&lt;h2 id=&#34;dónde-vive-aproximadamente-la-vulnerabilidad&#34;&gt;Dónde vive aproximadamente la vulnerabilidad
&lt;/h2&gt;&lt;p&gt;Copy Fail está relacionada con capacidades de copia de archivos del kernel Linux.
Linux moderno ofrece varias rutas eficientes de copia, como &lt;code&gt;copy_file_range&lt;/code&gt;, rutas tipo splice y optimizaciones de copia de datos entre distintos sistemas de archivos.
Estos mecanismos están diseñados para reducir movimiento de datos entre espacio de usuario y espacio de kernel y mejorar el rendimiento de copia de archivos grandes.&lt;/p&gt;
&lt;p&gt;El problema es que las rutas de copia de alto rendimiento suelen reutilizar page cache, offsets de archivo, comprobaciones de permisos y callbacks de sistemas de archivos.
Si una condición de borde no se maneja con suficiente rigor, el kernel puede realizar una escritura en el contexto de permisos equivocado o exponer páginas de datos que el atacante no debería controlar.&lt;/p&gt;
&lt;p&gt;El riesgo central de Copy Fail se puede resumir así:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;el atacante no necesita privilegios root;&lt;/li&gt;
&lt;li&gt;el punto de entrada del ataque proviene de capacidades comunes de copia de archivos;&lt;/li&gt;
&lt;li&gt;la lógica afectada se ejecuta en espacio de kernel;&lt;/li&gt;
&lt;li&gt;en entornos de contenedores, la vulnerabilidad puede saltarse aislamiento de namespaces y montajes;&lt;/li&gt;
&lt;li&gt;una explotación exitosa puede escribir contenido del host que el contenedor no debería poder modificar.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por eso ha llamado la atención.
La seguridad de contenedores depende del aislamiento que proporciona el kernel Linux. Cuando una ruta del propio kernel permite escrituras no autorizadas, el límite del contenedor se vuelve frágil.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-los-escenarios-de-contenedores-son-más-sensibles&#34;&gt;Por qué los escenarios de contenedores son más sensibles
&lt;/h2&gt;&lt;p&gt;Los contenedores no son máquinas virtuales.
Los procesos dentro de un contenedor comparten el mismo kernel Linux con el host y se aíslan mediante mecanismos como namespaces, cgroups, capabilities, seccomp y AppArmor/SELinux.&lt;/p&gt;
&lt;p&gt;Si una vulnerabilidad existe en un servicio de espacio de usuario, normalmente afecta solo a un contenedor o un proceso.
Pero si la vulnerabilidad está en el kernel, especialmente una que puede activar un usuario sin privilegios, un atacante puede influir en el host desde dentro de un contenedor.&lt;/p&gt;
&lt;p&gt;Ahí es donde Copy Fail se vuelve peligroso.
Muchas plataformas permiten a usuarios enviar jobs de build, ejecutar scripts, iniciar contenedores o ejecutar plugins.
Mientras un atacante pueda ejecutar código dentro de un contenedor, puede intentar usar la ruta de copia de archivos del kernel para romper el aislamiento.&lt;/p&gt;
&lt;p&gt;Entornos de alto riesgo incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;cargas no confiables en clusters Kubernetes;&lt;/li&gt;
&lt;li&gt;runners compartidos en plataformas CI/CD;&lt;/li&gt;
&lt;li&gt;plataformas sandbox que permiten a usuarios subir y ejecutar código;&lt;/li&gt;
&lt;li&gt;hosts Linux multi-tenant;&lt;/li&gt;
&lt;li&gt;entornos PaaS contenerizados;&lt;/li&gt;
&lt;li&gt;sistemas que ejecutan plugins o extensiones de terceros.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si estos entornos ejecutan kernels afectados y no tienen restricciones adicionales, el riesgo aumenta de forma significativa.&lt;/p&gt;
&lt;h2 id=&#34;el-impacto-depende-del-estado-de-parcheo-del-kernel&#34;&gt;El impacto depende del estado de parcheo del kernel
&lt;/h2&gt;&lt;p&gt;No se puede juzgar este tipo de vulnerabilidad solo por el nombre de la distribución.
Para la misma versión de Ubuntu, Debian, RHEL, Fedora o Arch, la exposición depende del paquete de kernel que realmente está en ejecución y de si la distribución hizo backport del arreglo.&lt;/p&gt;
&lt;p&gt;Durante el triage, prioriza tres comprobaciones:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;La versión del kernel actualmente en ejecución.&lt;/li&gt;
&lt;li&gt;Si el aviso de seguridad de la distribución menciona &lt;code&gt;CVE-2026-31431&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si el proveedor cloud o la plataforma gestionada parcheó el kernel del host.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Primero puedes confirmar la versión del kernel en el sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Luego revisa avisos de seguridad de la distribución, changelogs del kernel o comunicados de la plataforma cloud.
No juzgues la seguridad solo por la versión mayor, porque muchas distribuciones empresariales hacen backport de correcciones de seguridad a ramas de kernel antiguas.&lt;/p&gt;
&lt;h2 id=&#34;ideas-de-mitigación-temporal&#34;&gt;Ideas de mitigación temporal
&lt;/h2&gt;&lt;p&gt;La solución más confiable sigue siendo actualizar el kernel.
Pero en entornos donde los parches no pueden desplegarse de inmediato, puedes reducir exposición primero.&lt;/p&gt;
&lt;p&gt;Direcciones comunes de mitigación incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;impedir que usuarios no confiables ejecuten contenedores privilegiados;&lt;/li&gt;
&lt;li&gt;evitar montar rutas sensibles del host dentro de contenedores;&lt;/li&gt;
&lt;li&gt;endurecer capabilities de contenedores, especialmente evitando &lt;code&gt;CAP_SYS_ADMIN&lt;/code&gt; innecesario;&lt;/li&gt;
&lt;li&gt;usar seccomp, AppArmor o SELinux para restringir syscalls peligrosas y acceso a archivos;&lt;/li&gt;
&lt;li&gt;mover cargas no confiables a aislamiento más fuerte mediante máquinas virtuales;&lt;/li&gt;
&lt;li&gt;destruir runners de CI/CD por job en lugar de reutilizar el mismo host durante mucho tiempo;&lt;/li&gt;
&lt;li&gt;monitorear escrituras anómalas de archivos, cambios de permisos y señales de escape de contenedor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Estas medidas no reemplazan parches.
Su papel es reducir la probabilidad de explotación y el impacto, especialmente antes de que los parches lleguen a producción.&lt;/p&gt;
&lt;h2 id=&#34;prioridad-de-parcheo&#34;&gt;Prioridad de parcheo
&lt;/h2&gt;&lt;p&gt;Prioriza la remediación según el riesgo del entorno.&lt;/p&gt;
&lt;p&gt;Parchear primero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;plataformas que exponen ejecución de contenedores a usuarios externos;&lt;/li&gt;
&lt;li&gt;nodos CI/CD que ejecutan código no confiable;&lt;/li&gt;
&lt;li&gt;nodos Kubernetes multi-tenant;&lt;/li&gt;
&lt;li&gt;sistemas con plugins o ejecución de scripts definidos por usuarios;&lt;/li&gt;
&lt;li&gt;máquinas de desarrollo compartidas, equipos de enseñanza y plataformas de laboratorio.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Prioridad relativamente menor:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;escritorios de un solo usuario;&lt;/li&gt;
&lt;li&gt;hosts internos que solo ejecutan servicios confiables;&lt;/li&gt;
&lt;li&gt;entornos que ya aíslan código no confiable mediante máquinas virtuales.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Incluso cuando el riesgo es menor, sigue siendo mejor actualizar el kernel mediante la distribución.
Las vulnerabilidades de kernel a menudo se encadenan en ataques más complejos, y retrasar parches rara vez aporta mucho beneficio.&lt;/p&gt;
&lt;h2 id=&#34;checklist-para-equipos-de-operaciones&#34;&gt;Checklist para equipos de operaciones
&lt;/h2&gt;&lt;p&gt;Puedes procesarlo en este orden:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Inventariar todos los hosts Linux y nodos de contenedores.&lt;/li&gt;
&lt;li&gt;Marcar máquinas que ejecutan código no confiable.&lt;/li&gt;
&lt;li&gt;Comprobar versión actual de kernel y avisos de seguridad de la distribución.&lt;/li&gt;
&lt;li&gt;Actualizar primero los nodos de alto riesgo.&lt;/li&gt;
&lt;li&gt;Aplicar políticas temporales de aislamiento a nodos que no pueden actualizarse de inmediato.&lt;/li&gt;
&lt;li&gt;Revisar configuración del runtime de contenedores y eliminar privilegios y montajes de host innecesarios.&lt;/li&gt;
&lt;li&gt;Reiniciar nodos después de actualizar y confirmar que el nuevo kernel está realmente en ejecución.&lt;/li&gt;
&lt;li&gt;Mantener registros de cambios para auditoría posterior.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Instalar un paquete de kernel no significa que el sistema ya esté ejecutando el nuevo kernel.
Debes reiniciar después de actualizar y confirmar de nuevo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El punto clave de Copy Fail / &lt;code&gt;CVE-2026-31431&lt;/code&gt; no es que una aplicación se cierre, sino que existe un problema de límite de permisos en la ruta de copia de archivos del kernel Linux.
Da a código sin privilegios una oportunidad de tocar rutas de escritura con mayor privilegio, por lo que merece atención especial en entornos de contenedores y multi-tenant.&lt;/p&gt;
&lt;p&gt;Al manejar este tipo de vulnerabilidad, las dos acciones más importantes son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;seguir cuanto antes los parches de kernel de tu distribución o proveedor cloud;&lt;/li&gt;
&lt;li&gt;antes de desplegar parches, restringir código no confiable, contenedores privilegiados y montajes sensibles del host.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para escritorios personales, quizá no sea un motivo de pánico inmediato.
Pero para equipos que operan plataformas de contenedores, CI/CD, sandboxes y hosts compartidos, debe tratarse como una actualización de seguridad de kernel de alta prioridad.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.bugcrowd.com/blog/what-we-know-about-copy-fail-cve-2026-31431/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Bugcrowd: What We Know About Copy Fail CVE-2026-31431&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://copy.fail/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Explicación oficial de Copy Fail&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Resumen de novedades de Linux Kernel 7.0</title>
        <link>https://knightli.com/es/2026/05/01/linux-kernel-7-0-new-features/</link>
        <pubDate>Fri, 01 May 2026 14:46:07 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/linux-kernel-7-0-new-features/</guid>
        <description>&lt;p&gt;Los números de versión del kernel Linux nunca han seguido versionado semántico. Un salto de versión mayor suele tener más que ver con el ritmo de mantenimiento continuo del proyecto.
En el mensaje de lanzamiento, Linus Torvalds también describió 7.0 como una versión normal: la última semana estuvo compuesta sobre todo por pequeñas correcciones en red, código de arquitectura, herramientas, selftests y drivers.&lt;/p&gt;
&lt;p&gt;Lo que realmente merece atención es el conjunto de cambios incrementales.
Linux 7.0 cubre sistemas de archivos, gestión de memoria, soporte de hardware, aislamiento de seguridad, soporte de Rust y limpieza de drivers.&lt;/p&gt;
&lt;h2 id=&#34;sistemas-de-archivos-xfs-ext4-y-ntfs3-cambiaron&#34;&gt;Sistemas de archivos: XFS, EXT4 y NTFS3 cambiaron
&lt;/h2&gt;&lt;p&gt;Los sistemas de archivos son una de las áreas más visibles de Linux 7.0.&lt;/p&gt;
&lt;p&gt;XFS introduce capacidades relacionadas con autorreparación.
Junto con un nuevo mecanismo genérico de reporte de errores de sistemas de archivos, los sistemas de archivos pueden reportar corrupción de metadatos y errores de I/O al espacio de usuario de una forma más unificada.
Con soporte adecuado de servicios del sistema, XFS puede manejar automáticamente algunos flujos de reparación mientras el sistema de archivos sigue montado.
Esto no significa que cualquier problema de corrupción de disco pueda resolverse sin dolor, pero para servidores y sistemas de larga ejecución, la ruta de detección y reparación queda más completa.&lt;/p&gt;
&lt;p&gt;EXT4 continúa mejorando el rendimiento de escrituras directas concurrentes.
Si una máquina suele ejecutar copias de seguridad, builds, descargas, bases de datos o tareas de logs que escriben en disco al mismo tiempo, estas optimizaciones deberían volver más estable la ruta de escrituras concurrentes.
No es el tipo de cambio que todo usuario de escritorio notará de inmediato, pero importa en escenarios de I/O pesada.&lt;/p&gt;
&lt;p&gt;NTFS3 también recibe una actualización mayor del driver, incluida asignación diferida, operaciones de archivo basadas en iomap y mejor readahead para escaneos de directorios grandes.
Si accedes a menudo a particiones Windows o discos NTFS externos desde Linux, estas mejoras merecen atención.&lt;/p&gt;
&lt;p&gt;Además, exFAT mejora las lecturas secuenciales multi-cluster, lo que puede acelerar la lectura secuencial en algunos dispositivos con clusters pequeños.&lt;/p&gt;
&lt;h2 id=&#34;memoria-y-swap-mejor-comportamiento-bajo-presión-de-memoria&#34;&gt;Memoria y swap: mejor comportamiento bajo presión de memoria
&lt;/h2&gt;&lt;p&gt;Linux 7.0 continúa el trabajo de limpieza del subsistema swap de versiones recientes.
Un foco es mejorar la ruta para leer páginas de vuelta desde swap, especialmente cuando varios procesos comparten las mismas páginas expulsadas.
En esos casos, el throughput debería mejorar.&lt;/p&gt;
&lt;p&gt;Para usuarios de escritorio, quizá no se sienta como si el sistema se volviera más rápido de golpe.
Pero en sistemas con poca memoria, hosts densos de contenedores, servicios tipo Redis con persistencia activada o configuraciones zram respaldadas por disco, estos cambios pueden reducir jitter bajo presión de memoria.&lt;/p&gt;
&lt;p&gt;Las rutas de zram también reciben optimizaciones.
Antes, en algunos casos, el kernel necesitaba descomprimir páginas zram antes de escribirlas en un dispositivo de respaldo.
La nueva ruta puede escribir datos comprimidos directamente, reduciendo procesamiento innecesario.&lt;/p&gt;
&lt;h2 id=&#34;cpu-y-rendimiento-intel-tsx-auto-hilos-y-operaciones-de-archivo-más-rápidas&#34;&gt;CPU y rendimiento: Intel TSX auto, hilos y operaciones de archivo más rápidas
&lt;/h2&gt;&lt;p&gt;Linux 7.0 ajusta la política predeterminada para Intel TSX.
Por problemas de seguridad pasados, TSX estaba desactivado por defecto en muchos procesadores.
El kernel ahora usa una política &lt;code&gt;auto&lt;/code&gt; más precisa: las CPU afectadas lo mantienen desactivado, mientras las no afectadas o adecuadas pueden activarlo automáticamente.&lt;/p&gt;
&lt;p&gt;Esto puede ayudar a algunas cargas multihilo, especialmente aplicaciones que dependen de extensiones de sincronización transaccional.
No es un interruptor universal de aceleración; el beneficio real sigue dependiendo del modelo de CPU y de si la aplicación usa la función.&lt;/p&gt;
&lt;p&gt;Linux 7.0 también incluye optimizaciones para asignación de PID, creación y destrucción de hilos, y rutas de apertura/cierre de archivos.
Estas optimizaciones normalmente no se convierten en titulares por sí solas, pero se acumulan en pequeñas mejoras de respuesta del sistema y servicios de alta concurrencia.&lt;/p&gt;
&lt;h2 id=&#34;soporte-de-hardware-nuevas-plataformas-y-mejoras-de-dispositivos-existentes&#34;&gt;Soporte de hardware: nuevas plataformas y mejoras de dispositivos existentes
&lt;/h2&gt;&lt;p&gt;Linux 7.0 continúa una gran cantidad de trabajo de habilitación de hardware.
Estas actualizaciones suelen caer en dos grupos: preparación para plataformas que aún no están ampliamente disponibles y mejoras para dispositivos que ya están en manos de usuarios.&lt;/p&gt;
&lt;p&gt;Para plataformas nuevas, Linux 7.0 incluye más preparación para Intel Nova Lake, Intel Crescent Island, nueva IP gráfica de AMD y AMD Zen 6.
Estos cambios quizá no importen a usuarios comunes de inmediato, pero determinan si el nuevo hardware podrá recibir soporte en mainline más rápido después del lanzamiento.&lt;/p&gt;
&lt;p&gt;En ARM64 y computadoras de placa única, la decodificación de video por hardware H.264/H.265 para Rockchip RK3588/RK3576 entra en el alcance de soporte mainline.
Esto significa que dispositivos como Orange Pi 5 y Radxa ROCK 5 ya no necesitan depender por completo de kernels BSP del fabricante para decodificación por hardware.&lt;/p&gt;
&lt;p&gt;También hay muchas mejoras detalladas para portátiles y periféricos:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASUS WMI mejora soporte de retroiluminación, iluminación de teclado y hotkeys de ventilador para modelos ROG y TUF.&lt;/li&gt;
&lt;li&gt;HP WMI agrega control manual de ventilador para algunos modelos Victus y corrige luces indicadoras de audio.&lt;/li&gt;
&lt;li&gt;Lenovo WMI expone más información de monitoreo HWMON para dispositivos Legion.&lt;/li&gt;
&lt;li&gt;El driver gráfico Intel Xe expone más sensores de temperatura.&lt;/li&gt;
&lt;li&gt;Las GPU discretas Intel Arc serie B pueden entrar en estados PCIe de ahorro de energía más profundos.&lt;/li&gt;
&lt;li&gt;Las guitarras Bluetooth de Rock Band 4 y el teclado Bluetooth Logitech K980 reciben mejor soporte del kernel.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada cambio es pequeño por separado, pero para usuarios de portátiles, dispositivos de juego, placas de desarrollo y periféricos, un soporte mainline más completo facilita el mantenimiento futuro de las distribuciones.&lt;/p&gt;
&lt;h2 id=&#34;seguridad-y-aislamiento-io_uring-puede-usar-filtrado-bpf&#34;&gt;Seguridad y aislamiento: io_uring puede usar filtrado BPF
&lt;/h2&gt;&lt;p&gt;Linux 7.0 agrega soporte de filtrado BPF a &lt;code&gt;io_uring&lt;/code&gt;.
Esto importa para contenedores, sandboxes y entornos con requisitos altos de seguridad.&lt;/p&gt;
&lt;p&gt;En el pasado, algunos administradores desactivaban &lt;code&gt;io_uring&lt;/code&gt; por completo para reducir superficie de ataque.
Con filtrado BPF, ahora pueden restringir operaciones permitidas de forma más precisa, en lugar de elegir solo entre totalmente habilitado o totalmente deshabilitado.&lt;/p&gt;
&lt;p&gt;Esto no hace que los riesgos de &lt;code&gt;io_uring&lt;/code&gt; desaparezcan automáticamente, pero da a administradores y frameworks de runtime una herramienta de aislamiento más controlable.&lt;/p&gt;
&lt;h2 id=&#34;el-soporte-de-rust-ya-no-es-solo-una-etiqueta-experimental&#34;&gt;El soporte de Rust ya no es solo una etiqueta experimental
&lt;/h2&gt;&lt;p&gt;En Linux 7.0, el estado de Rust para Linux se vuelve más estable.
Esto no significa que el kernel vaya a reescribirse masivamente en Rust, ni que C esté siendo reemplazado.&lt;/p&gt;
&lt;p&gt;Más precisamente, la infraestructura para Rust dentro del kernel ha entrado en una etapa más formal.
Futuros drivers, subsistemas o parte de código sensible a seguridad podrán elegir Rust donde encaje.
Es una ruta gradual: estabilizar primero interfaces, sistema de build, documentación y proceso de mantenimiento, y luego dejar que el código real crezca con el tiempo.&lt;/p&gt;
&lt;h2 id=&#34;eliminación-de-funcionalidad-antigua-desaparece-laptop_mode&#34;&gt;Eliminación de funcionalidad antigua: desaparece laptop_mode
&lt;/h2&gt;&lt;p&gt;Linux 7.0 elimina &lt;code&gt;laptop_mode&lt;/code&gt;.
Era una función de ahorro de energía de larga historia, diseñada sobre todo para la era de portátiles con disco duro, reduciendo despertares de disco para ahorrar energía.&lt;/p&gt;
&lt;p&gt;Los portátiles modernos son mayoritariamente SSD, y las rutas de reclaim de memoria, dispositivos de bloque y sistemas de archivos del kernel han cambiado mucho.
Mantener este mecanismo antiguo aumenta el costo de mantenimiento, y su cobertura de pruebas no era ideal.
Eliminarlo reduce el impacto de código viejo sobre rutas modernas.&lt;/p&gt;
&lt;h2 id=&#34;teclas-relacionadas-con-ia-preparación-para-una-nueva-generación-de-interacción-de-teclado&#34;&gt;Teclas relacionadas con IA: preparación para una nueva generación de interacción de teclado
&lt;/h2&gt;&lt;p&gt;Linux 7.0 agrega varios nuevos keycodes HID para interacción contextual con IA, como actuar sobre contenido seleccionado, insertar contenido generado por contexto e iniciar consultas contextuales.&lt;/p&gt;
&lt;p&gt;Esto no es funcionalidad de IA integrada en el kernel.
Se parece más a reservar definiciones de eventos de entrada para futuros teclados y periféricos, de modo que entornos de escritorio, aplicaciones o herramientas de fabricantes puedan reconocer esas teclas.
Lo que hagan realmente seguirá dependiendo de la distribución, el entorno de escritorio y la integración a nivel de aplicación.&lt;/p&gt;
&lt;h2 id=&#34;conviene-actualizar-de-inmediato&#34;&gt;¿Conviene actualizar de inmediato?
&lt;/h2&gt;&lt;p&gt;Si usas una distribución rolling, Linux 7.0 probablemente llegará de forma natural mediante actualizaciones del sistema.
Si usas una distribución nueva como Ubuntu 26.04 LTS, 7.0 también podría aparecer como versión de kernel predeterminada o principal.&lt;/p&gt;
&lt;p&gt;Pero si tu máquina es un servidor de producción, NAS, host de virtualización o depende de drivers cerrados y módulos propietarios de kernel, no actualices manualmente solo porque el número de versión pasó a 7.0.
Un enfoque más seguro es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;esperar a que la distribución proporcione paquetes oficiales de kernel;&lt;/li&gt;
&lt;li&gt;comprobar compatibilidad de tarjetas gráficas, tarjetas de red, ZFS, VirtualBox, VMware y módulos DKMS;&lt;/li&gt;
&lt;li&gt;probar primero en una máquina de pruebas o entorno con snapshot;&lt;/li&gt;
&lt;li&gt;observar las versiones puntuales 7.0.x.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Según el directorio v7.x de kernel.org, ya se publicaron 7.0.1, 7.0.2 y 7.0.3.
Si planeas compilar o probar manualmente, prefiere la última versión estable 7.0.x en lugar de enfocarte solo en el tarball inicial 7.0.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Linux Kernel 7.0 no es una versión que reescriba todo solo porque cambió el número mayor.
Se parece más a una actualización regular amplia del kernel: los sistemas de archivos son más confiables, swap e I/O siguen mejorando, el soporte de hardware avanza, y Rust, el aislamiento de &lt;code&gt;io_uring&lt;/code&gt; y las definiciones de entrada HID completan infraestructura necesaria para la evolución a largo plazo.&lt;/p&gt;
&lt;p&gt;Para usuarios comunes de escritorio, los cambios más prácticos quizá vengan del soporte de hardware, drivers gráficos, ahorro de energía y reparación de sistemas de archivos.
Para servidores y desarrolladores, el reporte de errores y autorreparación de XFS, el filtrado BPF de &lt;code&gt;io_uring&lt;/code&gt;, la optimización de swap y el soporte de nuevas plataformas merecen más atención.&lt;/p&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.kernel.org/pub/linux/kernel/v7.x/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;kernel.org: directorio Linux kernel v7.x&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.spinics.net/lists/kernel/msg6151145.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Espejo del mensaje de lanzamiento de Linux 7.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.phoronix.com/news/Linux-7.0-Released&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Phoronix: Linux 7.0 Released With New Hardware Support, Optimizations &amp;amp; Self-Healing XFS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.omgubuntu.co.uk/2026/04/linux-7-0-kernel-features&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;OMG! Ubuntu: Linux 7.0 kernel brings faster swap &amp;amp; Rock Band 4 controller support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>hackingtool: usos, riesgos y l铆mites de aprendizaje de un kit de seguridad todo en uno</title>
        <link>https://knightli.com/es/2026/05/01/hackingtool-security-toolkit-overview/</link>
        <pubDate>Fri, 01 May 2026 03:45:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/05/01/hackingtool-security-toolkit-overview/</guid>
        <description>&lt;p&gt;&lt;code&gt;hackingtool&lt;/code&gt; es un proyecto de kit de herramientas (toolkit) que reúne muchas herramientas de seguridad en un solo lugar.&lt;/p&gt;
&lt;p&gt;Según el README, cubre una amplia gama de áreas, incluyendo herramientas de anonimato, recopilación de información, análisis de vulnerabilidades, ataques web, redes inalámbricas, forense, payloads, ingeniería inversa, DDoS, administración remota y herramientas relacionadas con phishing. Es más bien un navegador de herramientas de seguridad que una herramienta pequeña para un problema específico.&lt;/p&gt;
&lt;p&gt;Los proyectos como este son fáciles de malinterpretar, por lo que el límite debe establecerse primero: las herramientas de seguridad solo deben usarse en entornos autorizados, laboratorios, polígonos (ranges), CTFs o en sus propios sistemas. No las use contra objetivos no autorizados. Este artículo solo explica el posicionamiento del proyecto y las rutas de aprendizaje. No proporciona pasos de ataque, comandos de abuso ni orientación para eludir (bypass guidance).&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;qué-problema-resuelve&#34;&gt;Qué Problema Resuelve
&lt;/h2&gt;&lt;p&gt;Cuando las personas comienzan a aprender sobre ciberseguridad, a menudo se enfrentan a un problema: hay demasiadas herramientas y no está claro por dónde empezar.&lt;/p&gt;
&lt;p&gt;Puede haber escuchado sobre:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Herramientas de recopilación de información&lt;/li&gt;
&lt;li&gt;Herramientas de escaneo de vulnerabilidades web&lt;/li&gt;
&lt;li&gt;Herramientas de auditoría de contraseñas&lt;/li&gt;
&lt;li&gt;Herramientas de prueba de redes inalámbricas&lt;/li&gt;
&lt;li&gt;Herramientas de análisis forense&lt;/li&gt;
&lt;li&gt;Herramientas de ingeniería inversa&lt;/li&gt;
&lt;li&gt;Herramientas de generación de payloads&lt;/li&gt;
&lt;li&gt;Herramientas de anonimato y proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada categoría por sí sola contiene muchos proyectos. El problema es que los principiantes a menudo no pueden juzgar qué hacen, qué escenarios les convienen y dónde residen los riesgos.&lt;/p&gt;
&lt;p&gt;El valor de &lt;code&gt;hackingtool&lt;/code&gt; es que agrupa estas herramientas por categoría, ayudando a los estudiantes a ver primero un mapa aproximado del ecosistema de herramientas de seguridad.&lt;/p&gt;
&lt;p&gt;No es necesariamente el mejor método de instalación para cada herramienta, ni es necesariamente adecuado para entornos de producción. Pero es útil para construir una comprensión de primer nivel: la ciberseguridad no es una herramienta, sino un conjunto de objetivos, métodos y límites.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;ventajas-de-un-toolkit&#34;&gt;Ventajas de un Toolkit
&lt;/h2&gt;&lt;p&gt;Este tipo de colección tiene ventajas obvias.&lt;/p&gt;
&lt;p&gt;Primero, reduce el costo de búsqueda para los principiantes.&lt;/p&gt;
&lt;p&gt;No necesitas conocer el nombre de cada herramienta al principio. A través de categorías, puedes entender primero las principales direcciones en el aprendizaje de seguridad.&lt;/p&gt;
&lt;p&gt;Segundo, es adecuado para la configuración de laboratorios.&lt;/p&gt;
&lt;p&gt;Si estás aprendiendo en una máquina virtual local, en Kali, en un entorno de laboratorio Ubuntu o en un rango CTF, un toolkit puede ayudarte a llenar rápidamente las herramientas comunes.&lt;/p&gt;
&lt;p&gt;Tercero, facilita la comparación de herramientas similares.&lt;/p&gt;
&lt;p&gt;La misma dirección a menudo tiene múltiples herramientas. Information gathering, Web testing, password auditing y forensic analysis tienen todas implementaciones y escenarios adecuados diferentes. Agruparlas ayuda a los principiantes a compararlas horizontalmente.&lt;/p&gt;
&lt;p&gt;Cuarto, te ayuda a entender la cadena de seguridad.&lt;/p&gt;
&lt;p&gt;Las pruebas de seguridad reales no son &amp;ldquo;ejecutar una herramienta y terminar&amp;rdquo;. Generalmente involucran la identificación de activos, la recopilación de información, la validación de vulnerabilidades, la evaluación de impacto, el consejo de remediación y la redacción de informes. Las categorías de herramientas te ayudan a entender qué capacidades se corresponden aproximadamente con cada paso.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;riesgos-a-considerar&#34;&gt;Riesgos a Considerar
&lt;/h2&gt;&lt;p&gt;Cuanto más grande sea el toolkit, más seriamente debe abordar el riesgo.&lt;/p&gt;
&lt;p&gt;Primero, la calidad de las herramientas no siempre es consistente.&lt;/p&gt;
&lt;p&gt;Un proyecto de colección puede incluir muchas herramientas de terceros. Su estado de mantenimiento, calidad de código, seguridad de dependencias, compatibilidad y licencias pueden diferir enormemente. No asuma que todas las herramientas son seguras y fiables.&lt;/p&gt;
&lt;p&gt;Segundo, los scripts de instalación pueden introducir riesgo en la cadena de suministro.&lt;/p&gt;
&lt;p&gt;Las herramientas de seguridad a menudo requieren altos privilegios, acceso a la red, dependencias del sistema y descargas externas. Antes de ejecutar cualquier script de instalación, lea su contenido, confirme que la fuente sea confiable e idealmente pruébelo en un entorno aislado.&lt;/p&gt;
&lt;p&gt;Tercero, algunas herramientas tienen propiedades ofensivas obvias.&lt;/p&gt;
&lt;p&gt;El README menciona áreas como DDoS, payloads, phishing y acceso remoto. Estas herramientas pueden utilizarse en laboratorios autorizados para aprender principios de ataque y defensa, pero abusarlas contra objetivos reales crea serios problemas legales y éticos.&lt;/p&gt;
&lt;p&gt;Cuarto, las herramientas no pueden reemplazar los fundamentos.&lt;/p&gt;
&lt;p&gt;Si solo puede ejecutar herramientas pero no entiende los protocolos de red, los principios del sistema operativo, la seguridad web, los modelos de permisos y el análisis de registros, puede tomar fácilmente decisiones incorrectas. La salida de las herramientas también puede contener falsos positivos y falsos negativos.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;cómo-aprender-con-él&#34;&gt;Cómo aprender con él
&lt;/h2&gt;&lt;p&gt;Si quieres usar un proyecto como este para aprender sobre seguridad, es mejor dividir el aprendizaje por temas en lugar de instalarlo todo a la vez.&lt;/p&gt;
&lt;p&gt;Puedes empezar con:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conceptos básicos de Networking: IP, puertos, DNS, HTTP, TLS&lt;/li&gt;
&lt;li&gt;Conceptos básicos de Linux: permisos, procesos, file systems, service management&lt;/li&gt;
&lt;li&gt;Seguridad Web: autenticación, autorización, input validation, sesiones, vulnerabilidades comunes&lt;/li&gt;
&lt;li&gt;Recolección de información: asset identification y organización de información pública&lt;/li&gt;
&lt;li&gt;Validación de vulnerabilidades: solo dentro de rangos locales o sistemas autorizados&lt;/li&gt;
&lt;li&gt;Análisis forense: logs, discos, memoria y evidencia de tráfico&lt;/li&gt;
&lt;li&gt;Perspectiva defensiva: detección, hardening, patching y reporting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Esta es una forma más estable de aprender.&lt;/p&gt;
&lt;p&gt;Las herramientas deben servir al conocimiento, no guiar la ruta de aprendizaje en lugar del conocimiento.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;escenarios-adecuados&#34;&gt;Escenarios Adecuados
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;hackingtool&lt;/code&gt; es más adecuado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Principiantes que aprenden categorías de herramientas de seguridad&lt;/li&gt;
&lt;li&gt;Preparar herramientas para entornos CTF o de práctica (range)&lt;/li&gt;
&lt;li&gt;Construir laboratorios aislados&lt;/li&gt;
&lt;li&gt;Aprender ecosistemas de herramientas en diferentes áreas de seguridad&lt;/li&gt;
&lt;li&gt;Estudiar flujos de trabajo de pruebas de seguridad&lt;/li&gt;
&lt;li&gt;Comparar el uso de herramientas similares&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No es adecuado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Escanear o atacar objetivos no autorizados&lt;/li&gt;
&lt;li&gt;Instalar herramientas aleatoriamente en máquinas de producción&lt;/li&gt;
&lt;li&gt;Tratar la salida de la herramienta directamente como conclusiones de seguridad&lt;/li&gt;
&lt;li&gt;Ejecutar scripts con altos privilegios sin leerlos&lt;/li&gt;
&lt;li&gt;Usar herramientas ofensivas en entornos de red reales&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;por-qué-no-se-recomienda-instalar-todo-con-un-solo-clic&#34;&gt;Por qué no se recomienda instalar todo con un solo clic
&lt;/h2&gt;&lt;p&gt;Muchos proyectos de toolkit ofrecen la idea de una instalación con un solo clic, pero debes tener cuidado en la práctica.&lt;/p&gt;
&lt;p&gt;Los problemas incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Conflictos de dependencias&lt;/li&gt;
&lt;li&gt;Entorno de sistema contaminado&lt;/li&gt;
&lt;li&gt;Fuentes de descarga sin control&lt;/li&gt;
&lt;li&gt;Instalar muchas herramientas que no sabes usar&lt;/li&gt;
&lt;li&gt;Dificultad para mantener y actualizar&lt;/li&gt;
&lt;li&gt;Dificultad para auditar lo que hace cada herramienta&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Un mejor enfoque es instalar mientras se aprende por tema.&lt;/p&gt;
&lt;p&gt;Si hoy estás aprendiendo recopilación de información (information gathering), instala solo las herramientas relacionadas. Cuando estudies seguridad web (Web security) la próxima semana, añade herramientas de prueba web (Web testing tools). Cuando hagas un experimento forense, prepara herramientas forenses. Esto mantiene el entorno más limpio y el objetivo de aprendizaje más claro.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;cómo-usar-dichos-repositorios-de-forma-segura&#34;&gt;Cómo Usar Dichos Repositorios de Forma Segura
&lt;/h2&gt;&lt;p&gt;Primero, usa un entorno aislado.&lt;/p&gt;
&lt;p&gt;Usa una máquina virtual, un contenedor o una máquina de laboratorio dedicada. No contamines directamente tu sistema de trabajo principal.&lt;/p&gt;
&lt;p&gt;Segundo, conéctate solo a objetivos autorizados.&lt;/p&gt;
&lt;p&gt;Los objetivos pueden ser rangos locales, plataformas CTF, servicios de prueba que hayas construido tú mismo o ámbitos de prueba de seguridad claramente autorizados.&lt;/p&gt;
&lt;p&gt;Tercero, lee los scripts antes de ejecutarlos.&lt;/p&gt;
&lt;p&gt;No copies comandos de un README y los ejecutes a ciegas. Primero inspecciona los scripts de instalación, las fuentes de dependencia, los requisitos de permisos y el comportamiento de acceso a la red.&lt;/p&gt;
&lt;p&gt;Cuarto, registra el proceso del experimento.&lt;/p&gt;
&lt;p&gt;El aprendizaje de seguridad no es solo ejecutar herramientas. Registra las entradas (inputs), salidas (outputs), el razonamiento, las causas de falsos positivos y las sugerencias de remediación para mejorar de verdad.&lt;/p&gt;
&lt;p&gt;Quinto, aprende la perspectiva defensiva.&lt;/p&gt;
&lt;p&gt;Por cada superficie de ataque que estudies, comprende también la defensa correspondiente: cómo detectarlo, cómo endurecer los sistemas, cómo preservar la evidencia y cómo redactar un informe.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;diferencia-con-kali-linux&#34;&gt;Diferencia con Kali Linux
&lt;/h2&gt;&lt;p&gt;Kali Linux es una distribución para pruebas de penetración e investigación de seguridad. Ya incluye y mantiene muchas herramientas de seguridad.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;hackingtool&lt;/code&gt; es más bien una colección de instalación y clasificación. Puede ayudarte a comprender el ecosistema de herramientas, pero no es una distribución de seguridad completa y no es equivalente al sistema de mantenimiento de Kali.&lt;/p&gt;
&lt;p&gt;Si eres principiante, Kali, Parrot, o una máquina virtual Ubuntu con un entorno de rango es generalmente más estable que instalar un toolkit con un solo clic en tu máquina principal.&lt;/p&gt;
&lt;p&gt;Si ya tienes tu propio entorno de laboratorio, &lt;code&gt;hackingtool&lt;/code&gt; se puede usar como referencia de índice de herramientas.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;límites-de-uso&#34;&gt;Límites de Uso
&lt;/h2&gt;&lt;p&gt;Los límites son muy importantes para las herramientas de seguridad.&lt;/p&gt;
&lt;p&gt;Los escenarios legítimos incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tu propio entorno de laboratorio&lt;/li&gt;
&lt;li&gt;CTFs y rangos&lt;/li&gt;
&lt;li&gt;Pruebas de seguridad autorizadas por la empresa&lt;/li&gt;
&lt;li&gt;Experimentos de curso&lt;/li&gt;
&lt;li&gt;Investigación local y validación defensiva&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los escenarios inapropiados incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Escaneo no autorizado de objetivos públicos&lt;/li&gt;
&lt;li&gt;Intentos de vulnerabilidad contra sitios web de terceros&lt;/li&gt;
&lt;li&gt;Phishing, robo de cuentas o eludir el control de acceso&lt;/li&gt;
&lt;li&gt;Interferir con la disponibilidad del servicio&lt;/li&gt;
&lt;li&gt;Recopilar o usar datos de otras personas sin permiso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El estándar es simple: sin autorización clara, no pruebes.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;usuarios-adecuados&#34;&gt;Usuarios adecuados
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;hackingtool&lt;/code&gt; es adecuado para personas con objetivos de aprendizaje, no para personas que solo quieren &amp;ldquo;hacer clic una vez y hackear algo&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Es adecuado para:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Principiantes en ciberseguridad&lt;/li&gt;
&lt;li&gt;Aprendices de CTF&lt;/li&gt;
&lt;li&gt;Constructores de laboratorios de seguridad&lt;/li&gt;
&lt;li&gt;Personas que quieren entender las categorías de herramientas&lt;/li&gt;
&lt;li&gt;Personas que quieren mapear el conocimiento de ataque-defensa a herramientas&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si aún no estás familiarizado con Linux, los fundamentos de networking, los conceptos básicos de Web y los conceptos de permisos, aprende eso primero antes de usar este tipo de kit de herramientas. De lo contrario, puedes recordar comandos sin entender los resultados.&lt;/p&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;referencias&#34;&gt;Referencias
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/Z4nzu/hackingtool&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Z4nzu/hackingtool&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;false&lt;/p&gt;
&lt;h2 id=&#34;pensamiento-final&#34;&gt;Pensamiento Final
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;hackingtool&lt;/code&gt; puede ser un punto de entrada al ecosistema de herramientas de ciberseguridad, pero no debe tratarse como una caja de herramientas de ataque sin límites.&lt;/p&gt;
&lt;p&gt;El aprendizaje de seguridad valioso significa comprender principios, validar riesgos, aprender defensas y convertir la salida de la herramienta en conclusiones de seguridad explicables y reparables dentro de entornos autorizados.
false&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Qué hace auto-editor: cortar silencios automáticamente y exportar a Premiere o Resolve</title>
        <link>https://knightli.com/es/2026/04/23/auto-editor-auto-cut-silence-premiere-resolve-workflow/</link>
        <pubDate>Thu, 23 Apr 2026 13:31:27 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/04/23/auto-editor-auto-cut-silence-premiere-resolve-workflow/</guid>
        <description>&lt;p&gt;Lo que más tiempo consume en muchos videos no son transiciones, color ni subtítulos. Es ver un archivo largo de principio a fin y quitar manualmente las partes donde nadie habla, nada se mueve y no ocurre nada útil.&lt;/p&gt;
&lt;p&gt;Ese es el problema que &lt;code&gt;auto-editor&lt;/code&gt; intenta resolver. No es una app visual de edición tradicional. Es una herramienta de línea de comandos que analiza video o audio y luego corta automáticamente secciones silenciosas y segmentos de baja actividad para terminar antes el primer rough cut.&lt;/p&gt;
&lt;p&gt;Es especialmente útil cuando el material fuente es:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grabaciones de pantalla&lt;/li&gt;
&lt;li&gt;tutoriales&lt;/li&gt;
&lt;li&gt;podcasts o talking-head&lt;/li&gt;
&lt;li&gt;replays largos de livestreams&lt;/li&gt;
&lt;li&gt;entrevistas que necesitan un rough cut antes de edición fina&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;cuál-es-su-valor-central&#34;&gt;Cuál es su valor central
&lt;/h2&gt;&lt;p&gt;La idea principal de &lt;code&gt;auto-editor&lt;/code&gt; se resume así:&lt;/p&gt;
&lt;p&gt;automatizar el primer pase aburrido y devolver el resultado al humano.&lt;/p&gt;
&lt;p&gt;El README oficial enfatiza que elimina &amp;ldquo;dead space&amp;rdquo;, especialmente silencio. En videos largos, esa suele ser la parte más repetitiva del proceso.&lt;/p&gt;
&lt;p&gt;Uso básico:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor path/to/your/video.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El resultado puede entenderse como una primera ronda de filtrado. No toma decisiones creativas finales por ti. Limpia las partes que obviamente contienen poca información útil.&lt;/p&gt;
&lt;h2 id=&#34;no-solo-corta-por-silencio&#34;&gt;No solo corta por silencio
&lt;/h2&gt;&lt;p&gt;Cuando la gente oye &amp;ldquo;edición automática&amp;rdquo;, asume que solo detecta silencio.&lt;/p&gt;
&lt;p&gt;Pero &lt;code&gt;auto-editor&lt;/code&gt; soporta más de un método:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;audio&lt;/code&gt;: juzga secciones por volumen&lt;/li&gt;
&lt;li&gt;&lt;code&gt;motion&lt;/code&gt;: juzga secciones por movimiento visual&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --edit motion:threshold&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.02
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto importa porque no se limita a videos donde la única regla es &amp;ldquo;cortar cuando nadie habla&amp;rdquo;. También sirve cuando la señal importante es actividad visual.&lt;/p&gt;
&lt;p&gt;Los ejemplos oficiales muestran que puedes combinar métodos, como audio y movimiento juntos. Eso permite expresar reglas más cercanas a edición real.&lt;/p&gt;
&lt;h2 id=&#34;--margin-importa-más-de-lo-que-parece&#34;&gt;&lt;code&gt;--margin&lt;/code&gt; importa más de lo que parece
&lt;/h2&gt;&lt;p&gt;La forma más fácil de que un rough cut automático se sienta mal no es fallar al quitar silencio, sino cortar demasiado agresivamente.&lt;/p&gt;
&lt;p&gt;Si se corta la primera palabra de una frase o el final de cada línea queda demasiado brusco, el resultado se siente mecánico. &lt;code&gt;auto-editor&lt;/code&gt; ofrece &lt;code&gt;--margin&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Puedes entenderlo como añadir un pequeño buffer alrededor de las secciones que se recortarían. En los ejemplos oficiales, el valor predeterminado es &lt;code&gt;0.2s&lt;/code&gt;, dejando algo de padding alrededor de cortes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --margin 0.2sec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --margin 0.3s,1.5sec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esta opción suele determinar si el resultado parece un corte automático duro o un primer pase razonablemente humano.&lt;/p&gt;
&lt;h2 id=&#34;es-una-herramienta-de-primer-pase-no-reemplazo-completo-de-nle&#34;&gt;Es una herramienta de primer pase, no reemplazo completo de NLE
&lt;/h2&gt;&lt;p&gt;Este es el punto más importante.&lt;/p&gt;
&lt;p&gt;Se comporta más como un rough-cutter automatizado que como un editor no lineal completo. Sus fortalezas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;procesar metraje largo rápido&lt;/li&gt;
&lt;li&gt;automatizar eliminación repetitiva de dead space&lt;/li&gt;
&lt;li&gt;comprimir tramos de bajo valor antes de edición real&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pero cuando necesitas estas cosas, probablemente volverás a un editor tradicional:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ritmo fino&lt;/li&gt;
&lt;li&gt;elegir manualmente los mejores momentos&lt;/li&gt;
&lt;li&gt;subtítulos, transiciones y B-roll&lt;/li&gt;
&lt;li&gt;color, audio y empaquetado final&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El marco realista no es &amp;ldquo;ya no necesitas Premiere o Resolve&amp;rdquo;, sino &amp;ldquo;deja que &lt;code&gt;auto-editor&lt;/code&gt; haga primero el trabajo repetitivo y luego termina en un editor real&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;puede-renderizar-directamente-o-exportar-timelines&#34;&gt;Puede renderizar directamente o exportar timelines
&lt;/h2&gt;&lt;p&gt;Si solo quieres una versión rápida con dead space eliminado, puede renderizar media directamente. Pero si planeas seguir editando, los docs soportan exportar timelines a editores comunes.&lt;/p&gt;
&lt;p&gt;El README lista:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Adobe Premiere Pro: &lt;code&gt;--export premiere&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;DaVinci Resolve: &lt;code&gt;--export resolve&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Final Cut Pro: &lt;code&gt;--export final-cut-pro&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Shotcut: &lt;code&gt;--export shotcut&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Kdenlive: &lt;code&gt;--export kdenlive&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;clips individuales: &lt;code&gt;--export clip-sequence&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --export premiere
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Eso lo vuelve una herramienta frontend de procesamiento, no un workflow cerrado.&lt;/p&gt;
&lt;h2 id=&#34;también-soporta-reglas-manuales&#34;&gt;También soporta reglas manuales
&lt;/h2&gt;&lt;p&gt;Muchas herramientas automáticas frustran cuando toman una mala decisión.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;auto-editor&lt;/code&gt; es más flexible. Permite marcar secciones que siempre se cortan o siempre se conservan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--cut-out&lt;/code&gt;: siempre eliminar una sección&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--add-in&lt;/code&gt;: siempre conservar una sección&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --cut-out 0,30sec
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto-editor example.mp4 --add-in 0,30sec
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Así no entregas todo el control al programa. Puedes dejar que las reglas automáticas hagan el grueso y corregir edge cases manualmente.&lt;/p&gt;
&lt;h2 id=&#34;la-recomendación-oficial-de-instalación-ahora-es-el-binario&#34;&gt;La recomendación oficial de instalación ahora es el binario
&lt;/h2&gt;&lt;p&gt;Según la página oficial de instalación, la ruta recomendada hoy no es &lt;code&gt;pip&lt;/code&gt;, sino binarios precompilados desde GitHub Releases.&lt;/p&gt;
&lt;p&gt;Proceso aproximado:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Descarga el binario de tu plataforma desde Releases.&lt;/li&gt;
&lt;li&gt;Renómbralo a &lt;code&gt;auto-editor&lt;/code&gt; o &lt;code&gt;auto-editor.exe&lt;/code&gt; en Windows.&lt;/li&gt;
&lt;li&gt;Ejecútalo desde la terminal.&lt;/li&gt;
&lt;li&gt;Usa &lt;code&gt;auto-editor --help&lt;/code&gt; para verificar instalación.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;También se mencionan gestores de paquetes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;macOS: &lt;code&gt;brew install auto-editor&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ubuntu o Debian-like: &lt;code&gt;apt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Arch-like: &lt;code&gt;yay -S auto-editor&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La página indica que nuevas versiones ya no se publican en &lt;code&gt;pip&lt;/code&gt;, así que &lt;code&gt;pip install auto-editor&lt;/code&gt; existe, pero no es la ruta preferida.&lt;/p&gt;
&lt;h2 id=&#34;con-yt-dlp-puede-aceptar-urls&#34;&gt;Con yt-dlp puede aceptar URLs
&lt;/h2&gt;&lt;p&gt;Si &lt;code&gt;yt-dlp&lt;/code&gt; está instalado, &lt;code&gt;auto-editor&lt;/code&gt; puede usar URLs como entrada directa.&lt;/p&gt;
&lt;p&gt;Eso es cómodo para descargar material online y luego hacer un rough cut automático. El punto práctico sigue siendo asegurarte de que los derechos y permisos de uso del material estén claros.&lt;/p&gt;
&lt;h2 id=&#34;para-quién-es-mejor&#34;&gt;Para quién es mejor
&lt;/h2&gt;&lt;p&gt;Si tu trabajo depende mucho de ritmo narrativo, lenguaje de plano y juicio editorial humano, &lt;code&gt;auto-editor&lt;/code&gt; no reemplaza la parte difícil.&lt;/p&gt;
&lt;p&gt;Pero puede ahorrar tiempo si haces:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;quitar pausas largas de una grabación de pantalla de una hora&lt;/li&gt;
&lt;li&gt;eliminar silencios de una grabación hablada antes de editar&lt;/li&gt;
&lt;li&gt;primer rough cut de cursos antes de subtítulos&lt;/li&gt;
&lt;li&gt;procesar lotes de materiales largos con estructura similar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Su valor no es editar con mejor gusto que una persona. Es automatizar el primer paso más repetitivo.&lt;/p&gt;
&lt;h2 id=&#34;conclusión&#34;&gt;Conclusión
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;auto-editor&lt;/code&gt; vale la pena no porque convierta edición en una caja negra mágica de AI, sino porque resuelve honestamente un problema estrecho: terminar más rápido el primer rough cut.&lt;/p&gt;
&lt;p&gt;Si lo tratas como herramienta frontend para quitar silencios, recortar dead space y exportar timelines, su rol es claro:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;no decide el gusto editorial final&lt;/li&gt;
&lt;li&gt;encaja muy bien en el primer pase de metraje largo&lt;/li&gt;
&lt;li&gt;complementa editores como Premiere y Resolve en lugar de reemplazarlos&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para tutoriales, screen recordings, talking-head y video largo, no es llamativa. Simplemente ahorra tiempo en trabajo repetitivo.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>rsync --delete Limpieza de directorios explicada y práctica</title>
        <link>https://knightli.com/es/2026/03/29/rsync-delete-explained/</link>
        <pubDate>Sun, 29 Mar 2026 11:00:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/03/29/rsync-delete-explained/</guid>
        <description>&lt;p&gt;El propósito principal de &lt;code&gt;rsync --delete&lt;/code&gt; es eliminar archivos en el directorio de destino que no existen en el directorio de origen, para que ambos lados permanezcan consistentes.&lt;/p&gt;
&lt;p&gt;Los casos de uso típicos incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Limpieza de archivos obsoletos en el lado de destino durante la sincronización&lt;/li&gt;
&lt;li&gt;Vaciar rápidamente un directorio de destino sincronizando desde un directorio de origen vacío&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;sintaxis-básica&#34;&gt;Sintaxis básica
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -a --delete source_dir/ target_dir/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-a&lt;/code&gt;: modo de archivo, conserva permisos, marcas de tiempo y otros atributos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--delete&lt;/code&gt;: elimina archivos adicionales en el lado de destino&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nota importante: si &lt;code&gt;source_dir&lt;/code&gt; termina con &lt;code&gt;/&lt;/code&gt; cambia el comportamiento. Con &lt;code&gt;/&lt;/code&gt;, rsync sincroniza el contenido del directorio; sin &lt;code&gt;/&lt;/code&gt;, sincroniza el directorio mismo.&lt;/p&gt;
&lt;h2 id=&#34;vaciar-rápidamente-un-directorio-de-destino-con-un-origen-vacío&#34;&gt;Vaciar rápidamente un directorio de destino con un origen vacío
&lt;/h2&gt;&lt;p&gt;Si su objetivo es mantener la ruta del directorio pero borrar todo el contenido, use un directorio vacío como fuente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 1) Create an empty directory&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /tmp/empty_dir
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 2) Sync and delete target-side content&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -a --delete /tmp/empty_dir/ /path/to/target_dir/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En escenarios de directorios grandes, esto suele ser más eficiente que eliminar archivos uno por uno y es más fácil de automatizar en scripts.&lt;/p&gt;
&lt;h2 id=&#34;opciones-extendidas-comunes&#34;&gt;Opciones extendidas comunes
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--delete-before&lt;/code&gt;: eliminar antes de la transferencia, lo que puede ser más rápido en algunos casos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--progress&lt;/code&gt;: muestra el progreso de la transferencia y el procesamiento&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo (limpieza de un directorio de registro de Nginx):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rsync -a --delete --progress /tmp/empty_dir/ /var/log/nginx/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;recomendaciones&#34;&gt;Recomendaciones
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Ejecute primero con &lt;code&gt;--dry-run&lt;/code&gt; para verificar el alcance de la eliminación.&lt;/li&gt;
&lt;li&gt;Haga una copia de seguridad del directorio de destino antes de ejecutarlo en producción.&lt;/li&gt;
&lt;li&gt;Para rutas críticas, programe la ejecución durante las horas de menor actividad.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Cómo Git rastrea el permiso ejecutable de archivos (&#43;x)</title>
        <link>https://knightli.com/es/2026/03/29/git-executable-permission-x/</link>
        <pubDate>Sun, 29 Mar 2026 10:00:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/03/29/git-executable-permission-x/</guid>
        <description>&lt;p&gt;En un entorno Linux, Git rastrea el bit ejecutable de un archivo (&lt;code&gt;+x&lt;/code&gt;).
Si desea que un script se conserve como un archivo ejecutable en el repositorio, debe registrar explícitamente ese cambio de permiso en Git.&lt;/p&gt;
&lt;h2 id=&#34;agregar-permiso-ejecutable-a-un-archivo&#34;&gt;Agregar permiso ejecutable a un archivo
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git update-index --chmod&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;+x script.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;chore: mark script.sh as executable&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Este comando realiza el cambio de bit ejecutable para &lt;code&gt;script.sh&lt;/code&gt;. Después de confirmar y enviar, otros usuarios mantendrán el mismo estado de permiso cuando extraigan o clonen el repositorio.&lt;/p&gt;
&lt;h2 id=&#34;eliminar-el-permiso-ejecutable-de-un-archivo&#34;&gt;Eliminar el permiso ejecutable de un archivo
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git update-index --chmod&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-x script.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;chore: remove executable bit from script.sh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;verificar-el-resultado&#34;&gt;Verificar el resultado
&lt;/h2&gt;&lt;p&gt;Utilice los siguientes comandos para verificar los permisos de archivos en su árbol de trabajo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone xxxxxxxxxxxxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l script.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si ve algo como &lt;code&gt;-rwxr-xr-x&lt;/code&gt;, el archivo es ejecutable. Si ve &lt;code&gt;-rw-r--r--&lt;/code&gt;, no es ejecutable.&lt;/p&gt;
&lt;h2 id=&#34;notas&#34;&gt;Notas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;git update-index --chmod=+x/-x&lt;/code&gt; solo actualiza el modo de archivo registrado por Git; no reemplaza los cambios en el contenido del archivo.&lt;/li&gt;
&lt;li&gt;En los flujos de trabajo de equipo, es mejor realizar cambios de solo permiso por separado para facilitar la revisión y el seguimiento.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Práctica de Hugo Shortcode: paquete-archivo (mantenga archivos y archivos adjuntos multilingües en un paquete de una página)</title>
        <link>https://knightli.com/es/2026/03/29/hugo-bundle-file-shortcode/</link>
        <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/29/hugo-bundle-file-shortcode/</guid>
        <description>&lt;p&gt;En sitios multilingües, las publicaciones suelen compartir los mismos archivos adjuntos (por ejemplo, PDF, archivos de configuración o scripts).
Si cada versión de idioma mantiene enlaces de descarga manualmente, la pérdida de enlaces y los archivos perdidos se vuelven comunes con el tiempo.&lt;/p&gt;
&lt;p&gt;Este artículo presenta un código corto de Hugo reutilizable, &amp;ldquo;bundle-file&amp;rdquo;, para resolver este problema.&lt;/p&gt;
&lt;h2 id=&#34;objetivo&#34;&gt;Objetivo
&lt;/h2&gt;&lt;p&gt;Mantenga los archivos de publicaciones y archivos adjuntos multilingües en el mismo directorio del paquete de páginas, por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;content/post/2026/03/09/01/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  index.zh-cn.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  index.zh-tw.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  index.en.md
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  demo.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  script.sh
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto maximiza la reutilización y evita copias duplicadas.
Después de que Hugo cree páginas HTML, todas las versiones de idiomas deben apuntar al mismo archivo adjunto en lugar de archivos duplicados.&lt;/p&gt;
&lt;h2 id=&#34;implementación-de-código-corto&#34;&gt;Implementación de código corto
&lt;/h2&gt;&lt;p&gt;Archivo: &lt;code&gt;layouts/shortcodes/bundle-file.html&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go-html-template&#34; data-lang=&#34;go-html-template&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.Get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$text&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.Get&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.Page.Resources.GetMatch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.Page.AllTranslations&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.Resources.GetMatch&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;}}{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$tmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;}}{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$res&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;.RelPermalink&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$text&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;Missing file: &lt;span class=&#34;cp&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;{{-&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;end&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;-}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;bundle-file&lt;/code&gt; funciona con una estrategia simple:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Primero busque el archivo en los recursos de la página actual.&lt;/li&gt;
&lt;li&gt;Si no lo encuentra, busque el mismo nombre de archivo en otras páginas traducidas.&lt;/li&gt;
&lt;li&gt;Genere un enlace de descarga cuando lo encuentre o muestre un mensaje de archivo faltante cuando no lo encuentre.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;parámetros&#34;&gt;Parámetros
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt;: nombre del archivo adjunto (obligatorio)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;text&lt;/code&gt;: etiqueta del enlace (opcional); por defecto es &lt;code&gt;nombre&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;ejemplo-de-uso&#34;&gt;Ejemplo de uso
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go-html-template&#34; data-lang=&#34;go-html-template&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span&gt;Missing file: demo.pdf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Sin &amp;ldquo;texto&amp;rdquo;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-go-html-template&#34; data-lang=&#34;go-html-template&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span&gt;Missing file: demo.pdf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;lista-de-verificación-previa-a-la-publicación&#34;&gt;Lista de verificación previa a la publicación
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Coloque archivos adjuntos y publicaciones en el mismo paquete de páginas.&lt;/li&gt;
&lt;li&gt;Asegúrese de que &amp;ldquo;nombre&amp;rdquo; coincida exactamente con el nombre de archivo real (incluido el caso).&lt;/li&gt;
&lt;li&gt;Haga clic en los enlaces en la vista previa local para confirmar la accesibilidad.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;bundle-file&lt;/code&gt; convierte el manejo de archivos adjuntos multilingües del mantenimiento manual de rutas a una búsqueda automática basada en reglas.
Para bases de conocimientos y blogs técnicos de larga duración, esto reduce el riesgo de enlaces rotos y el tiempo de revisión previa al lanzamiento.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo crear y utilizar habilidades: especificación y principios prácticos de SKILL.md</title>
        <link>https://knightli.com/es/2026/03/28/how-to-create-and-use-skills/</link>
        <pubDate>Sat, 28 Mar 2026 16:30:00 +0800</pubDate>
        
        <guid>https://knightli.com/es/2026/03/28/how-to-create-and-use-skills/</guid>
        <description>&lt;p&gt;Este artículo se centra en dos preguntas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;¿Cómo debería escribirse y estructurarse &lt;code&gt;SKILL.md&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;¿Cómo creamos habilidades reutilizables, mantenibles y de alta calidad?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-especificación-de-habilidadmd&#34;&gt;1. Especificación de HABILIDAD.md
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;SKILL.md&lt;/code&gt; es el archivo de descripción principal de una habilidad. Suele contener dos partes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Portada de YAML: define metadatos de habilidades.&lt;/li&gt;
&lt;li&gt;Cuerpo de Markdown: define la guía de ejecución y el flujo de trabajo práctico.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;11-ejemplo-de-portada&#34;&gt;1.1 Ejemplo de portada
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# === Required fields ===&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;skill-name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Unique skill identifier; kebab-case is recommended&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  Brief but precise description of:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  1) What this skill does
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  2) When it should be used
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  3) What its core value is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# Note: description is typically the key basis for skill selection&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;# === Optional fields ===&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1.0.0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;allowed_tools&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;tool1, tool2]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;required_context&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;context_item1]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;license&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;MIT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Your Name &amp;lt;email@example.com&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;database, analysis, sql]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nn&#34;&gt;---&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;12-estructura-corporal-recomendada&#34;&gt;1.2 Estructura corporal recomendada
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-markdown&#34; data-lang=&#34;markdown&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gh&#34;&gt;# Skill Title
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Overview
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Skill summary, use cases, technical background)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Prerequisites
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Runtime environment, dependencies, required permissions)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Workflow
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Step-by-step guidance: input, process, output)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Best Practices
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Experience-based tips, caveats, common pitfalls)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Examples
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Typical cases for faster adoption)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gu&#34;&gt;## Troubleshooting
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;(Common issues and fixes)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;2-principios-para-escribir-habilidades-de-alta-calidad&#34;&gt;2. Principios para escribir habilidades de alta calidad
&lt;/h2&gt;&lt;p&gt;Con base en la documentación oficial y la práctica comunitaria, se recomiendan los siguientes cuatro principios.&lt;/p&gt;
&lt;h3 id=&#34;21-mantenga-la-descripción-precisa&#34;&gt;2.1 Mantenga la descripción precisa
&lt;/h3&gt;&lt;p&gt;La &amp;ldquo;descripción&amp;rdquo; es el punto de entrada clave para combinar habilidades. Debería:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Definir claramente el alcance; Evite palabras vagas como &amp;ldquo;ayuda con el procesamiento de datos&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Incluya palabras clave desencadenantes para que coincidan con la intención del usuario.&lt;/li&gt;
&lt;li&gt;Explicar el valor único y los límites de otras habilidades.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ejemplo débil:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Handle database queries&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ejemplo más fuerte:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  Convert Chinese business questions into SQL queries and analyze the MySQL employees sample database.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  Suitable for employee info lookup, salary statistics, department analysis, and role-change history.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;  Use this skill when users ask about employee, salary, or department data.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;22-diseño-modular-y-responsabilidad-única&#34;&gt;2.2 Diseño modular y responsabilidad única
&lt;/h3&gt;&lt;p&gt;Una habilidad debe centrarse en un dominio de tarea claramente definido. Si una sola habilidad intenta abarcar demasiado, a menudo conduce a:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Descripciones más amplias y menor precisión de coincidencia.&lt;/li&gt;
&lt;li&gt;Instrucciones más largas y carga de contexto más pesada.&lt;/li&gt;
&lt;li&gt;Mayores costes de mantenimiento e iteración.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En lugar de una habilidad de &amp;ldquo;análisis general&amp;rdquo;, divídala en habilidades especializadas, por ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;análisis-de-empleados-mysql&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;análisis-de-datos-de-ventas&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;análisis-de-comportamiento-de-usuario&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-el-determinismo-primero&#34;&gt;2.3 El determinismo primero
&lt;/h3&gt;&lt;p&gt;Para tareas complejas que requieren precisión, prefiera la ejecución con script a la generación pura de LLM.&lt;/p&gt;
&lt;p&gt;Por ejemplo, en escenarios de exportación de datos, en lugar de generar contenido binario de Excel directamente con un LLM, utilice un script dedicado. &lt;code&gt;SKILL.md&lt;/code&gt; solo debe definir cuándo y cómo invocarlo.&lt;/p&gt;
&lt;h3 id=&#34;24-divulgación-progresiva&#34;&gt;2.4 Divulgación progresiva
&lt;/h3&gt;&lt;p&gt;Capa de información por importancia y frecuencia para reducir el uso de contexto innecesario:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cuerpo &lt;code&gt;SKILL.md&lt;/code&gt;: flujo de trabajo principal y patrones comunes&lt;/li&gt;
&lt;li&gt;Documentos complementarios (por ejemplo, &lt;code&gt;advanced.md&lt;/code&gt;): uso avanzado y casos extremos&lt;/li&gt;
&lt;li&gt;Archivos de datos: datos de referencia de gran tamaño a los que se accede bajo demanda mediante scripts&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El objetivo de las habilidades de alta calidad no es escribir más, sino establecer límites más claros, mejores desencadenantes, ejecución estable y mantenimiento sostenible.&lt;/p&gt;
&lt;p&gt;Comience con un &lt;code&gt;SKILL.md&lt;/code&gt; estandarizado, luego combine la responsabilidad única con la divulgación progresiva para construir un sistema de habilidades más eficiente.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>¿Qué son las habilidades de los agentes? Desde los principios de diseño hasta la optimización del contexto</title>
        <link>https://knightli.com/es/2026/03/28/what-is-agent-skills/</link>
        <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/28/what-is-agent-skills/</guid>
        <description>&lt;p&gt;Agent Skills es una forma estandarizada de empaquetar conocimientos procesales. En resumen, responde no sólo a &amp;ldquo;si existen herramientas&amp;rdquo; sino también a &amp;ldquo;cómo utilizarlas correcta y eficazmente&amp;rdquo;.&lt;/p&gt;
&lt;h2 id=&#34;1-principios-básicos-de-diseño&#34;&gt;1. Principios básicos de diseño
&lt;/h2&gt;&lt;p&gt;El valor central de Agent Skills es que captura una metodología reutilizable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Proporciona conocimiento del dominio para guiar cómo los agentes combinan e invocan herramientas en escenarios específicos.&lt;/li&gt;
&lt;li&gt;Restringe las rutas de ejecución, reduciendo el ensayo y error y mejorando la coherencia.&lt;/li&gt;
&lt;li&gt;Hace que los flujos de trabajo complejos sean reutilizables e iterativos, formando SOP estables a lo largo del tiempo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si la capacidad de la herramienta es como una interfaz de hardware, Skills se acerca más a un manual de operaciones más un manual de mejores prácticas, que define qué se debe hacer y cómo.&lt;/p&gt;
&lt;h2 id=&#34;2-divulgación-progresiva-resolver-el-cuello-de-botella-del-contexto&#34;&gt;2. Divulgación progresiva: resolver el cuello de botella del contexto
&lt;/h2&gt;&lt;p&gt;La innovación clave en Agent Skills es la divulgación progresiva: cargue información solo cuando sea necesario, en lugar de enviar todo a la ventana contextual a la vez.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1.png&#34;
	width=&#34;1080&#34;
	height=&#34;589&#34;
	srcset=&#34;https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1_hu_3f15e8771443e908.png 480w, https://knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1_hu_74352dc275951faa.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;183&#34;
		data-flex-basis=&#34;440px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;21-capa-1-metadatos&#34;&gt;2.1 Capa 1: Metadatos
&lt;/h3&gt;&lt;p&gt;Cada habilidad generalmente se almacena en su propia carpeta, con &lt;code&gt;SKILL.md&lt;/code&gt; como archivo principal. Este archivo comienza con la información preliminar de YAML que define la información básica de habilidades.&lt;/p&gt;
&lt;p&gt;Al inicio, el agente lee solo la parte frontal de todas las habilidades e inyecta esos metadatos en el indicador del sistema. En la práctica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los metadatos de una habilidad cuestan alrededor de &amp;ldquo;100 tokens&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;50 habilidades cuestan alrededor de &amp;ldquo;5000 fichas&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-capa-2-instrucciones&#34;&gt;2.2 Capa 2: Instrucciones
&lt;/h3&gt;&lt;p&gt;Cuando una habilidad se considera muy relevante para la tarea actual, el agente lee el &lt;code&gt;SKILL.md&lt;/code&gt; completo y carga instrucciones detalladas, notas y ejemplos.&lt;/p&gt;
&lt;p&gt;El uso de tokens en esta capa depende de la complejidad de las instrucciones, normalmente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1000&lt;/code&gt; a &lt;code&gt;5000 tokens&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-capa-3-recursos-adicionales-guiones-y-referencias&#34;&gt;2.3 Capa 3: Recursos adicionales (guiones y referencias)
&lt;/h3&gt;&lt;p&gt;Para habilidades más complejas, &lt;code&gt;SKILL.md&lt;/code&gt; puede hacer referencia a scripts, archivos de configuración y documentos, que se cargan solo cuando es necesario.&lt;/p&gt;
&lt;p&gt;Ejemplo de estructura de directorio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;skills/pdf-processing/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── SKILL.md                 # Main skill file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── parse_pdf.py             # PDF parsing script
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── forms.md                 # Form-filling guide (loaded only for form tasks)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── templates/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── invoice.pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── report.pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Patrón de invocación típico:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ejecute &lt;code&gt;parse_pdf.py&lt;/code&gt; cuando sea necesario analizar PDF&lt;/li&gt;
&lt;li&gt;Cargue &lt;code&gt;forms.md&lt;/code&gt; solo para tareas de llenado de formularios&lt;/li&gt;
&lt;li&gt;Acceda a archivos de plantilla solo cuando genere formatos de salida específicos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;3-por-qué-funciona-este-diseño&#34;&gt;3. Por qué funciona este diseño
&lt;/h2&gt;&lt;h3 id=&#34;31-capacidad-de-conocimiento-escalable&#34;&gt;3.1 Capacidad de conocimiento escalable
&lt;/h3&gt;&lt;p&gt;Con scripts y archivos externos, una habilidad puede llevar el conocimiento mucho más allá de los límites de la ventana contextual.
Por ejemplo, una habilidad de análisis de datos puede incluir un conjunto de datos de &amp;ldquo;1 GB&amp;rdquo; más scripts de consulta, y el agente puede acceder a los datos mediante la ejecución en lugar de cargar todo el conjunto de datos en contexto.&lt;/p&gt;
&lt;h3 id=&#34;32-determinismo-más-fuerte&#34;&gt;3.2 Determinismo más fuerte
&lt;/h3&gt;&lt;p&gt;Delegar cálculos complejos, transformación de datos y análisis de formatos al código reduce significativamente la incertidumbre y el riesgo de alucinaciones en la generación de texto puro.&lt;/p&gt;
&lt;h2 id=&#34;4-impacto-práctico-de-16k-a-500-tokens&#34;&gt;4. Impacto práctico: de 16k a 500 tokens
&lt;/h2&gt;&lt;p&gt;La práctica comunitaria muestra que la Divulgación Progresiva puede reducir drásticamente los gastos generales del contexto inicial:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Enfoque MCP tradicional: conéctese directamente a un servidor MCP con muchas definiciones de herramientas, alrededor de &amp;ldquo;16 000 tokens&amp;rdquo; en la inicialización&lt;/li&gt;
&lt;li&gt;Con paquete de habilidades: use una habilidad de puerta de enlace liviana que se describe principalmente al principio, alrededor de &amp;ldquo;500 tokens&amp;rdquo; en la inicialización.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Las instrucciones detalladas y los recursos adicionales se cargan sólo cuando la tarea realmente los requiere. Esto reduce el costo inicial y mejora la precisión de la gestión del contexto durante la conversación.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;El valor clave de Agent Skills es pasar de &amp;ldquo;las herramientas están disponibles&amp;rdquo; a &amp;ldquo;las capacidades son reutilizables&amp;rdquo;. Con Progressive Disclosure, los sistemas pueden preservar la profundidad de la capacidad y al mismo tiempo optimizar significativamente el costo del token y la estabilidad de la ejecución.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Explicación de las diferencias entre IEEE 802.3af/at/bt (PoE)</title>
        <link>https://knightli.com/es/2026/03/28/ieee-802-3af-at-bt-poe-differences/</link>
        <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/28/ieee-802-3af-at-bt-poe-differences/</guid>
        <description>&lt;p&gt;IEEE 802.3af, 802.3at y 802.3bt son los tres estándares principales de PoE (alimentación a través de Ethernet). Sus diferencias clave son el presupuesto de energía, la cantidad de pares de cables utilizados para la entrega de energía y los tipos de dispositivos de destino.&lt;/p&gt;
&lt;h2 id=&#34;conclusiones-rápidas&#34;&gt;Conclusiones rápidas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;802.3af (PoE)&lt;/code&gt;: Potencia máxima inferior (15,4W), apto para dispositivos básicos.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;802.3at (PoE+)&lt;/code&gt;: Potencia aumentada hasta 30W, adecuado para dispositivos de potencia media.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;802.3bt (PoE++ / 4PPoE)&lt;/code&gt;: Nivel de potencia más alto (Tipo 3 hasta 60W, Tipo 4 hasta 90W-100W), adecuado para dispositivos de alta potencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;comparación-detallada&#34;&gt;Comparación detallada
&lt;/h2&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Estándar&lt;/th&gt;
          &lt;th&gt;Nombre común&lt;/th&gt;
          &lt;th&gt;Salida máxima de PSE&lt;/th&gt;
          &lt;th&gt;Potencia PD utilizable (aprox.)&lt;/th&gt;
          &lt;th&gt;Pares potenciados&lt;/th&gt;
          &lt;th&gt;Casos de uso típicos&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;IEEE 802.3af&lt;/td&gt;
          &lt;td&gt;PoE&lt;/td&gt;
          &lt;td&gt;15,4W&lt;/td&gt;
          &lt;td&gt;12,95W&lt;/td&gt;
          &lt;td&gt;2 pares&lt;/td&gt;
          &lt;td&gt;Teléfonos VoIP estándar, cámaras básicas&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;IEEE 802.3at&lt;/td&gt;
          &lt;td&gt;PoE+&lt;/td&gt;
          &lt;td&gt;30W&lt;/td&gt;
          &lt;td&gt;25,5W&lt;/td&gt;
          &lt;td&gt;2 pares&lt;/td&gt;
          &lt;td&gt;Cámaras IP HD, puntos finales de red avanzados&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;IEEE 802.3bt&lt;/td&gt;
          &lt;td&gt;PoE++/4PPoE&lt;/td&gt;
          &lt;td&gt;Tipo 3: 60W; Tipo 4: 90W-100W&lt;/td&gt;
          &lt;td&gt;Superior (depende del tipo)&lt;/td&gt;
          &lt;td&gt;4 pares&lt;/td&gt;
          &lt;td&gt;AP Wi-Fi 6/6E, terminales de videoconferencia, automatización de edificios&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;notas-estándar-por-estándar&#34;&gt;Notas estándar por estándar
&lt;/h2&gt;&lt;h3 id=&#34;ieee-8023af-poe&#34;&gt;IEEE 802.3af (PoE)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Potencia de salida máxima: 15,4 W (aproximadamente 12,95 W disponibles en PD)&lt;/li&gt;
&lt;li&gt;Uso de pares: 2 de cada 4 pares trenzados&lt;/li&gt;
&lt;li&gt;Escenarios típicos: cámaras heredadas, teléfonos VoIP estándar&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ieee-8023at-poe&#34;&gt;IEEE 802.3at (PoE+)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Potencia de salida máxima: 30 W (aproximadamente 25,5 W disponibles en PD)&lt;/li&gt;
&lt;li&gt;Uso de pares: 2 de cada 4 pares trenzados&lt;/li&gt;
&lt;li&gt;Escenarios típicos: cámaras IP HD, puntos finales de vigilancia de red de gama alta&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ieee-8023bt-poe4ppoe&#34;&gt;IEEE 802.3bt (PoE++/4PPoE)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Potencia de salida máxima: hasta 60 W para el tipo 3, hasta 90 W-100 W para el tipo 4&lt;/li&gt;
&lt;li&gt;Uso de pares: los 4 pares para suministro de energía, lo que permite una mayor capacidad de energía&lt;/li&gt;
&lt;li&gt;Escenarios típicos: AP inalámbricos de alta potencia, automatización de edificios, sistemas de videoconferencia&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;compatibilidad&#34;&gt;Compatibilidad
&lt;/h2&gt;&lt;p&gt;Los tres estándares son compatibles con versiones anteriores:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;802.3bt&lt;/code&gt; es compatible con &lt;code&gt;802.3at&lt;/code&gt; y &lt;code&gt;802.3af&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;802.3at&lt;/code&gt; es compatible con &lt;code&gt;802.3af&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A medida que evolucionan los estándares, la potencia disponible aumenta significativamente, lo que admite una gama más amplia de dispositivos terminales de alta potencia.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Conceptos erróneos comunes sobre las unidades WD HC620 SMR y cómo utilizarlas correctamente</title>
        <link>https://knightli.com/es/2026/03/27/conceptos-err%C3%B3neos-comunes-sobre-las-unidades-wd-hc620-smr-y-c%C3%B3mo-utilizarlas-correctamente/</link>
        <pubDate>Fri, 27 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/27/conceptos-err%C3%B3neos-comunes-sobre-las-unidades-wd-hc620-smr-y-c%C3%B3mo-utilizarlas-correctamente/</guid>
        <description>&lt;h2 id=&#34;introducción-una-nueva-opción-ante-los-crecientes-costos-de-almacenamiento&#34;&gt;Introducción: una nueva opción ante los crecientes costos de almacenamiento
&lt;/h2&gt;&lt;p&gt;El mercado de almacenamiento está atravesando un aumento de precios sin precedentes y los costos de almacenamiento han aumentado considerablemente para los consumidores habituales y los usuarios domésticos de NAS.
Los discos duros de gran capacidad que antes costaban menos de 1.000 CNY ahora suelen costar el doble o incluso más, lo que los pone fuera del alcance de muchos usuarios preocupados por su presupuesto.
Sin embargo, en este entorno de mercado, el HC620 es uno de los pocos productos cuyo precio no ha aumentado tan dramáticamente.
Este artículo no trata sólo sobre el HC620; También se aplica a otras unidades SMR similares.&lt;/p&gt;
&lt;h2 id=&#34;conceptos-erróneos-comunes-sobre-el-hc620&#34;&gt;Conceptos erróneos comunes sobre el HC620
&lt;/h2&gt;&lt;p&gt;Mucha gente se preocupa sobre si el HC620 es seguro para el almacenamiento de datos, pero este es un error típico.
El HC620 en sí es una unidad de nivel empresarial y la calidad de su hardware no es mala.
La impresión de &amp;ldquo;inseguridad&amp;rdquo; suele deberse a malentendidos sobre las unidades SMR y a su uso en escenarios equivocados.
Las unidades SMR no deben usarse para cargas de trabajo frecuentes de escritura y eliminación, ya que eso puede desencadenar la reorganización de datos, reducir el rendimiento e incluso causar bloqueos graves.
Pero eso es una discrepancia en la carga de trabajo, no un defecto del producto.
Es similar a los sistemas de cintas empresariales: funcionan bien cuando se usan para escritura y lectura secuenciales.
Asimismo, HC620 es adecuado para escrituras secuenciales con lecturas aleatorias, pero no para cargas de trabajo pesadas de eliminación y escritura simultáneas.
En el escenario correcto, el HC620 funciona muy bien.&lt;/p&gt;
&lt;h2 id=&#34;escenarios-adecuados-e-inadecuados&#34;&gt;Escenarios adecuados e inadecuados
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Escenarios adecuados:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Copia de seguridad y archivado de datos en frío a gran capacidad&lt;/li&gt;
&lt;li&gt;Bibliotecas de medios que se escriben una vez y luego se buscan/leen en línea (las lecturas son naturalmente búsquedas aleatorias, no lecturas secuenciales estrictas)&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Escenarios inadecuados:&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;Cargas de trabajo con lecturas y escrituras frecuentes (bases de datos, descargas, espacios de trabajo activos)&lt;/li&gt;
&lt;li&gt;No se admite el uso directo en sistemas operativos como Windows y macOS (el acceso basado en red está excluido de esta limitación)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;requisitos-de-uso-para-hc620&#34;&gt;Requisitos de uso para HC620
&lt;/h2&gt;&lt;p&gt;El mayor problema del HC620 es la comodidad: puede resultar difícil de usar, especialmente para principiantes.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Requisitos de hardware&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;No lo conecte a través de una caja de unidad USB.&lt;/li&gt;
&lt;li&gt;La conexión directa a un puerto SATA de la placa base suele estar bien, pero las tarjetas de expansión pueden ser inconsistentes. Pueden ocurrir problemas de compatibilidad. LSI 9300 (SAS3008) puede funcionar después de actualizar el firmware IT/HBA. JMB585 tiene casos que funcionan y no funcionan, por lo que la compatibilidad es mixta.&lt;/li&gt;
&lt;li&gt;Los adaptadores M.2 a SATA también son inconsistentes. Mi adaptador M.2 a JMB585 funciona, pero he visto muchos casos incompatibles, probablemente relacionados con diferencias de BIOS o firmware.&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Requisitos de software&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;No compatible con Windows y macOS; compatible con Linux&lt;/li&gt;
&lt;li&gt;Compatible con Feiniu NAS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Para principiantes, el enfoque más sencillo es utilizar Feiniu NAS y montar el HC620 como almacenamiento externo, utilizando todo el disco para copias de seguridad o una biblioteca multimedia.&lt;/p&gt;
&lt;p&gt;Para los usuarios cuya capacidad NAS está llena, transferir datos utilizados con menos frecuencia al HC620 también es una forma práctica de liberar espacio en el NAS.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo los no programadores pueden dirigir la IA para que haga el trabajo: extraer diagramas y fórmulas matemáticas de una imagen (ejemplo práctico)</title>
        <link>https://knightli.com/es/2026/03/26/how-non-programmers-can-direct-ai-to-work-extract-diagrams-and-formulas/</link>
        <pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/26/how-non-programmers-can-direct-ai-to-work-extract-diagrams-and-formulas/</guid>
        <description>&lt;h2 id=&#34;requisitos-previos&#34;&gt;Requisitos previos
&lt;/h2&gt;&lt;p&gt;Instale VS Code y la extensión Codex. Puede consultar [este artículo] (../01/index.md).&lt;br&gt;
El uso de estas herramientas no requiere experiencia en programación. En este flujo de trabajo, VS Code sirve principalmente para organizar archivos; usted describe su objetivo y la IA escribe y ejecuta el código por usted.&lt;br&gt;
Esta publicación registra el proceso completo para generar ideas y ayudar a más personas a descubrir formas prácticas de utilizar la IA.&lt;/p&gt;
&lt;h2 id=&#34;objetivo&#34;&gt;Objetivo
&lt;/h2&gt;&lt;p&gt;Prepare una imagen que contenga fórmulas matemáticas y diagramas ilustrativos:
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1.png&#34;
	width=&#34;793&#34;
	height=&#34;205&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1_hu_ca2eeaa88b9a2128.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/1_hu_966a8a23af7f38d6.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;386&#34;
		data-flex-basis=&#34;928px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Queremos lograr tres cosas:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Divida los diagramas en imágenes limpias y separadas.&lt;/li&gt;
&lt;li&gt;Reconozca fórmulas y conviértalas a LaTeX para editarlas más fácilmente.&lt;/li&gt;
&lt;li&gt;Vincula cada diagrama a su fórmula correspondiente.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;proceso&#34;&gt;Proceso
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Primero, reconozca la imagen, genere un documento Markdown y convierta fórmulas a LaTeX.
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1.png&#34;
	width=&#34;1009&#34;
	height=&#34;1059&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1_hu_682f636c00f5879.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-1_hu_4a9ed5f6454d2b48.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;95&#34;
		data-flex-basis=&#34;228px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Resultado de la conversión:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;71
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 1.png Recognition Result
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;## Geometry Formulas (LaTeX)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1. Triangle area (side lengths and circumradius):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \frac{abc}{4R}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2. Triangle area (inradius and semiperimeter):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = pr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3. Frustum volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{\pi\left(r^2 + Rr + R^2\right)h}{3}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4. Frustum lateral surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \pi a(R + r)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5. Cylinder volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \pi r^2 h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;6. Cylinder lateral surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 2\pi rh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;7. Sphere volume:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{4}{3}\pi R^3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8. Sphere surface area:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 4\pi R^2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;9. Law of sines:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\frac{a}{\sin A}=\frac{b}{\sin B}=\frac{c}{\sin C}=2R
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;10. Law of cosines:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a^2=b^2+c^2-2bc\cos A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b^2=a^2+c^2-2ac\cos B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c^2=a^2+b^2-2ab\cos C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2.png&#34;
	width=&#34;831&#34;
	height=&#34;1253&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2_hu_ecfd835a086d5e6b.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/2-2_hu_bdd02e889793f78f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;66&#34;
		data-flex-basis=&#34;159px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Se reconocieron todas las fórmulas y la IA incluso agregó nombres de fórmulas automáticamente, lo cual es genial. Sin embargo, los cultivos del diagrama pequeño aún no se generaron.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Intente pedirle a AI que recorte la imagen.
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1.png&#34;
	width=&#34;1368&#34;
	height=&#34;1615&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1_hu_8fcc60d87f237172.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-1_hu_8f5bbfed32d47a1d.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;84&#34;
		data-flex-basis=&#34;203px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;36
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;37
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;38
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;39
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;40
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;41
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;42
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;43
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;44
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;45
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;46
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;47
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;48
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;49
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;50
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;51
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;52
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;53
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;54
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;55
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;56
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;57
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;58
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;59
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;60
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;61
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;62
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;63
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;64
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;65
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;66
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;67
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;68
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;69
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;70
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;71
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;72
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;73
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;74
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;75
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;76
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;77
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;78
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;79
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;80
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;81
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;82
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;83
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;84
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;85
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;86
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;87
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;88
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 1.png Recognition Result (side-by-side layout with refined cropping)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/01_triangle_circum.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \frac{abc}{4R}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/02_triangle_incircle.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = pr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/03_frustum.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{\pi\left(r^2 + Rr + R^2\right)h}{3}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = \pi a(R + r)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/04_cylinder.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \pi r^2 h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 2\pi rh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/05_sphere.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;V = \frac{4}{3}\pi R^3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;S = 4\pi R^2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;![](crops/06_laws.png)&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;\frac{a}{\sin A}=\frac{b}{\sin B}=\frac{c}{\sin C}=2R
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a^2=b^2+c^2-2bc\cos A
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b^2=a^2+c^2-2ac\cos B
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;c^2=a^2+b^2-2ab\cos C
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$$
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Resultado:
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2.png&#34;
	width=&#34;810&#34;
	height=&#34;1154&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2_hu_5e27dd3893009a44.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/3-2_hu_d0ccd10683fc4506.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;70&#34;
		data-flex-basis=&#34;168px&#34;
	
&gt;
Los diagramas fueron recortados y colocados en posiciones coincidentes, pero los cultivos aún incluyen ruido de áreas cercanas.&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Corrija el recorte excesivo: mantenga primero el área objetivo completa y luego elimine manualmente las partes adicionales&lt;br&gt;
El resultado aún es inconsistente en este paso. Aún no está claro si el problema proviene de las indicaciones o de la variabilidad del modelo en la localización visual.
&lt;img src=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1.png&#34;
	width=&#34;805&#34;
	height=&#34;1295&#34;
	srcset=&#34;https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1_hu_90e248256e5d9819.png 480w, https://knightli.com/2026/03/26/%E6%99%AE%E9%80%9A%E4%BA%BA%E5%A6%82%E4%BD%95%E6%8C%87%E6%8C%A5-ai-%E5%B9%B2%E6%B4%BB-%E6%8F%90%E5%8F%96%E5%9B%BE%E5%BD%A2-%E6%8F%90%E5%8F%96%E6%95%B0%E5%AD%A6%E5%85%AC%E5%BC%8F/4-1_hu_cccfbcada80166e1.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;62&#34;
		data-flex-basis=&#34;149px&#34;
	
&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Usar Codex es diferente a chatear directamente en chatgpt.com.&lt;br&gt;
En chatgpt.com, a menudo parece que la IA guía su trabajo; en Codex, se siente más como si la IA estuviera ejecutando sus instrucciones.&lt;br&gt;
Después de describir sus requisitos, la IA puede generar código, ejecutarlo y completar la tarea. La sensación es que estás dirigiendo a la IA para que haga el trabajo.&lt;br&gt;
Este proceso no requiere grandes habilidades de programación y los no programadores aún pueden obtener resultados reales paso a paso.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cómo utilizar Codex en VS Code (desde la configuración hasta un flujo de trabajo eficiente en el mundo real)</title>
        <link>https://knightli.com/es/2026/03/20/how-to-use-codex-in-vs-code/</link>
        <pubDate>Fri, 20 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/03/20/how-to-use-codex-in-vs-code/</guid>
        <description>&lt;p&gt;Codex puede ayudarlo a escribir código, corregir errores, comprender proyectos y ejecutar comandos directamente desde la barra lateral de VS Code.&lt;/p&gt;
&lt;h2 id=&#34;1-preparación&#34;&gt;1. Preparación
&lt;/h2&gt;&lt;p&gt;Antes de comenzar, asegúrese de:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code se actualiza a una versión estable reciente.&lt;/li&gt;
&lt;li&gt;Puedes acceder a los servicios de OpenAI con normalidad.&lt;/li&gt;
&lt;li&gt;Su proyecto se abre localmente (preferiblemente en un repositorio Git).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;2-instale-la-extensión&#34;&gt;2. Instale la extensión
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Abra el panel Extensiones de VS Code.&lt;/li&gt;
&lt;li&gt;Busque e instale: &lt;code&gt;Codex - Codex - Agente de codificación de OpenAI&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Complete el flujo de inicio de sesión/autorización.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;3-abra-la-barra-lateral-del-códice&#34;&gt;3. Abra la barra lateral del Códice
&lt;/h2&gt;&lt;p&gt;Puedes abrirlo de cualquier forma:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Haga clic en &amp;ldquo;Abrir barra lateral del Codex&amp;rdquo; en el área superior derecha del editor.&lt;/li&gt;
&lt;li&gt;Utilice la paleta de comandos (&lt;code&gt;Ctrl + Shift + P&lt;/code&gt;), busque &lt;code&gt;Codex&lt;/code&gt; y ábralo.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Después de abrir, Codex lee el contexto del espacio de trabajo actual y está listo para conversar.&lt;/p&gt;
&lt;h2 id=&#34;4-patrones-de-uso-comunes&#34;&gt;4. Patrones de uso comunes
&lt;/h2&gt;&lt;h3 id=&#34;41-pídale-que-explique-el-código&#34;&gt;4.1 Pídale que explique el código
&lt;/h3&gt;&lt;p&gt;Mensaje de ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Please explain the core logic of this file,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and point out the 3 areas most likely to fail.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Excelente para comprender rápidamente el código heredado.&lt;/p&gt;
&lt;h3 id=&#34;42-pídale-que-implemente-funciones&#34;&gt;4.2 Pídale que implemente funciones
&lt;/h3&gt;&lt;p&gt;Mensaje de ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Add a /healthz endpoint to the existing API.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;It should return app version and database connectivity status,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and include basic tests.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si establece claramente las restricciones y los criterios de aceptación, la calidad del resultado suele ser mucho más estable.&lt;/p&gt;
&lt;h3 id=&#34;43-pídale-que-solucione-problemas&#34;&gt;4.3 Pídale que solucione problemas
&lt;/h3&gt;&lt;p&gt;Mensaje de ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This endpoint intermittently returns 500 under concurrency.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;First identify the root cause, then propose a minimal-change fix,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;and finally list regression test points.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&amp;ldquo;Diagnosticar primero, luego corregir&amp;rdquo; ayuda a reducir la refactorización excesiva accidental.&lt;/p&gt;
&lt;h2 id=&#34;5-plantilla-de-aviso-de-alta-calidad&#34;&gt;5. Plantilla de aviso de alta calidad
&lt;/h2&gt;&lt;p&gt;Puedes reutilizar esta plantilla directamente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Background: This is a &amp;lt;tech stack&amp;gt; project. Current goal: &amp;lt;goal&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Constraints: Do not modify &amp;lt;module/interface&amp;gt;; keep compatibility with &amp;lt;version/platform&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Output:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;1) File list to change
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2) Key code explanation
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;3) Validation steps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;4) Risks and rollback plan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto es especialmente útil para proyectos grandes y colaboración en equipo.&lt;/p&gt;
&lt;h2 id=&#34;6-preguntas-frecuentes&#34;&gt;6. Preguntas frecuentes
&lt;/h2&gt;&lt;h3 id=&#34;61-acerca-de-la-cuota-gratuita&#34;&gt;6.1 Acerca de la cuota gratuita
&lt;/h3&gt;&lt;p&gt;Escriba &lt;code&gt;\&lt;/code&gt; en el cuadro de entrada, luego elija el estado para ver información relacionada con la cuota/tiempo de reinicio.&lt;/p&gt;
&lt;h3 id=&#34;62-los-cambios-no-son-los-esperados&#34;&gt;6.2 Los cambios no son los esperados
&lt;/h3&gt;&lt;p&gt;Una vez generados los cambios, abra el panel de revisión para inspeccionar los detalles.
Si no está satisfecho, utilice deshacer/revertir.
Puede dividir requisitos grandes en pasos más pequeños y ejecutarlos de forma incremental.
Utilice Git y mantenga pequeñas confirmaciones para una reversión más sencilla.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Panorama de API de LLM (opciones gratuitas y rentables)</title>
        <link>https://knightli.com/es/2026/02/12/llm-api-landscape-free-and-cost-effective/</link>
        <pubDate>Thu, 12 Feb 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/02/12/llm-api-landscape-free-and-cost-effective/</guid>
        <description>&lt;h2 id=&#34;api-de-google-gemini-mejor-nivel-gratuito&#34;&gt;API de Google Gemini (mejor nivel gratuito)
&lt;/h2&gt;&lt;p&gt;Para promocionar la línea Gemini, Google ofrece actualmente una de las cuotas gratuitas más generosas.
Precios/detalles: &lt;a class=&#34;link&#34; href=&#34;https://ai.google.dev/gemini-api/docs/pricing?hl=zh-cn&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://ai.google.dev/gemini-api/docs/pricing?hl=zh-cn&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Modelos: Gemini 3 Flash Preview, Gemini 2.5 Pro (a partir del 12 de febrero de 2026).
En general, el modelo Pro de gama alta más nuevo puede tener límites gratuitos más estrictos, mientras que muchos otros modelos aún ofrecen uso gratuito.&lt;/p&gt;
&lt;p&gt;Ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Incluso los modelos de primer nivel pueden incluir cuota gratuita.&lt;/li&gt;
&lt;li&gt;Ventana de contexto muy grande (más de 1 millón de tokens).&lt;/li&gt;
&lt;li&gt;Fuerte soporte multimodal (entrada de imagen/vídeo).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Privacidad de datos: Google puede utilizar entradas de nivel gratuito para mejorar los modelos (úselo con precaución en producción).&lt;/li&gt;
&lt;li&gt;Restricciones de propiedad intelectual: política regional estricta; Las ubicaciones no admitidas pueden marcar &amp;ldquo;403&amp;rdquo; o &amp;ldquo;Ubicación del usuario no admitida&amp;rdquo;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;groq-rey-de-la-velocidad&#34;&gt;Groq (Rey de la velocidad)
&lt;/h2&gt;&lt;p&gt;Groq utiliza su hardware LPU (Unidad de procesamiento de lenguaje) de desarrollo propio y proporciona una inferencia extremadamente rápida.
Precios/detalles: &lt;a class=&#34;link&#34; href=&#34;https://groq.com/pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://groq.com/pricing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Modelos: GPT OSS / Kimi K2 / Llama 3,4 / Qwen3
Cuota: Sin nivel gratuito, pero precio relativamente bajo.&lt;/p&gt;
&lt;p&gt;Ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Muy baja latencia; El TTFT suele estar dentro de los 200 ms.&lt;/li&gt;
&lt;li&gt;Ideal para chat en tiempo real y asistentes de voz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El alcance del modelo es en su mayoría modelos de código abierto; no hay GPT-4 o Claude alojados directamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;siliconcloud-opción-nacional-sólida&#34;&gt;SiliconCloud (opción nacional sólida)
&lt;/h2&gt;&lt;p&gt;Una plataforma de inferencia de rápido crecimiento con sede en China que agrega muchos modelos nacionales de código abierto de alta calidad.
Precios/detalles: &lt;a class=&#34;link&#34; href=&#34;https://siliconflow.cn/pricing&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://siliconflow.cn/pricing&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Modelos: Qwen 2.5 (7B/14B/72B), DeepSeek-V2, Yi-1.5, Kimi K2.
Cuota: Algunos modelos (por ejemplo Qwen 7B, GLM-4-9B) actualmente ofrecen llamadas gratuitas permanentes.&lt;/p&gt;
&lt;p&gt;Ventajas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rápida conectividad doméstica.&lt;/li&gt;
&lt;li&gt;Los nuevos modelos nacionales de código abierto suelen estar disponibles rápidamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Contras:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El acceso gratuito es principalmente para modelos más pequeños.&lt;/li&gt;
&lt;li&gt;Los modelos de gama alta (como el 72B / DeepSeek 236B) suelen ser de pago.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>OpenWrt en JDCloud AX6600 Athena: mueva el puerto 2.5G a LAN e intercambie WAN/LAN1</title>
        <link>https://knightli.com/es/2026/01/19/jdcloud-ax6600-openwrt-swap-wan-lan1/</link>
        <pubDate>Mon, 19 Jan 2026 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2026/01/19/jdcloud-ax6600-openwrt-swap-wan-lan1/</guid>
        <description>&lt;h2 id=&#34;introducción&#34;&gt;Introducción
&lt;/h2&gt;&lt;p&gt;El JDCloud Wireless Treasure AX6600 Athena tiene un puerto 2.5G. En las compilaciones LEDE/libwrt de OpenWrt, este puerto suele estar configurado como WAN de forma predeterminada.
En muchos escenarios de laboratorio doméstico, es más útil como puerto LAN interno para conectar NAS y otros servidores locales.
Este artículo muestra un enfoque práctico basado en DTS.&lt;/p&gt;
&lt;h2 id=&#34;método&#34;&gt;Método
&lt;/h2&gt;&lt;p&gt;La interfaz de usuario web de OpenWrt generalmente no puede reasignar directamente esta asignación de WAN/LAN.
Puedes hacerlo editando el archivo DTS.&lt;/p&gt;
&lt;p&gt;Intercambie &lt;code&gt;lan1&lt;/code&gt; y &lt;code&gt;wan&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-dts&#34; data-lang=&#34;dts&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nl&#34;&gt;Before&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;switch_lan_bmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;switch_wan_bmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;dp1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;okay&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;phy-handle&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;qca8075_24&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;lan1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;dp5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;okay&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;phy-handle&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;qca8081&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;wan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nl&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;switch_lan_bmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;	&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;switch_wan_bmp&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ESS_PORT1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;dp1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;okay&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;phy-handle&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;qca8075_24&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;wan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;dp5&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;okay&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;phy-handle&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;&amp;amp;qca8081&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;na&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;lan1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;descargas-dts-antesdespués&#34;&gt;Descargas DTS (Antes/Después)
&lt;/h2&gt;&lt;p&gt;Archivos DTS libwrt:
&lt;a href=&#34;https://knightli.com/2026/01/19/%E4%BA%AC%E4%B8%9C%E4%BA%91%E6%97%A0%E7%BA%BF%E5%AE%9Dax6600%E9%9B%85%E5%85%B8%E5%A8%9C-openwrt-2.5g%E7%BD%91%E5%8F%A3%E5%88%B0lan-%E4%BA%A4%E6%8D%A2wan%E5%92%8Clan1%E7%9A%84%E6%96%B9%E6%B3%95/ipq6010-re-cs-02-libwrt-1.dts&#34;&gt;Before: ipq6010-re-cs-02.dts&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://knightli.com/2026/01/19/%E4%BA%AC%E4%B8%9C%E4%BA%91%E6%97%A0%E7%BA%BF%E5%AE%9Dax6600%E9%9B%85%E5%85%B8%E5%A8%9C-openwrt-2.5g%E7%BD%91%E5%8F%A3%E5%88%B0lan-%E4%BA%A4%E6%8D%A2wan%E5%92%8Clan1%E7%9A%84%E6%96%B9%E6%B3%95/ipq6010-re-cs-02-libwrt-2.dts&#34;&gt;After: ipq6010-re-cs-02.dts&lt;/a&gt;&lt;br&gt;
Archivos LEDE DTS:
&lt;a href=&#34;https://knightli.com/2026/01/19/%E4%BA%AC%E4%B8%9C%E4%BA%91%E6%97%A0%E7%BA%BF%E5%AE%9Dax6600%E9%9B%85%E5%85%B8%E5%A8%9C-openwrt-2.5g%E7%BD%91%E5%8F%A3%E5%88%B0lan-%E4%BA%A4%E6%8D%A2wan%E5%92%8Clan1%E7%9A%84%E6%96%B9%E6%B3%95/ipq6010-re-cs-02-lede-1.dts&#34;&gt;Before: ipq6010-re-cs-02.dts&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://knightli.com/2026/01/19/%E4%BA%AC%E4%B8%9C%E4%BA%91%E6%97%A0%E7%BA%BF%E5%AE%9Dax6600%E9%9B%85%E5%85%B8%E5%A8%9C-openwrt-2.5g%E7%BD%91%E5%8F%A3%E5%88%B0lan-%E4%BA%A4%E6%8D%A2wan%E5%92%8Clan1%E7%9A%84%E6%96%B9%E6%B3%95/ipq6010-re-cs-02-lede-2.dts&#34;&gt;After: ipq6010-re-cs-02.dts&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Guía GNU C `__atributo__`</title>
        <link>https://knightli.com/es/2025/06/13/gnu-c-attribute-guide/</link>
        <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/06/13/gnu-c-attribute-guide/</guid>
        <description>&lt;h2 id=&#34;sintaxis&#34;&gt;Sintaxis
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;attribute&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;list&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;attribute-list&lt;/code&gt; es una lista de atributos separados por comas.&lt;/p&gt;
&lt;h2 id=&#34;atributos-comunes&#34;&gt;Atributos comunes
&lt;/h2&gt;&lt;h3 id=&#34;empaquetado&#34;&gt;&lt;code&gt;empaquetado&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Elimina el relleno de la estructura predeterminada y minimiza los espacios de alineación.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;packed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;packed_str&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint8_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;uint16_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Úselo con cuidado: el acceso no alineado puede reducir el rendimiento o causar fallas en algunas arquitecturas.&lt;/p&gt;
&lt;h3 id=&#34;alineadon&#34;&gt;&lt;code&gt;alineado(n)&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Fuerza la alineación del objeto a &lt;code&gt;n&lt;/code&gt; bytes.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;buf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;aligned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;secciónnombre&#34;&gt;&lt;code&gt;sección(&amp;quot;nombre&amp;quot;)&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Coloca la variable/función en una sección del vinculador personalizado.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;const&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fw_ver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;.fwinfo&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;1.0.0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;sin-usar&#34;&gt;&lt;code&gt;sin usar&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Suprime las advertencias no utilizadas.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;helper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unused&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;débil&#34;&gt;&lt;code&gt;débil&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Declara un símbolo débil (puede anularse mediante una definición fuerte).&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;board_init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;weak&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;sin-retorno&#34;&gt;&lt;code&gt;sin retorno&lt;/code&gt;
&lt;/h3&gt;&lt;p&gt;Función de marcas que nunca regresa.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fatal_error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;void&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;__attribute__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;noreturn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;notas&#34;&gt;Notas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__attribute__&lt;/code&gt; es específico del compilador (compatible con GCC/Clang en muchos casos).&lt;/li&gt;
&lt;li&gt;Prefiere macros para mayor portabilidad cuando apunta a múltiples compiladores.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Inicialización de estructura C y campos de caracteres/cadenas</title>
        <link>https://knightli.com/es/2025/06/13/c-struct-initialization/</link>
        <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/06/13/c-struct-initialization/</guid>
        <description>&lt;h2 id=&#34;inicialización-posicional-en-la-declaración&#34;&gt;Inicialización posicional en la declaración
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;InitMember&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;double&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;second&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;third&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;float&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;four&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;InitMember&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.141590&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;method one&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25f&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El orden importa en la inicialización posicional.&lt;/p&gt;
&lt;h2 id=&#34;asignación-después-de-la-declaración&#34;&gt;Asignación después de la declaración
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;InitMember&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;second&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.141590&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;third&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;method two&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;four&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;inicializadores-designados-recomendados-para-facilitar-la-lectura&#34;&gt;Inicializadores designados (recomendados para facilitar la lectura)
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;InitMember&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;first&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;second&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.141590&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;third&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;method three&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;four&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;0.25f&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;notas-para-miembros-de-cadena&#34;&gt;Notas para miembros de cadena
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;char *&lt;/code&gt; apunta a una cadena literal o a una memoria asignada dinámicamente.&lt;/li&gt;
&lt;li&gt;Si se requiere almacenamiento grabable, use &lt;code&gt;char array[N]&lt;/code&gt; y copie el contenido.&lt;/li&gt;
&lt;li&gt;Tenga cuidado con la vida útil y la mutabilidad de las cuerdas puntiagudas.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Repare pyOCD que no detecta algunas sondas DAPLink en Ubuntu</title>
        <link>https://knightli.com/es/2025/04/17/fix-pyocd-daplink-detection-on-ubuntu/</link>
        <pubDate>Thu, 17 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/04/17/fix-pyocd-daplink-detection-on-ubuntu/</guid>
        <description>&lt;h2 id=&#34;hardware-y-firmware-daplink&#34;&gt;Hardware y firmware DAPLink
&lt;/h2&gt;&lt;p&gt;Equipo: &lt;a class=&#34;link&#34; href=&#34;https://oshwhub.com/xivn1987/daplink&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://oshwhub.com/xivn1987/daplink&lt;/a&gt;&lt;br&gt;
Firmware: &lt;a class=&#34;link&#34; href=&#34;https://github.com/XIVN1987/DAPLink/tree/master&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/XIVN1987/DAPLink/tree/master&lt;/a&gt;&lt;br&gt;
&lt;img src=&#34;https://knightli.com/2025/04/17/pyocd-daplink-%E8%AF%86%E5%88%AB/1.png&#34;
	width=&#34;771&#34;
	height=&#34;526&#34;
	srcset=&#34;https://knightli.com/2025/04/17/pyocd-daplink-%E8%AF%86%E5%88%AB/1_hu_94c8fd7c40db175d.png 480w, https://knightli.com/2025/04/17/pyocd-daplink-%E8%AF%86%E5%88%AB/1_hu_f4ed857e20996bfb.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;146&#34;
		data-flex-basis=&#34;351px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;También pueden ocurrir problemas similares en otras compilaciones de firmware DAPLink personalizadas o no oficiales.&lt;/p&gt;
&lt;h2 id=&#34;síntoma&#34;&gt;Síntoma
&lt;/h2&gt;&lt;p&gt;&lt;code&gt;pyocd list&lt;/code&gt; puede mostrar una sonda desconocida o ninguna sonda:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;A veces solo aparece J-Link o no se informan sondas disponibles, mientras que el mismo DAPLink todavía funciona en Keil.&lt;/p&gt;
&lt;h2 id=&#34;reparar-pasos&#34;&gt;Reparar pasos
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Compruebe si el dispositivo USB está visible:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsusb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si se detecta correctamente, debería ver algo como &amp;ldquo;XIVN1987 XV-Link CMSIS-DAP&amp;rdquo;.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Configurar reglas de udev
Referencia: &lt;a class=&#34;link&#34; href=&#34;https://github.com/pyocd/pyOCD/tree/main/udev&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/pyocd/pyOCD/tree/main/udev&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Repositorio de clones:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/pyocd/pyOCD.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Las reglas están en:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pyOCD/udev/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para esta sonda personalizada, agregue una regla explícita (o agréguela a &lt;code&gt;50-cmsis-dap.rules&lt;/code&gt;):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 2e3c:5021 XIVN1987 XV-Link CMSIS-DAP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SUBSYSTEM==&amp;#34;usb&amp;#34;, ATTR{idVendor}==&amp;#34;2e3c&amp;#34;, ATTR{idProduct}==&amp;#34;5021&amp;#34;, MODE:=&amp;#34;666&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Los ID de proveedor/producto deben coincidir con la salida &lt;code&gt;lsusb&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Copie el archivo de reglas actualizado en &lt;code&gt;/etc/udev/rules.d&lt;/code&gt;, luego vuelva a cargarlo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm control --reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo udevadm trigger
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de eso, ejecuta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Ahora debería ver la sonda DAPLink listada correctamente.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Comprimir documentos de Microsoft Office Word (.docx)</title>
        <link>https://knightli.com/es/2025/04/14/compress-docx/</link>
        <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/04/14/compress-docx/</guid>
        <description>&lt;h2 id=&#34;estructura-del-archivo-docx&#34;&gt;Estructura del archivo DOCX
&lt;/h2&gt;&lt;p&gt;Un archivo &lt;code&gt;.docx&lt;/code&gt; es esencialmente un paquete ZIP que contiene documentos XML y recursos multimedia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[Content_Types].xml&lt;/code&gt; define los tipos de contenido&lt;/li&gt;
&lt;li&gt;Los archivos &lt;code&gt;.rels&lt;/code&gt; definen relaciones&lt;/li&gt;
&lt;li&gt;&lt;code&gt;word/document.xml&lt;/code&gt; almacena el contenido del documento principal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;word/styles.xml&lt;/code&gt; almacena estilos&lt;/li&gt;
&lt;li&gt;&lt;code&gt;word/numbering.xml&lt;/code&gt; almacena definiciones de lista&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Si cambia el nombre de &lt;code&gt;.docx&lt;/code&gt; a &lt;code&gt;.zip&lt;/code&gt;, puede extraer e inspeccionar la estructura del directorio.&lt;/p&gt;
&lt;h2 id=&#34;cómo-comprimir-docx&#34;&gt;Cómo comprimir DOCX
&lt;/h2&gt;&lt;p&gt;Los archivos DOCX grandes suelen estar dominados por archivos bajo &amp;ldquo;word/media&amp;rdquo;, por lo que la compresión debe centrarse allí.&lt;/p&gt;
&lt;p&gt;Por el momento, la compatibilidad DOCX para formatos de imagen más nuevos puede estar limitada en algunos flujos de trabajo, por lo que los formatos comunes como JPG/PNG suelen ser más seguros.&lt;/p&gt;
&lt;h3 id=&#34;1-descomprimir&#34;&gt;1. Descomprimir
&lt;/h3&gt;&lt;p&gt;Cambie el nombre de la extensión a ZIP y extráigala, o use Python:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;unzip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;os.path.exists! remove!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;shutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rmtree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pyzipper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PyZipFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extractall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;2-comprimir-jpgpng&#34;&gt;2. Comprimir JPG/PNG
&lt;/h3&gt;&lt;p&gt;Puede comprimir imágenes directamente. &lt;code&gt;Caesium&lt;/code&gt; proporciona buenos resultados de compresión a través de CLI.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;compress_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;input_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;quality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;command&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;caesiumclt.exe --same-folder-as-input --quality &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quality&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;input_path&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;system&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;except&lt;/span&gt; &lt;span class=&#34;ne&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;An error occurred: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En la práctica:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;calidad=50&lt;/code&gt; a menudo proporciona una fuerte reducción de tamaño con una calidad aceptable.&lt;/li&gt;
&lt;li&gt;Incluso &amp;ldquo;calidad = 80&amp;rdquo; puede reducir notablemente el tamaño.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-manejar-archivos-emf&#34;&gt;3. Manejar archivos EMF
&lt;/h3&gt;&lt;p&gt;Los archivos EMF suelen ser grandes. Convertir EMF a JPG/PNG puede reducir el tamaño significativamente. Puede usar ImageMagick para la conversión y luego actualizar &lt;code&gt;word/_rels/document.xml.rels&lt;/code&gt; si la extensión/ruta del archivo cambia.&lt;/p&gt;
&lt;h3 id=&#34;4-reempacar&#34;&gt;4. Reempacar
&lt;/h3&gt;&lt;p&gt;Vuelva a comprimir la carpeta extraída usando &lt;code&gt;ZIP_DEFLATED&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;zip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zipfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;zip:&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39; -&amp;gt; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zipfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pyzipper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PyZipFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zipfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;compression&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pyzipper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ZIP_DEFLATED&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dirs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;walk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;abs_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;rel_path&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;abs_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;rel_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;shutil&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rmtree&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;folder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;5-ejemplo-de-script-de-un-extremo-a-otro&#34;&gt;5. Ejemplo de script de un extremo a otro
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;compress_docx&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;outdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;dirs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;walk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;indir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;endswith&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.docx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;docfile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;unzip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;imgpath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;word/media/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;compress_image&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;imgpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;outfolder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;relpath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;indir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outfolder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mkdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outfolder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;zip&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;docname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;outfolder&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Con este enfoque y &amp;ldquo;calidad = 50&amp;rdquo;, los archivos DOCX a menudo se pueden reducir a aproximadamente un tercio del tamaño original.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>JTAG frente a SWD: pros y contras</title>
        <link>https://knightli.com/es/2025/04/07/jtag-vs-swd-pros-and-cons/</link>
        <pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/04/07/jtag-vs-swd-pros-and-cons/</guid>
        <description>&lt;p&gt;JTAG (Joint Test Action Group) y SWD (Serial Wire Debug) son interfaces de depuración comunes en el desarrollo integrado. Este artículo compara sus características, ventajas, limitaciones y escenarios de uso.&lt;/p&gt;
&lt;h2 id=&#34;jtag-interfaz-de-depuración-tradicional&#34;&gt;JTAG: interfaz de depuración tradicional
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Conceptos básicos de JTAG&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;JTAG es una interfaz estandarizada ampliamente utilizada para depuración y pruebas integradas. Por lo general, se implementa como una interfaz de señales múltiples, que comúnmente incluye &amp;ldquo;TCK&amp;rdquo; (reloj), &amp;ldquo;TMS&amp;rdquo; (selección de modo), &amp;ldquo;TDI&amp;rdquo; (entrada de datos) y &amp;ldquo;TDO&amp;rdquo; (salida de datos). A través del control de la máquina de estado, JTAG se puede utilizar para acceso a registro/memoria y diversas operaciones de depuración.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Ventajas de JTAG&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Amplio soporte: muchos chips y herramientas integrados brindan soporte JTAG maduro.&lt;/p&gt;
&lt;p&gt;Amplias capacidades: JTAG generalmente proporciona potentes funciones de depuración y escaneo de límites.&lt;/p&gt;
&lt;p&gt;Adecuado para sistemas complejos: especialmente útil para cadenas de múltiples dispositivos y depuración avanzada a nivel de placa.&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Limitaciones de JTAG&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Mayor complejidad: la implementación del cableado y del hardware suele ser más compleja.&lt;/p&gt;
&lt;p&gt;Compensaciones de velocidad: el rendimiento práctico puede ser limitado en comparación con enfoques de depuración en serie más livianos en algunos escenarios.&lt;/p&gt;
&lt;h2 id=&#34;swd-interfaz-de-depuración-en-serie-más-sencilla-y-eficiente&#34;&gt;SWD: interfaz de depuración en serie más sencilla y eficiente
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Conceptos básicos del SWD&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;SWD es una interfaz de depuración más nueva diseñada para simplificar el cableado de depuración tradicional y mejorar la eficiencia. Utiliza principalmente menos líneas de señal (por ejemplo, &lt;code&gt;SWDIO&lt;/code&gt;, &lt;code&gt;SWCLK&lt;/code&gt; y línea de reinicio), y al mismo tiempo admite flujos de trabajo de depuración principales.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Ventajas del SWD&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Menor número de pines: menos cables, diseño de placa más simple, integración más sencilla.&lt;/p&gt;
&lt;p&gt;Comunicación eficiente: en muchos casos prácticos, la interacción de depuración de SWD es rápida y conveniente.&lt;/p&gt;
&lt;p&gt;Menores gastos generales: una señalización y un cableado más simples pueden reducir la carga de implementación.&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Limitaciones del SWD&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Alcance de la compatibilidad: SWD es común en las MCU modernas, pero es posible que algunos chips antiguos/heredados no lo admitan.&lt;/p&gt;
&lt;p&gt;Alcance de la función: para algunos escenarios de cadena compleja o escaneo de límites avanzado, es posible que SWD no tenga tantas funciones como JTAG.&lt;/p&gt;
&lt;h2 id=&#34;jtag-vs-swd-cómo-elegir&#34;&gt;JTAG vs SWD: cómo elegir
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Soporte de hardware&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Compruebe si el chip de destino admite JTAG, SWD o ambos. Si sólo se admite uno, esa es la opción práctica.&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Requisitos de depuración&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Si prefiere un cableado más simple y una depuración diaria rápida, SWD suele ser la mejor opción.&lt;br&gt;
Si necesita un control de bajo nivel más completo y funciones de depuración complejas, suele preferirse JTAG.&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Complejidad del sistema&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Para sistemas complejos (por ejemplo, cadenas de múltiples dispositivos o placas relacionadas con FPGA), JTAG suele ser más flexible.&lt;/p&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Costo y complejidad de la implementación&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;SWD tiende a ser más fácil de implementar en diseños sensibles a los costos o con recursos limitados.&lt;/p&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Soporte de cadena de herramientas&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Asegúrese de que su depurador/programador y su cadena de herramientas de software sean compatibles con la interfaz seleccionada.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Tanto JTAG como SWD son importantes interfaces de depuración integradas, cada una con claras compensaciones. En la práctica, seleccione según la compatibilidad del chip objetivo, la profundidad de depuración requerida, la complejidad del sistema y las limitaciones de las herramientas.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Conceptos básicos y plantillas prácticas de CMake</title>
        <link>https://knightli.com/es/2025/03/28/cmake-basics-and-templates/</link>
        <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/03/28/cmake-basics-and-templates/</guid>
        <description>&lt;h2 id=&#34;qué-es-cmake&#34;&gt;¿Qué es CMake?
&lt;/h2&gt;&lt;p&gt;CMake es un generador de sistemas de compilación multiplataforma. Escribe &lt;code&gt;CMakeLists.txt&lt;/code&gt; una vez y luego genera archivos de compilación específicos de la plataforma (Makefile, archivos Ninja, proyectos de Visual Studio y más).&lt;/p&gt;
&lt;p&gt;En Linux, un flujo de trabajo típico es:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Escriba &lt;code&gt;CMakeLists.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Generar sistema de construcción&lt;/li&gt;
&lt;li&gt;Construir&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake ..
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;plantilla-1-archivo-de-origen-único&#34;&gt;Plantilla 1: archivo de origen único
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Demo1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;demo1&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;test01.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;plantilla-2-múltiples-archivos-fuente&#34;&gt;Plantilla 2: múltiples archivos fuente
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Demo2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;demo2&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;main.cpp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;utils.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;plantilla-3-incluir-directorios--bibliotecas&#34;&gt;Plantilla 3: Incluir directorios + bibliotecas
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-cmake&#34; data-lang=&#34;cmake&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cmake_minimum_required&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;VERSION&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;project&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;Demo3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;include_directories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;add_executable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;demo3&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;src/main.cpp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;src/foo.cpp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;target_link_libraries&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;demo3&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;pthread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;estructura-de-proyecto-recomendada&#34;&gt;Estructura de proyecto recomendada
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;project/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  CMakeLists.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  src/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  include/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  build/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;consejos&#34;&gt;Consejos
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mantenga compilaciones fuera de la fuente (&lt;code&gt;build/&lt;/code&gt;) para evitar contaminar el árbol fuente.&lt;/li&gt;
&lt;li&gt;Utilice los comandos &lt;code&gt;target_*&lt;/code&gt; (&lt;code&gt;target_include_directories&lt;/code&gt;, &lt;code&gt;target_link_libraries&lt;/code&gt;) para un estilo CMake moderno.&lt;/li&gt;
&lt;li&gt;Fije una versión mínima de CMake para evitar sorpresas de compatibilidad.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>STM32/PY32 GPIO: 8 modos de entrada/salida explicados</title>
        <link>https://knightli.com/es/2025/03/18/stm32-py32-gpio-modes/</link>
        <pubDate>Tue, 18 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/03/18/stm32-py32-gpio-modes/</guid>
        <description>&lt;h2 id=&#34;gpio-8-modos-comunes&#34;&gt;GPIO 8 modos comunes
&lt;/h2&gt;&lt;p&gt;GPIO (entrada/salida de uso general) se utiliza para interactuar con circuitos externos. En STM32/PY32, los modos comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;entrada flotante&lt;/li&gt;
&lt;li&gt;entrada pull-up&lt;/li&gt;
&lt;li&gt;entrada desplegable&lt;/li&gt;
&lt;li&gt;entrada analógica&lt;/li&gt;
&lt;li&gt;salida push-pull&lt;/li&gt;
&lt;li&gt;salida de drenaje abierto&lt;/li&gt;
&lt;li&gt;función alternativa push-pull&lt;/li&gt;
&lt;li&gt;drenaje abierto de función alternativa&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;modos-de-entrada&#34;&gt;Modos de entrada
&lt;/h2&gt;&lt;h3 id=&#34;entrada-flotante-gpio_mode_in_floating&#34;&gt;Entrada flotante (&lt;code&gt;GPIO_Mode_IN_FLOATING&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;El pasador es de alta impedancia y no está tirado hacia arriba o hacia abajo internamente. Los circuitos externos determinan el nivel.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/1-1.webp&#34;
	width=&#34;3668&#34;
	height=&#34;2004&#34;
	srcset=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/1-1_hu_f18ddbd2828c91d6.webp 480w, https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/1-1_hu_62dfbe61888e86c9.webp 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;183&#34;
		data-flex-basis=&#34;439px&#34;
	
&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;GPIO_InitStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pin&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPIO_PIN_0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;GPIO_InitStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Mode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPIO_MODE_INPUT&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;GPIO_InitStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Pull&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;GPIO_NOPULL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nf&#34;&gt;HAL_GPIO_Init&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPIOA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GPIO_InitStruct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;entrada-pull-up-gpio_mode_ipu&#34;&gt;Entrada pull-up (&lt;code&gt;GPIO_Mode_IPU&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;La resistencia pull-up interna mantiene alto el nivel predeterminado.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/2-1.webp&#34;
	width=&#34;3592&#34;
	height=&#34;1972&#34;
	srcset=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/2-1_hu_f8a5265721434e3.webp 480w, https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/2-1_hu_677a45cdeffd1251.webp 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;182&#34;
		data-flex-basis=&#34;437px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;entrada-desplegable-gpio_mode_ipd&#34;&gt;Entrada desplegable (&lt;code&gt;GPIO_Mode_IPD&lt;/code&gt;)
&lt;/h3&gt;&lt;p&gt;La resistencia desplegable interna mantiene bajo el nivel predeterminado.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/3-1.webp&#34;
	width=&#34;3596&#34;
	height=&#34;1976&#34;
	srcset=&#34;https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/3-1_hu_6d3dd93703b23bf8.webp 480w, https://knightli.com/2025/03/18/gpio%E8%BE%93%E5%85%A5%E8%BE%93%E5%87%BA%E6%A8%A1%E5%BC%8F/3-1_hu_f18257eb84884c7d.webp 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;181&#34;
		data-flex-basis=&#34;436px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;modos-de-salida&#34;&gt;Modos de salida
&lt;/h2&gt;&lt;h3 id=&#34;salida-push-pull&#34;&gt;Salida push-pull
&lt;/h3&gt;&lt;p&gt;Puede conducir activamente tanto en niveles altos como bajos. Bueno para salida digital general.&lt;/p&gt;
&lt;h3 id=&#34;salida-de-drenaje-abierto&#34;&gt;Salida de drenaje abierto
&lt;/h3&gt;&lt;p&gt;Puede bajar activamente; alto nivel proporcionado típicamente por una resistencia pull-up. Útil para bus compartido (por ejemplo, señalización tipo I2C).&lt;/p&gt;
&lt;h2 id=&#34;modo-analógico&#34;&gt;Modo analógico
&lt;/h2&gt;&lt;p&gt;El modo analógico desconecta la ruta de entrada/salida digital y se utiliza para señales ADC/analógicas.&lt;/p&gt;
&lt;h2 id=&#34;consejos-prácticos-de-selección&#34;&gt;Consejos prácticos de selección
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Entrada de botón: pull-up o pull-down.&lt;/li&gt;
&lt;li&gt;LED/pin de control general: salida push-pull.&lt;/li&gt;
&lt;li&gt;Cableado-Y/línea compartida: desagüe abierto + pull-up.&lt;/li&gt;
&lt;li&gt;Pin ADC: modo analógico.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Instale y use pyOCD &#43; J-Link en Ubuntu 24.04</title>
        <link>https://knightli.com/es/2025/03/17/pyocd-jlink-on-ubuntu-24-04/</link>
        <pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/03/17/pyocd-jlink-on-ubuntu-24-04/</guid>
        <description>&lt;h2 id=&#34;dispositivo-j-link-utilizado&#34;&gt;Dispositivo J-Link utilizado
&lt;/h2&gt;&lt;p&gt;Esta configuración utiliza sondas de depuración (SWD) compatibles con J-Link OB de bajo costo.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2025/03/17/pyocd-jlink/1.png&#34;
	width=&#34;712&#34;
	height=&#34;432&#34;
	srcset=&#34;https://knightli.com/2025/03/17/pyocd-jlink/1_hu_dedf493610fe49eb.png 480w, https://knightli.com/2025/03/17/pyocd-jlink/1_hu_6e074b1e827ed681.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;164&#34;
		data-flex-basis=&#34;395px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;instalación&#34;&gt;Instalación
&lt;/h2&gt;&lt;h3 id=&#34;1-instale-el-paquete-j-link&#34;&gt;1. Instale el paquete J-Link
&lt;/h3&gt;&lt;p&gt;Descargue el paquete Linux &lt;code&gt;.deb&lt;/code&gt; desde:
&lt;a class=&#34;link&#34; href=&#34;https://www.segger.com/downloads/jlink/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.segger.com/downloads/jlink/&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;2-instalar-ayudantes-de-tiempo-de-ejecución-de-python&#34;&gt;2. Instalar ayudantes de tiempo de ejecución de Python
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install python-is-python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install pipx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx ensurepath
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;3-instale-pyocd&#34;&gt;3. Instale pyOCD
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pipx install pyocd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;4-verificar-la-detección-de-la-sonda&#34;&gt;4. Verificar la detección de la sonda
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;uso-común&#34;&gt;Uso común
&lt;/h2&gt;&lt;h3 id=&#34;listar-objetivos&#34;&gt;Listar objetivos
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd list --targets
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;firmware-flash&#34;&gt;firmware flash
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd load firmware.elf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;abrir-servidor-gdb&#34;&gt;Abrir servidor GDB
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pyocd gdbserver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;solución-de-problemas&#34;&gt;Solución de problemas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Si &lt;code&gt;pyocd list&lt;/code&gt; no muestra ninguna sonda, verifique el permiso USB/las reglas udev.&lt;/li&gt;
&lt;li&gt;Si aparece J-Link pero falla la conexión del objetivo, verifique el cableado del SWD y la alimentación del objetivo.&lt;/li&gt;
&lt;li&gt;Intente reducir el reloj SWD cuando la calidad de la señal sea deficiente.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Compresión Python: cree archivos cifrados en ZIP y 7z</title>
        <link>https://knightli.com/es/2025/02/09/python-zip-and-7z-encrypted-archives/</link>
        <pubDate>Sun, 09 Feb 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/02/09/python-zip-and-7z-encrypted-archives/</guid>
        <description>&lt;h2 id=&#34;compresión-de-formato-zip&#34;&gt;Compresión de formato ZIP
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;pyzipper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pyzipper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;AESZipFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dest&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.zip&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;encryption&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pyzipper&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;WZ_AES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;setpassword&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sa&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;listdir&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;fullfile&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;zf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;fullfile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;importar pyzipper&lt;/code&gt; vs &lt;code&gt;importar archivo zip&lt;/code&gt;&lt;br&gt;
&lt;code&gt;pyzipper&lt;/code&gt; es mayoritariamente compatible con API con &lt;code&gt;zipfile&lt;/code&gt;.&lt;br&gt;
&lt;code&gt;zipfile&lt;/code&gt; puede usar contraseñas principalmente al extraer, pero no admite la creación de archivos ZIP cifrados con AES. &lt;code&gt;pyzipper&lt;/code&gt; admite la creación de archivos ZIP cifrados.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;zf.write(ruta1, ruta2)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;path1&lt;/code&gt;: ruta del archivo fuente para comprimir&lt;br&gt;
&lt;code&gt;path2&lt;/code&gt;: ruta dentro del archivo ZIP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pyzipper.AESZipFile&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;li&gt;Parámetros relacionados con el cifrado&lt;br&gt;
&lt;code&gt;encryption=pyzipper.WZ_AES&lt;/code&gt; (cifrado AES)&lt;br&gt;
&lt;code&gt;zf.setpassword(b&amp;quot;contraseña&amp;quot;)&lt;/code&gt; (establecer contraseña)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;compresión-de-formato-7z&#34;&gt;Compresión de formato 7z
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;py7zr&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;py7zr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SevenZipFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dest&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.7z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;archive&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;archive&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;writeall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;archivo.writeall(ruta1, ruta2)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;path1&lt;/code&gt;: ruta de origen para comprimir (puede ser un directorio)&lt;br&gt;
&lt;code&gt;path2&lt;/code&gt;: ruta de destino dentro del archivo 7z; &lt;code&gt;&#39;&#39;&lt;/code&gt; significa raíz del archivo&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Parámetro de cifrado&lt;br&gt;
&lt;code&gt;contraseña=&#39;contraseña&#39;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Transcodificación FFmpeg H.265: diferentes codificadores, comparación de velocidad de software y hardware</title>
        <link>https://knightli.com/es/2025/02/07/ffmpeg-h265-software-vs-hardware-encoding/</link>
        <pubDate>Fri, 07 Feb 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/02/07/ffmpeg-h265-software-vs-hardware-encoding/</guid>
        <description>&lt;h2 id=&#34;lista-de-codificadores-disponibles&#34;&gt;Lista de codificadores disponibles
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -encoders
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para H.265, las opciones comunes incluyen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Software: &lt;code&gt;libx265&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NVIDIA: &lt;code&gt;hevc_nvenc&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sincronización rápida Intel: &lt;code&gt;hevc_qsv&lt;/code&gt;
-AMD AMF: &lt;code&gt;hevc_amf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;plantillas-de-comandos-típicas&#34;&gt;Plantillas de comandos típicas
&lt;/h2&gt;&lt;h3 id=&#34;codificación-de-software-cpu-mayor-control-de-calidad&#34;&gt;Codificación de software (CPU, mayor control de calidad)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 -c:v libx265 -preset medium -crf &lt;span class=&#34;m&#34;&gt;28&lt;/span&gt; -c:a copy output_x265.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;codificación-de-hardware-nvidia&#34;&gt;Codificación de hardware NVIDIA
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 -c:v hevc_nvenc -preset p5 -cq &lt;span class=&#34;m&#34;&gt;28&lt;/span&gt; -c:a copy output_nvenc.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;sincronización-rápida-intel&#34;&gt;Sincronización rápida Intel
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 -c:v hevc_qsv -global_quality &lt;span class=&#34;m&#34;&gt;28&lt;/span&gt; -c:a copy output_qsv.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;amd-amf&#34;&gt;AMD AMF
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i input.mp4 -c:v hevc_amf -quality quality -rc cqp -qp_i &lt;span class=&#34;m&#34;&gt;28&lt;/span&gt; -qp_p &lt;span class=&#34;m&#34;&gt;28&lt;/span&gt; -c:a copy output_amf.mp4
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;resumen-de-comparación&#34;&gt;Resumen de comparación
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Software (&lt;code&gt;libx265&lt;/code&gt;): normalmente mejor eficiencia de compresión y ajuste de calidad, pero más lento.&lt;/li&gt;
&lt;li&gt;Codificadores de hardware: mucho más rápidos, menor uso de CPU, ideales para necesidades de conversión por lotes/en tiempo real.&lt;/li&gt;
&lt;li&gt;La mejor elección depende de su objetivo:
&lt;ul&gt;
&lt;li&gt;calidad del archivo: prefiera &lt;code&gt;libx265&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;rendimiento rápido: prefiera codificador de hardware&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;consejos-de-evaluación-comparativa&#34;&gt;Consejos de evaluación comparativa
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Mantenga constante la fuente de entrada, la resolución y la tasa de bits/calidad de destino.&lt;/li&gt;
&lt;li&gt;Compare tanto la velocidad (&lt;code&gt;fps&lt;/code&gt;) como el tamaño de salida/calidad visual.&lt;/li&gt;
&lt;li&gt;Pruebe varios ajustes preestablecidos antes de decidir los valores predeterminados de producción.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Ubuntu &#43; LSI: verifique el estado de la unidad con smartctl, localice unidades con storcli64 y realice un intercambio en caliente seguro</title>
        <link>https://knightli.com/es/2025/01/24/ubuntu-lsi-smartctl-storcli64-hot-swap/</link>
        <pubDate>Fri, 24 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/24/ubuntu-lsi-smartctl-storcli64-hot-swap/</guid>
        <description>&lt;h2 id=&#34;verifique-el-estado-de-la-unidad-con-smartctl&#34;&gt;Verifique el estado de la unidad con smartctl
&lt;/h2&gt;&lt;h3 id=&#34;instalar-smartctl&#34;&gt;Instalar smartctl
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install smartmontools
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;verifique-los-puntos-de-montaje-y-el-mapeo-de-dispositivos&#34;&gt;Verifique los puntos de montaje y el mapeo de dispositivos
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;leer-información-smart-para-conducir&#34;&gt;Leer información SMART para conducir
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo smartctl -a /dev/sda
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;utilice-storcli64-para-asignar-ranuras-y-unidades-físicas&#34;&gt;Utilice storcli64 para asignar ranuras y unidades físicas
&lt;/h2&gt;&lt;p&gt;Para tarjetas LSI/Broadcom RAID/HBA, &lt;code&gt;storcli64&lt;/code&gt; ayuda a mapear:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;unidad virtual/dispositivo de bloqueo del sistema operativo&lt;/li&gt;
&lt;li&gt;ID de gabinete e ID de ranura&lt;/li&gt;
&lt;li&gt;serie/modelo/estado de la unidad física&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Comandos comunes:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 show
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 show
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 /eall /sall show
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 /vall show all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;flujo-de-trabajo-de-reemplazo-de-intercambio-en-caliente-seguro&#34;&gt;Flujo de trabajo de reemplazo de intercambio en caliente seguro
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Identifique la unidad fallida por ID de ranura.&lt;/li&gt;
&lt;li&gt;Confirme el estado de la matriz y el disco virtual afectado.&lt;/li&gt;
&lt;li&gt;Si es necesario, primero marque el disco de destino como fuera de línea.&lt;/li&gt;
&lt;li&gt;Reemplace físicamente el disco (chasis/plano posterior compatible con intercambio en caliente).&lt;/li&gt;
&lt;li&gt;Confirme que se detecte un disco nuevo.&lt;/li&gt;
&lt;li&gt;Inicie o supervise la reconstrucción.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Comandos de ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Show all physical disks&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 /eall /sall show
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Show rebuild status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 /vall show rebuild
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Show detailed drive status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;storcli64 /c0 /e&amp;lt;enclosure&amp;gt; /s&amp;lt;slot&amp;gt; show all
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;notas&#34;&gt;Notas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Verifique siempre la ranura antes de sacar cualquier disco.&lt;/li&gt;
&lt;li&gt;Evite reemplazar la unidad incorrecta en matrices degradadas.&lt;/li&gt;
&lt;li&gt;Mantener implementados los procedimientos de ventana de respaldo y mantenimiento.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Solucionar problemas de reconexión automática de OpenWrt WireGuard</title>
        <link>https://knightli.com/es/2025/01/19/openwrt-wireguard-auto-reconnect/</link>
        <pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/19/openwrt-wireguard-auto-reconnect/</guid>
        <description>&lt;h2 id=&#34;solución-alternativa-de-reconexión-automática-de-openwrt-wireguard&#34;&gt;Solución alternativa de reconexión automática de OpenWrt WireGuard
&lt;/h2&gt;&lt;p&gt;Cuando se utiliza WireGuard en OpenWrt con DNS dinámico, un cambio de IP de un par puede dejar el túnel obsoleto después de muchas horas. En algunos entornos no se recupera automáticamente y requiere un reinicio manual.&lt;/p&gt;
&lt;h3 id=&#34;método-1-script-personalizado&#34;&gt;Método 1: script personalizado
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; ! ping -c &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &amp;lt;peer-wg-ip&amp;gt; &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;The WireGuard is down! Now try restarting wg0!&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; ./ddns-wg0.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ifdown wg0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  sleep &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ifup wg0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;método-2-script-de-vigilancia-openwrt-integrado&#34;&gt;Método 2: script de vigilancia OpenWrt integrado
&lt;/h3&gt;&lt;p&gt;OpenWrt incluye &lt;code&gt;/usr/bin/wireguard_watchdog&lt;/code&gt; (el contenido se omite aquí por brevedad). Comprueba la actividad del protocolo de enlace entre pares y puede volver a resolver los nombres de host de los puntos finales cuando un par está inactivo durante demasiado tiempo.&lt;/p&gt;
&lt;h3 id=&#34;ejecutado-por-cron&#34;&gt;Ejecutado por cron
&lt;/h3&gt;&lt;p&gt;Utilice cron para ejecutar el mecanismo de vigilancia periódicamente.&lt;/p&gt;
&lt;h4 id=&#34;a-través-de-la-interfaz-de-usuario-web&#34;&gt;A través de la interfaz de usuario web
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;Abra &lt;code&gt;Sistema -&amp;gt; Tareas programadas&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Agregue:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* * * * * /usr/bin/wireguard_watchdog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;a-través-de-ssh&#34;&gt;A través de SSH
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;SSH en OpenWrt.&lt;/li&gt;
&lt;li&gt;Ejecute &lt;code&gt;crontab -e&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Agregue:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* * * * * /usr/bin/wireguard_watchdog
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Guarde y reinicie cron si es necesario.&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>Solucionar el error de vgextend: los dispositivos tienen tamaños de bloques lógicos inconsistentes</title>
        <link>https://knightli.com/es/2025/01/17/fix-vgextend-inconsistent-logical-block-size/</link>
        <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/17/fix-vgextend-inconsistent-logical-block-size/</guid>
        <description>&lt;h2 id=&#34;por-qué-ocurre-este-error&#34;&gt;Por qué ocurre este error
&lt;/h2&gt;&lt;p&gt;Esto suele ocurrir cuando el nuevo disco agregado por &lt;code&gt;vgextend&lt;/code&gt; tiene un tamaño de bloque lógico diferente al de los discos que ya están en el VG.&lt;/p&gt;
&lt;p&gt;Ejemplo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Los discos VG existentes utilizan sectores lógicos de 512 bytes.&lt;/li&gt;
&lt;li&gt;El dispositivo recién agregado utiliza sectores lógicos 4K&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Entonces &lt;code&gt;vgextend&lt;/code&gt; puede fallar con este error.&lt;/p&gt;
&lt;h2 id=&#34;solución-1-habilite-tamaños-de-bloques-mixtos-en-lvmconf&#34;&gt;Solución 1: habilite tamaños de bloques mixtos en lvm.conf
&lt;/h2&gt;&lt;p&gt;Edite &lt;code&gt;/etc/lvm/lvm.conf&lt;/code&gt; y configure:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allow_mixed_block_sizes=1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Discusión de referencia:&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://serverfault.com/questions/1150643/is-it-safe-to-use-allow-mixed-block-sizes-1-in-lvm-when-using-ext4-with-4k-blo&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://serverfault.com/questions/1150643/is-it-safe-to-use-allow-mixed-block-sizes-1-in-lvm-when-using-ext4-with-4k-blo&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;solución-2-hacer-que-los-tamaños-de-los-bloques-sean-consistentes&#34;&gt;Solución 2: hacer que los tamaños de los bloques sean consistentes
&lt;/h2&gt;&lt;p&gt;Ajuste los tamaños de los bloques lógicos del dispositivo para que todos los discos del VG utilicen una configuración coherente.&lt;/p&gt;
&lt;h3 id=&#34;comprobar-el-tamaño-del-bloque-lógico&#34;&gt;Comprobar el tamaño del bloque lógico
&lt;/h3&gt;&lt;h4 id=&#34;lsblk&#34;&gt;&lt;code&gt;lsblk&lt;/code&gt;
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -td
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;PHY-SEC&lt;/code&gt; es el tamaño del sector físico, &lt;code&gt;LOG-SEC&lt;/code&gt; es el tamaño del sector lógico.&lt;/p&gt;
&lt;h4 id=&#34;sysfs&#34;&gt;&lt;code&gt;sysfs&lt;/code&gt;
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/class/block/sda/queue/physical_block_size
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /sys/class/block/sda/queue/logical_block_size
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;fdisco&#34;&gt;&lt;code&gt;fdisco&lt;/code&gt;
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo fdisk -l /dev/sda
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Mire &amp;ldquo;Tamaño del sector (lógico/físico)&amp;rdquo;.&lt;/p&gt;
&lt;h4 id=&#34;smartctl-nvme&#34;&gt;&lt;code&gt;smartctl&lt;/code&gt; (NVMe)
&lt;/h4&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo smartctl -a /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Marque &amp;ldquo;Tamaños LBA admitidos&amp;rdquo;; &lt;code&gt;+&lt;/code&gt; indica el formato LBA seleccionado actualmente.&lt;/p&gt;
&lt;h3 id=&#34;cambiar-lbatamaño-de-bloque-lógico&#34;&gt;Cambiar LBA/tamaño de bloque lógico
&lt;/h3&gt;&lt;p&gt;Advertencia: formatear o cambiar la configuración de LBA puede destruir datos.&lt;/p&gt;
&lt;h4 id=&#34;para-hdd-sata-si-es-compatible&#34;&gt;Para HDD SATA (si es compatible)
&lt;/h4&gt;&lt;p&gt;Verifique los tamaños de sector admitidos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo hdparm -I /dev/sdX &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;Sector size:&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si es compatible, cambie a 4K (ejemplo):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hdparm --set-sector-size &lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt; --please-destroy-my-drive /dev/sdX
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Verificar:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hdparm -I /dev/sdX &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s1&#34;&gt;&amp;#39;Sector size:&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id=&#34;para-ssd-nvme&#34;&gt;Para SSD NVMe
&lt;/h4&gt;&lt;p&gt;Verifique los formatos LBA admitidos:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nvme id-ns -H /dev/nvme0n1 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;Relative Performance&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;smartctl -c /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Formato para apuntar al formato LBA (ejemplo):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvme format --lbaf&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;lbaf&lt;/code&gt; corresponde al ID de formato. Esta operación borrará los datos y luego requerirá pasos de reinicio/reinicialización.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Usando LVM para administrar discos en Ubuntu</title>
        <link>https://knightli.com/es/2025/01/17/lvm-on-ubuntu/</link>
        <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/17/lvm-on-ubuntu/</guid>
        <description>&lt;h2 id=&#34;qué-es-lvm&#34;&gt;¿Qué es LVM?
&lt;/h2&gt;&lt;p&gt;LVM (Logical Volume Manager) es un mecanismo de Linux para administrar particiones de disco. Inserta una capa lógica entre los discos físicos y los sistemas de archivos, de modo que el espacio en disco se puede asignar y ajustar de manera más flexible.&lt;/p&gt;
&lt;p&gt;Flujo de trabajo típico de LVM:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inicializar discos como volúmenes físicos (PV)&lt;/li&gt;
&lt;li&gt;Combinar PV en un grupo de volumen (VG)&lt;/li&gt;
&lt;li&gt;Crear volúmenes lógicos (LV) dentro del VG.&lt;/li&gt;
&lt;li&gt;Crear sistemas de archivos en LV&lt;/li&gt;
&lt;li&gt;Montaje y uso&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con LVM, un sistema de archivos puede abarcar varios discos y cambiar su tamaño dinámicamente.&lt;/p&gt;
&lt;h2 id=&#34;conceptos-básicos-de-lvm&#34;&gt;Conceptos básicos de LVM
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Medios físicos: dispositivos de almacenamiento subyacentes como &lt;code&gt;/dev/sda&lt;/code&gt;, &lt;code&gt;/dev/nvme0n1&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Volumen físico (PV): un disco/partición inicializado para LVM.&lt;/li&gt;
&lt;li&gt;Grupo de volumen (VG): un conjunto de almacenamiento formado por uno o más PV.&lt;/li&gt;
&lt;li&gt;Volumen lógico (LV): partición virtual asignable creada a partir de un VG.&lt;/li&gt;
&lt;li&gt;Extensión Física (PE): unidad de asignación de tamaño fijo en un VG.&lt;/li&gt;
&lt;li&gt;Extensión Lógica (LE): unidad de asignación utilizada por un LV (mapeada desde PE).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;instalar&#34;&gt;Instalar
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install lvm2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;administrar-pv&#34;&gt;Administrar PV
&lt;/h2&gt;&lt;h3 id=&#34;crear-pv&#34;&gt;Crear PV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvcreate &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; devname ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example: initialize /dev/sdb and /dev/sdc as PV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvcreate /dev/sdb /dev/sdc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;ver-pv&#34;&gt;Ver PV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvdisplay &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; devname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvdisplay /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;eliminar-pv&#34;&gt;Eliminar PV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvremove &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; pvname ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pvremove /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;administrar-vg&#34;&gt;Administrar VG
&lt;/h2&gt;&lt;h3 id=&#34;crear-vg&#34;&gt;Crear VG
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgcreate &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; vgname pvname ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example: create vg1 with /dev/sdb and /dev/sdc&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgcreate vg1 /dev/sdb /dev/sdc
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;ver-vídeo-gráfico&#34;&gt;Ver vídeo gráfico
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgdisplay &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;vgname&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgdisplay vg1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;extender-vg&#34;&gt;Extender VG
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgextend &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; vgname pvname ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgextend vg1 /dev/sdb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;reducir-vg&#34;&gt;Reducir VG
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgreduce &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; vgname pvname ...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgreduce vg1 /dev/sdb2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;eliminar-vg&#34;&gt;Eliminar VG
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgremove &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; vgname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vgremove vg1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;administrar-vi&#34;&gt;Administrar VI
&lt;/h2&gt;&lt;h3 id=&#34;crear-lv&#34;&gt;Crear LV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvcreate &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; vgname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example 1: create a 10G LV in vg1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvcreate -L 10G vg1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example 2: create a 200M LV named lv1 in vg1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvcreate -L 200M -n lv1 vg1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;ver-lv&#34;&gt;Ver LV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvdisplay &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;lvname&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvdisplay /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;cambiar-tamaño-lv&#34;&gt;Cambiar tamaño LV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvresize &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lvname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add 200M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvresize -L +200M /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Reduce 200M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvresize -L -200M /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use all free space in VG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvresize -l +100%FREE /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;extender-lv&#34;&gt;Extender LV
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvextend &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lvname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Add 100M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvextend -L +100M /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use all free space&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvextend -l +100%FREE /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;reducir-el-vi&#34;&gt;Reducir el VI
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvreduce &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lvname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Reduce 100M&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvreduce -L -100M /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;eliminar-vi&#34;&gt;Eliminar VI
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvremove &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lvname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lvremove /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;crear-y-montar-sistema-de-archivos&#34;&gt;Crear y montar sistema de archivos
&lt;/h2&gt;&lt;h3 id=&#34;crear-sistema-de-archivos&#34;&gt;Crear sistema de archivos
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkfs &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;option&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; lvname
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example: create ext4 on LV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkfs -t ext4 /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;montar-manualmente&#34;&gt;Montar manualmente
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount lvname mntpath
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Example&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/vg1/lv1 /mnt/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;cambiar-el-tamaño-del-sistema-de-archivos-después-del-cambio-de-tamaño-de-lv&#34;&gt;Cambiar el tamaño del sistema de archivos después del cambio de tamaño de LV
&lt;/h2&gt;&lt;p&gt;Después de ampliar un LV, el tamaño del sistema de archivos no aumenta automáticamente en muchos casos. Para ext4:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Unmount first (recommended for safety)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umount /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Check and repair file system&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;e2fsck -f /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Resize file system to fill LV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;resize2fs /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En algunos escenarios, también es posible cambiar el tamaño en línea:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;resize2fs /dev/vg1/lv1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>Codificar MP3 con ffmpeg</title>
        <link>https://knightli.com/es/2025/01/07/encode-mp3-with-ffmpeg/</link>
        <pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/07/encode-mp3-with-ffmpeg/</guid>
        <description>&lt;h2 id=&#34;modos-de-velocidad-de-bits-de-mp3&#34;&gt;Modos de velocidad de bits de MP3
&lt;/h2&gt;&lt;p&gt;La codificación MP3 suele utilizar uno de tres modos de velocidad de bits: &lt;code&gt;VBR&lt;/code&gt;, &lt;code&gt;ABR&lt;/code&gt; y &lt;code&gt;CBR&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;cbr-tasa-de-bits-constante&#34;&gt;CBR (tasa de bits constante)
&lt;/h3&gt;&lt;p&gt;CBR significa que la tasa de bits se fija en el tiempo.&lt;br&gt;
Por ejemplo, con CBR de 128 kbps, cada segundo se codifica a 128 kb. El tamaño del archivo es predecible.&lt;/p&gt;
&lt;h3 id=&#34;vbr-tasa-de-bits-variable&#34;&gt;VBR (tasa de bits variable)
&lt;/h3&gt;&lt;p&gt;VBR no tiene una tasa de bits fija. El codificador utiliza dinámicamente una tasa de bits más alta para audio complejo y una tasa de bits más baja para partes simples.&lt;br&gt;
Esto a menudo proporciona un mejor equilibrio entre calidad y tamaño.&lt;/p&gt;
&lt;h3 id=&#34;abr-tasa-de-bits-promedio&#34;&gt;ABR (tasa de bits promedio)
&lt;/h3&gt;&lt;p&gt;ABR apunta a una tasa de bits promedio. Es un compromiso entre CBR y VBR.&lt;br&gt;
En comparación con CBR con la misma tasa de bits nominal, ABR generalmente ofrece mejor calidad con un tamaño similar.&lt;/p&gt;
&lt;h2 id=&#34;utilice-ffmpeg-para-codificar&#34;&gt;Utilice ffmpeg para codificar
&lt;/h2&gt;&lt;h3 id=&#34;tasa-de-bits-variable-vbr&#34;&gt;Tasa de bits variable (VBR)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i sample.wav -vn -c:a libmp3lame -aq &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -ac &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; sample.mp3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Notes:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -i   input file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -vn  disable video&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -c:a audio codec (copy / libmp3lame / aac ...)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -aq  VBR quality; smaller value usually means better quality and larger file&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -ac  channel count&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;tasa-de-bits-constante-cbr&#34;&gt;Tasa de bits constante (CBR)
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i sample.wav -vn -c:a libmp3lame -b:a 192k -ac &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; sample.mp3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -b:a fixed audio bitrate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;eliminar-metadatos&#34;&gt;Eliminar metadatos
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ffmpeg -i sample.wav -map_metadata -1 -vn -c:a libmp3lame -aq &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; -ac &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; sample.mp3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -map_metadata -1 removes metadata&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>Cómo intercambiar discos duros en caliente de forma segura (hágalo bien y evite daños al hardware)</title>
        <link>https://knightli.com/es/2025/01/01/safe-hdd-hot-swap/</link>
        <pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2025/01/01/safe-hdd-hot-swap/</guid>
        <description>&lt;h2 id=&#34;requisito-previo-el-hardware-debe-admitir-el-intercambio-en-caliente&#34;&gt;Requisito previo: el hardware debe admitir el intercambio en caliente
&lt;/h2&gt;&lt;p&gt;Primero confirme que el backplane/controlador de su unidad y la plataforma admitan el intercambio en caliente. Este es el requisito básico.&lt;/p&gt;
&lt;h2 id=&#34;configuración-del-bios-que-necesita&#34;&gt;Configuración del BIOS que necesita
&lt;/h2&gt;&lt;p&gt;Usando ASUS como ejemplo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Presione &lt;code&gt;F2&lt;/code&gt; o &lt;code&gt;DEL&lt;/code&gt; durante el arranque para ingresar al BIOS.&lt;/li&gt;
&lt;li&gt;Cambie al &amp;ldquo;Modo avanzado&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Vaya a &lt;code&gt;Avanzado -&amp;gt; Configuración de almacenamiento PCH&lt;/code&gt;, busque el puerto SATA de destino y configure &lt;code&gt;Hot Plug&lt;/code&gt; en &lt;code&gt;Activado&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Presione &lt;code&gt;F10&lt;/code&gt; para guardar y salir.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Después de esto, el intercambio en caliente debería estar disponible. Otras marcas de placas base ofrecen opciones similares.&lt;/p&gt;
&lt;h2 id=&#34;pasos-del-sistema-operativo&#34;&gt;Pasos del sistema operativo
&lt;/h2&gt;&lt;h3 id=&#34;ventanas&#34;&gt;ventanas
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;Detenga la actividad de E/S en la unidad de destino.&lt;/li&gt;
&lt;li&gt;En el Administrador de dispositivos, busque la unidad y elija desinstalar/expulsar el dispositivo.&lt;br&gt;
&lt;img src=&#34;https://knightli.com/2025/01/01/%E6%AD%A3%E7%A1%AE%E7%83%AD%E6%8F%92%E6%8B%94%E6%9C%BA%E6%A2%B0%E7%A1%AC%E7%9B%98/1.jpg&#34;
	width=&#34;983&#34;
	height=&#34;704&#34;
	srcset=&#34;https://knightli.com/2025/01/01/%E6%AD%A3%E7%A1%AE%E7%83%AD%E6%8F%92%E6%8B%94%E6%9C%BA%E6%A2%B0%E7%A1%AC%E7%9B%98/1_hu_4cee7f09f8d3a57e.jpg 480w, https://knightli.com/2025/01/01/%E6%AD%A3%E7%A1%AE%E7%83%AD%E6%8F%92%E6%8B%94%E6%9C%BA%E6%A2%B0%E7%A1%AC%E7%9B%98/1_hu_2675a424ac071a8d.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;139&#34;
		data-flex-basis=&#34;335px&#34;
	
&gt;&lt;/li&gt;
&lt;li&gt;Después de una extracción exitosa, desconecte físicamente la unidad.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;###Linux&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Detenga la actividad de E/S en la unidad de destino.&lt;/li&gt;
&lt;li&gt;Desmonte el sistema de archivos (por ejemplo, &lt;code&gt;umount /dev/sda&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Si usa LVM, desactive el grupo de volúmenes (por ejemplo, &lt;code&gt;vgchange -an&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Ponga el disco en modo de espera (por ejemplo, &lt;code&gt;sudo hdparm -Y /dev/sda&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Retire el dispositivo del sistema operativo (&lt;code&gt;echo 1 | sudo tee /sys/block/sda/device/delete&lt;/code&gt;).
Después de este comando, verifique que el disco haya dejado de girar por completo antes de desconectar la alimentación o los datos. Tirar de un disco duro que aún gira puede dañar el conjunto del cabezal/plato.&lt;/li&gt;
&lt;li&gt;Una vez que se completen los pasos anteriores, desconecte la unidad.&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>inpaint-web: herramienta de superresolución, eliminación de marcas de agua y pintura de imágenes de código abierto y gratuita</title>
        <link>https://knightli.com/es/2024/10/24/inpaint-web/</link>
        <pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2024/10/24/inpaint-web/</guid>
        <description>&lt;h2 id=&#34;inpaint-web&#34;&gt;inpaint-web
&lt;/h2&gt;&lt;p&gt;inpaint-web es una herramienta gratuita y de código abierto para mejorar imágenes y pintar, construida sobre tecnologías WebGPU y WASM, implementada completamente en el navegador.
GitHub: &lt;a class=&#34;link&#34; href=&#34;https://github.com/lxfater/inpaint-web/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/lxfater/inpaint-web/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;características-principales&#34;&gt;Características principales
&lt;/h2&gt;&lt;h3 id=&#34;reparación-de-imágenes-y-eliminación-de-marcas-de-agua&#34;&gt;Reparación de imágenes y eliminación de marcas de agua
&lt;/h3&gt;&lt;p&gt;&lt;font size=5&gt; Imagen original &lt;/font&gt;&lt;br&gt;
&lt;img src=&#34;https://knightli.com/zapato1.jfif&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=5&gt; Resultados reparados (diferentes regiones reparadas y posiciones de borrado) &lt;/font&gt;&lt;br&gt;
&lt;img src=&#34;https://knightli.com/zapato2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt; &lt;br&gt;
&lt;img src=&#34;https://knightli.com/zapato3.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;br&gt;
&lt;img src=&#34;https://knightli.com/zapato4.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=5&gt; Imagen original &lt;/font&gt;&lt;br&gt;
&lt;img src=&#34;https://knightli.com/ciudad1.jfif&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;  &lt;br&gt;
&lt;font size=5&gt; Borrar parte del contenido &lt;/font&gt; &lt;br&gt;
&lt;img src=&#34;https://knightli.com/ciudad2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;mejora-de-desenfoque-a-claro&#34;&gt;Mejora de desenfoque a claro
&lt;/h3&gt;&lt;p&gt;&lt;font size=5&gt; Imagen original &lt;/font&gt;&lt;br&gt;
&lt;img src=&#34;dog1.webp&#34; ancho=&#34;1100&#34; alto=&#34;732&#34;/&gt;&lt;br&gt;
&lt;font size=5&gt; Después de una ampliación 4x &lt;/font&gt; &lt;br&gt;
&lt;img src=&#34;https://knightli.com/perro2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;font size=5&gt; Imagen original &lt;/font&gt;&lt;br&gt;
&lt;img src=&#34;car1.webp&#34; ancho=&#34;1024&#34; alto=&#34;1024&#34;/&gt;&lt;br&gt;
&lt;font size=5&gt; Después de una ampliación 4x &lt;/font&gt; &lt;br&gt;
&lt;img src=&#34;https://knightli.com/coche2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Rangos de frecuencia de canales Wi-Fi comunes: 2,4G y 5G (5,2G/5,5G/5,8G)</title>
        <link>https://knightli.com/es/2024/09/29/wifi-frequency-bands/</link>
        <pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2024/09/29/wifi-frequency-bands/</guid>
        <description>&lt;h2 id=&#34;rangos-de-canales-wi-fi-comunes-24g-y-5g-52g55g58g&#34;&gt;Rangos de canales Wi-Fi comunes: 2,4G y 5G (5,2G/5,5G/5,8G)
&lt;/h2&gt;&lt;h3 id=&#34;banda-de-24-ghz&#34;&gt;Banda de 2,4 GHz
&lt;/h3&gt;&lt;p&gt;La banda de 2,4 GHz se divide en canales espaciados por 5 MHz. Dependiendo de la región, la disponibilidad de canales varía. El funcionamiento de 40 MHz normalmente se forma uniendo canales adyacentes de 20 MHz.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/2.4g.png&#34;
	width=&#34;1026&#34;
	height=&#34;246&#34;
	srcset=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/2.4g_hu_1d0a5f01e12ac2fb.png 480w, https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/2.4g_hu_90c3aec7d8fc2931.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;417&#34;
		data-flex-basis=&#34;1000px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;banda-de-5-ghz&#34;&gt;Banda de 5 GHz
&lt;/h3&gt;&lt;h4 id=&#34;banda-52g&#34;&gt;Banda 5,2G
&lt;/h4&gt;&lt;p&gt;Los canales comunes incluyen 36, 40, 44, 48, 52, 56, 60, 64.&lt;br&gt;
En algunos ámbitos regulatorios, los canales DFS (como 52-64) pueden estar restringidos o requerir un comportamiento de detección de radar.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.2g.png&#34;
	width=&#34;1024&#34;
	height=&#34;212&#34;
	srcset=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.2g_hu_69184bd47b7224e8.png 480w, https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.2g_hu_b93b04fe0c8b14c5.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;483&#34;
		data-flex-basis=&#34;1159px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;banda-55g&#34;&gt;Banda 5,5G
&lt;/h4&gt;&lt;p&gt;5,5 GHz es parte de la asignación más amplia de 5 GHz. Los planes de canales varían según el país/región.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.5g.png&#34;
	width=&#34;1025&#34;
	height=&#34;214&#34;
	srcset=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.5g_hu_487855bc6b1660a9.png 480w, https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.5g_hu_655d445282e4cb37.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;478&#34;
		data-flex-basis=&#34;1149px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;banda-58g&#34;&gt;Banda 5,8G
&lt;/h4&gt;&lt;p&gt;En las reglas CN, los canales comunes son 149, 153, 157, 161, 165.&lt;br&gt;
Ejemplos típicos de unión:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;80MHz: 149-161&lt;/li&gt;
&lt;li&gt;40 MHz: 149-153 o 157-161&lt;/li&gt;
&lt;li&gt;20 MHz: solo canal 165&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.8g.png&#34;
	width=&#34;1025&#34;
	height=&#34;173&#34;
	srcset=&#34;https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.8g_hu_9b598785b65fb427.png 480w, https://knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.8g_hu_c53dc74aa41c072e.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;592&#34;
		data-flex-basis=&#34;1421px&#34;
	
&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Xiaomi AX3600: MIBIB y compatibilidad de firmware</title>
        <link>https://knightli.com/es/2024/07/09/xiaomi-ax3600-mibib-firmware-compatibility/</link>
        <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2024/07/09/xiaomi-ax3600-mibib-firmware-compatibility/</guid>
        <description>&lt;h2 id=&#34;enrutador-xiaomi-mibib&#34;&gt;Enrutador Xiaomi MIBIB
&lt;/h2&gt;&lt;p&gt;En los flujos de trabajo del AX3600 se utilizan dos archivos MIBIB comunes:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;MIBIB de acciones de Xiaomi
&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/mibib.xiaomi.bin&#34;&gt;stock mibib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;MIBIB relacionado con QSDK (a menudo utilizado en algunos flujos de trabajo de actualización de U-Boot)
&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/mibib.qsdk.bin&#34;&gt;qsdk mibib&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;mibib-y-mapeo-de-firmware&#34;&gt;MIBIB y mapeo de firmware
&lt;/h2&gt;&lt;p&gt;Las diferentes variantes de MIBIB corresponden a diferentes imágenes de firmware. Si el firmware/MIBIB no coincide, es posible que el dispositivo no arranque (incluso que U-Boot no se inicie).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El firmware suele coincidir con el MIBIB original:
&lt;ul&gt;
&lt;li&gt;la mayoría de las imágenes de estilo OpenWrt AI&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Firmware que normalmente coincide con QSDK MIBIB:
&lt;ul&gt;
&lt;li&gt;Compilaciones de firmware basadas en QSDK&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Firmware que puede funcionar en ambos diseños (contiene adaptación dual):
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/openwrt-ipq807x-generic-redmi_ax6-squashfs.ubi&#34;&gt;openwrt-ipq807x-generic-redmi_ax6-squashfs.ubi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;compruebe-qué-mibib-está-en-el-enrutador&#34;&gt;Compruebe qué MIBIB está en el enrutador
&lt;/h2&gt;&lt;p&gt;Cargue &lt;code&gt;mibib.xiaomi.bin&lt;/code&gt; y &lt;code&gt;mibib.qsdk.bin&lt;/code&gt; a &lt;code&gt;/tmp&lt;/code&gt;, luego verifique:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd verify /tmp/mibib.xiaomi.bin /dev/mtd1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd verify /tmp/mibib.qsdk.bin /dev/mtd1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;recursos-de-recuperación-de-ax3600&#34;&gt;Recursos de recuperación de AX3600
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Archivos de copia de seguridad relacionados con el arranque del AX3600:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/ax3600bak.appsbl.bin&#34;&gt;ax3600bak.appsbl.bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/ax3600bak.mibib.bin&#34;&gt;ax3600bak.mibib.bin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Primero verifique el mapeo de particiones:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/mtd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de confirmar &lt;code&gt;mtd1&lt;/code&gt; y &lt;code&gt;mtd7&lt;/code&gt;, escriba copias de seguridad:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd erase /dev/mtd1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd write /tmp/ax3600bak.mibib.bin /dev/mtd1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd erase /dev/mtd7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd write /tmp/ax3600bak.appsbl.bin /dev/mtd7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Archivos de firmware originales:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/miwifi_r3600_firmware_5da25_1.0.17.bin&#34;&gt;miwifi_r3600_firmware_5da25_1.0.17.bin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://knightli.com/2024/07/09/%E5%B0%8F%E7%B1%B3-ax3600-mibib-%E5%9B%BA%E4%BB%B6%E5%85%BC%E5%AE%B9/miwifi_r3600_firmware_d1610_1.1.21.bin&#34;&gt;miwifi_r3600_firmware_d1610_1.1.21.bin&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;notas&#34;&gt;Notas
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Siempre haga una copia de seguridad de las particiones clave antes de flashear.&lt;/li&gt;
&lt;li&gt;Verifique la compatibilidad MIBIB/firmware antes de escribir.&lt;/li&gt;
&lt;li&gt;Evite el flasheo cruzado de la familia de firmware y el diseño de arranque a ciegas.&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Ajuste del sistema OpenStick Debian: AP Wi-Fi y optimización de la compresión</title>
        <link>https://knightli.com/es/2023/10/28/openstick-debian-wifi-ap-optimization/</link>
        <pubDate>Sat, 28 Oct 2023 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2023/10/28/openstick-debian-wifi-ap-optimization/</guid>
        <description>&lt;h2 id=&#34;cambio-de-modo-usb&#34;&gt;Cambio de modo USB
&lt;/h2&gt;&lt;p&gt;Cuando se cambia al modo &amp;ldquo;host&amp;rdquo;, el dispositivo puede usar periféricos USB (incluidos adaptadores Wi-Fi).&lt;br&gt;
Cuando se cambia al modo &amp;ldquo;dispositivo&amp;rdquo;, puede exponer la red USB/ADB a una PC.&lt;/p&gt;
&lt;h3 id=&#34;cambiar-al-modo-anfitrión&#34;&gt;Cambiar al modo anfitrión
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; host &amp;gt; /sys/kernel/debug/usb/ci_hdrc.0/role
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;volver-al-modo-gadget&#34;&gt;Volver al modo gadget
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; gadget &amp;gt; /sys/kernel/debug/usb/ci_hdrc.0/role
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;cambio-automático-al-arrancar&#34;&gt;Cambio automático al arrancar
&lt;/h3&gt;&lt;p&gt;Agregue a &lt;code&gt;/etc/rc.local&lt;/code&gt; antes de &lt;code&gt;exit 0&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# usb auto host&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sleep &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grep &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; /sys/kernel/debug/usb/ci_hdrc.0/device &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep speed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$?&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; host &amp;gt; /sys/kernel/debug/usb/ci_hdrc.0/role
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Esto verifica si hay una conexión a una PC; de lo contrario, cambia al modo host para dispositivos USB externos.&lt;/p&gt;
&lt;h2 id=&#34;optimización-de-compresión-para-almacenamiento-interno-limitado&#34;&gt;Optimización de compresión para almacenamiento interno limitado
&lt;/h2&gt;&lt;p&gt;Algunos dispositivos Wi-Fi tienen un almacenamiento muy limitado (por ejemplo, 4 GB). Habilitar una compresión más fuerte puede reducir significativamente el uso.&lt;/p&gt;
&lt;h3 id=&#34;utilice-btrfs-admite-compresión-transparente&#34;&gt;Utilice Btrfs (admite compresión transparente)
&lt;/h3&gt;&lt;p&gt;Convierta la imagen raíz a Btrfs (asegúrese de que el kernel sea compatible con Btrfs):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;btrfs-convert root.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;opciones-de-montaje-de-sintonización&#34;&gt;Opciones de montaje de sintonización
&lt;/h3&gt;&lt;p&gt;Los niveles más altos de &lt;code&gt;zstd&lt;/code&gt; reducen aún más el tamaño pero usan más CPU. Para equilibrar el rendimiento, ajústelo a su dispositivo.&lt;/p&gt;
&lt;p&gt;Ejemplo de prueba de remontaje:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount -o remount,defaults,noatime,compress&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zstd:6,commit&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;120&lt;/span&gt; /dev/mmcblk0p14 /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;recomprimir-archivos-existentes&#34;&gt;Recomprimir archivos existentes
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo btrfs filesystem defragment -r -v -czstd /
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;En la prueba original, una compresión más fuerte redujo notablemente el espacio utilizado.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Reconstruir el firmware de Debian para OpenStick Wi-Fi Stick</title>
        <link>https://knightli.com/es/2023/08/09/openstick-wifi-debian-firmware-build/</link>
        <pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2023/08/09/openstick-wifi-debian-firmware-build/</guid>
        <description>&lt;h2 id=&#34;preparación-del-entorno&#34;&gt;Preparación del entorno
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Instale Ubuntu 22.04.2 LTS.&lt;/li&gt;
&lt;li&gt;Instalar dependencias:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install binfmt-support qemu-user-static gcc-10-aarch64-linux-gnu kernel-package fakeroot simg2img img2simg mkbootimg bison flex gcc-aarch64-linux-gnu pkg-config libncurses-dev libssl-dev unzip git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;descargar-fuente&#34;&gt;Descargar fuente
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/OpenStick/linux.git --depth&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;construcción-del-núcleo&#34;&gt;Construcción del núcleo
&lt;/h2&gt;&lt;h3 id=&#34;ajuste-de-la-tabla-de-frecuencia-de-la-cpu&#34;&gt;Ajuste de la tabla de frecuencia de la CPU
&lt;/h3&gt;&lt;p&gt;Editar:
&lt;code&gt;linux/drivers/clk/qcom/a53-pll.c&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ajuste/extienda las entradas de frecuencia con cuidado, equilibrando el rendimiento, la potencia y las térmicas.&lt;/p&gt;
&lt;p&gt;Edite la tabla DTS OPP según sea necesario:
&lt;code&gt;linux/arch/arm64/boot/dts/qcom/msm8916.dtsi&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;pasos-de-construcción&#34;&gt;Pasos de construcción
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CROSS_COMPILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;aarch64-linux-gnu-
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;ARCH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;arm64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make msm8916_defconfig
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make menuconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;soporte-serie-usb-para-dispositivos-usb-tipo-klipper&#34;&gt;Soporte serie USB (para dispositivos USB tipo Klipper)
&lt;/h3&gt;&lt;p&gt;Habilite las opciones USB CDC ACM / USB Serial relevantes en &lt;code&gt;menuconfig&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;construir-paquetes&#34;&gt;Construir paquetes
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make -j&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;nproc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; bindeb-pkg
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Resultados esperados:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;archivos del kernel &lt;code&gt;.deb&lt;/code&gt; (&lt;code&gt;linux-image&lt;/code&gt;, &lt;code&gt;linux-headers&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Imagen.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;destino DTB (&lt;code&gt;msm8916-handsome-openstick-*.dtb&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;preparar-imagen-rootfs&#34;&gt;Preparar imagen RootFS
&lt;/h2&gt;&lt;h3 id=&#34;obtener-la-imagen-base-de-debian&#34;&gt;Obtener la imagen base de Debian
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/rootfs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/rootfs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/OpenStick/OpenStick/releases/download/v1/debian.zip &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; unzip debian.zip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ./debian/rootfs.img ~/rootfs
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;convertir-formato-de-imagen&#34;&gt;Convertir formato de imagen
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;simg2img rootfs.img root.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;montar-y-hacer-chroot&#34;&gt;Montar y hacer chroot
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount root.img /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount --bind /proc /mnt/proc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount --bind /dev /mnt/dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount --bind /dev/pts /mnt/dev/pts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mount --bind /sys /mnt/sys
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Copie los archivos deb del kernel en &lt;code&gt;/mnt&lt;/code&gt;, luego:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chroot /mnt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -E &lt;span class=&#34;s2&#34;&gt;&amp;#34;linux-headers|linux-image&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;xargs dpkg -P
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -i *.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm linux-*.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;habilitar-rclocal-con-systemd&#34;&gt;Habilitar rc.local con systemd
&lt;/h3&gt;&lt;p&gt;Cree &lt;code&gt;/etc/systemd/system/rc-local.service&lt;/code&gt; y &lt;code&gt;/etc/rc.local&lt;/code&gt;, luego:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl daemon-reload &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; rc-local
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;limpieza-de-configuración-local-y-fuente-adecuada&#34;&gt;Limpieza de configuración local y fuente adecuada
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Instalar y configurar configuraciones regionales:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install locales
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dpkg-reconfigure locales
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Elimine las entradas inválidas de la lista de fuentes antiguas si es necesario.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;desmontar&#34;&gt;Desmontar
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /mnt/proc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /mnt/dev/pts
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /mnt/dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /mnt/sys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo umount /mnt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;volver-a-convertir-a-imagen-dispersa&#34;&gt;Volver a convertir a imagen dispersa
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;img2simg root.img rootfs.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;crear-imagen-de-arranque&#34;&gt;Crear imagen de arranque
&lt;/h2&gt;&lt;p&gt;Archivos requeridos:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;Imagen.gz&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Destino DTB (para su variante de hardware)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;initrd.img-*&lt;/code&gt; de rootfs &lt;code&gt;/boot&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ejemplo (ufi001c):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat Image.gz msm8916-handsome-openstick-ufi001c.dtb &amp;gt; ufi001c-kernel-dtb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv initrd.img-* initrd.img
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkbootimg --base 0x80000000 --kernel_offset 0x00080000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize &lt;span class=&#34;m&#34;&gt;2048&lt;/span&gt; --second_offset 0x00f00000 --ramdisk initrd.img --cmdline &lt;span class=&#34;s2&#34;&gt;&amp;#34;earlycon root=PARTUUID=a7ab80e8-e9d1-e8cd-f157-93f69b1d141e console=ttyMSM0,115200 no_framebuffer=true rw&amp;#34;&lt;/span&gt; --kernel ufi001c-kernel-dtb -o ufi001c-boot.img
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Reemplace &lt;code&gt;boot.img&lt;/code&gt; y &lt;code&gt;rootfs.img&lt;/code&gt; en el paquete de actualización con sus archivos generados.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Restablecer mdadm RAID en Ubuntu 22.04</title>
        <link>https://knightli.com/es/2023/03/17/reset-mdadm-raid-ubuntu/</link>
        <pubDate>Fri, 17 Mar 2023 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2023/03/17/reset-mdadm-raid-ubuntu/</guid>
        <description>&lt;p&gt;Al probar RAID con &lt;code&gt;mdadm&lt;/code&gt;, es posible que deba restablecer completamente la matriz antes de volver a utilizarla.&lt;/p&gt;
&lt;h2 id=&#34;procedimiento-de-reinicio&#34;&gt;Procedimiento de reinicio
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Verifique el estado actual:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -o NAME,SIZE,FSTYPE,TYPE,MOUNTPOINT
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Si está montado, desmóntelo primero:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umount /mnt/md0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Detenga el dispositivo RAID:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mdadm --stop /dev/md0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;Superbloque cero en cada disco miembro:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mdadm --zero-superblock /dev/nvme0n1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mdadm --zero-superblock /dev/nvme1n1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;Revise si los archivos de configuración también necesitan limpieza:&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/mdadm/mdadm.conf&lt;/code&gt;
-&lt;code&gt;/etc/fstab&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Arreglando el rendimiento de escritura NTFS lento en Ubuntu 22.04</title>
        <link>https://knightli.com/es/2023/03/04/ubuntu-ntfs-write-speed-fix/</link>
        <pubDate>Sat, 04 Mar 2023 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2023/03/04/ubuntu-ntfs-write-speed-fix/</guid>
        <description>&lt;h2 id=&#34;reparar-el-rendimiento-y-la-caché-de-lecturaescritura-de-ntfs-en-ubuntu-2204&#34;&gt;Reparar el rendimiento y la caché de lectura/escritura de NTFS en Ubuntu 22.04
&lt;/h2&gt;&lt;p&gt;En un disco WD HC550, la velocidad de escritura en Windows era de alrededor de 250 MB/s. En Ubuntu, la velocidad de lectura era aceptable (200 MB/s+), pero la velocidad de escritura se redujo a alrededor de 80 MB/s.&lt;/p&gt;
&lt;p&gt;La solución fue ajustar las opciones de montaje en &lt;code&gt;/etc/fstab&lt;/code&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/disk/by-uuid/xxxxxxxxxx /mnt/WD_16T_01 ntfs-3g defaults,lazytime,uid=1000,dmask=007,fmask=117,big_writes,nofail,auto 0 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de este cambio, la velocidad de lectura/escritura volvió a alrededor de 250 MB/s+.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Estación de trabajo DIY de bajo costo con memoria de 256 GB y placa base HP Z440</title>
        <link>https://knightli.com/es/2023/02/26/diy-low-cost-256gb-hp-z440/</link>
        <pubDate>Sun, 26 Feb 2023 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2023/02/26/diy-low-cost-256gb-hp-z440/</guid>
        <description>&lt;h2 id=&#34;por-qué-elegir-la-placa-base-hp-z440&#34;&gt;¿Por qué elegir la placa base HP Z440?
&lt;/h2&gt;&lt;p&gt;Objetivo: construir una máquina con mucha memoria a bajo costo, con buena capacidad de mantenimiento y expansión.&lt;/p&gt;
&lt;h3 id=&#34;elección-de-memoria&#34;&gt;Elección de memoria
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Los módulos DDR4 2133 32GB ECC REG (4R*4) tenían un precio de alrededor de 190 CNY cada uno.&lt;/li&gt;
&lt;li&gt;8 unidades = 256 GB en total.&lt;/li&gt;
&lt;li&gt;La relación costo-rendimiento fue mejor que la mayoría de las alternativas en ese momento.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/1.jpg&#34;
	width=&#34;4000&#34;
	height=&#34;1800&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/1_hu_f317a96ce9fa00e0.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/1_hu_547516cafe1ee2.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;222&#34;
		data-flex-basis=&#34;533px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;elección-de-cpu&#34;&gt;elección de CPU
&lt;/h3&gt;&lt;p&gt;CPU de prueba inicial: &lt;code&gt;E5-2620 v3&lt;/code&gt; (muy bajo costo).&lt;br&gt;
Opciones prácticas posteriores: &lt;code&gt;E5-2620 v4&lt;/code&gt; o &lt;code&gt;E5-2630 v4&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/2.png&#34;
	width=&#34;416&#34;
	height=&#34;432&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/2_hu_cafaa16d0167100a.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/2_hu_d8acaf87bbf7c35c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;96&#34;
		data-flex-basis=&#34;231px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/3.png&#34;
	width=&#34;408&#34;
	height=&#34;430&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/3_hu_6e75d1ef42bd2715.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/3_hu_c98a446757c08b8f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;94&#34;
		data-flex-basis=&#34;227px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;por-qué-no-comprar-el-sistema-z440-completo&#34;&gt;¿Por qué no comprar el sistema Z440 completo?
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Los sistemas completos eran caros.&lt;/li&gt;
&lt;li&gt;La solución de placa autoensamblada + adaptador de fuente de alimentación era mucho más económica.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;notas-de-construcción-y-cableado&#34;&gt;Notas de construcción y cableado
&lt;/h2&gt;&lt;p&gt;Descripción general de la interfaz:
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a2.png&#34;
	width=&#34;835&#34;
	height=&#34;982&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a2_hu_5c0d6d507c6f2810.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a2_hu_240061d18f53b91c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;85&#34;
		data-flex-basis=&#34;204px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;notas-mecánicas-y-de-montaje&#34;&gt;Notas mecánicas y de montaje
&lt;/h3&gt;&lt;p&gt;El tamaño de la placa Z440 es cercano al ATX pero con algunos orificios/posiciones desplazados. Es posible probar el ajuste en casos comunes, pero es posible que necesite ajustes menores.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/24.png&#34;
	width=&#34;400&#34;
	height=&#34;447&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/24_hu_80ba33eda3e2a666.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/24_hu_77be2a28b0b5824.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Parte posterior del tablero&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;89&#34;
		data-flex-basis=&#34;214px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/25.png&#34;
	width=&#34;479&#34;
	height=&#34;232&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/25_hu_52a43e7f45e64145.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/25_hu_b94e5d8ffd788f3f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Detalle del reverso del tablero&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;206&#34;
		data-flex-basis=&#34;495px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;panel-frontalencabezado&#34;&gt;Panel frontal/encabezado
&lt;/h3&gt;&lt;p&gt;Mapeo de encabezado frontal de 25 pines:
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a3.png&#34;
	width=&#34;543&#34;
	height=&#34;289&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a3_hu_5c11e7f609dab9e9.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a3_hu_9b484e6c41f16d6b.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;187&#34;
		data-flex-basis=&#34;450px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;detección-de-ventiladores-y-comprobaciones-de-inicio&#34;&gt;Detección de ventiladores y comprobaciones de inicio
&lt;/h3&gt;&lt;p&gt;El firmware Z440 comprueba varios ventiladores/sensores durante el arranque. La falta de fanáticos esperados puede generar advertencias.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/11.png&#34;
	width=&#34;1426&#34;
	height=&#34;583&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/11_hu_e93a5bcb43e9f38b.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/11_hu_f447275178bcd9cf.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;244&#34;
		data-flex-basis=&#34;587px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;advertencia-de-usb-frontal&#34;&gt;Advertencia de USB frontal
&lt;/h4&gt;&lt;p&gt;Si el USB frontal no está conectado correctamente, pueden aparecer advertencias del BIOS.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a1.png&#34;
	width=&#34;120&#34;
	height=&#34;300&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a1_hu_ef869c1ab32b59e7.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a1_hu_826251114a59b107.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;40&#34;
		data-flex-basis=&#34;96px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/4.png&#34;
	width=&#34;120&#34;
	height=&#34;301&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/4_hu_324d68d5cdd759ed.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/4_hu_20dbd68ca2ddc02a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;39&#34;
		data-flex-basis=&#34;95px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;encabezado-de-audio-frontal&#34;&gt;Encabezado de audio frontal
&lt;/h4&gt;&lt;p&gt;La detección incorrecta de audio frontal puede generar advertencias. En algunos casos, colocar los pines necesarios en bucle puede evitar la detección.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a4.png&#34;
	width=&#34;300&#34;
	height=&#34;235&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a4_hu_ed7d80b0e14fd74e.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a4_hu_dd364acdd5d298bd.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;127&#34;
		data-flex-basis=&#34;306px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/5.jpg&#34;
	width=&#34;300&#34;
	height=&#34;666&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/5_hu_dbe9e0055fec6c8e.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/5_hu_209e1ce81704fb94.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;45&#34;
		data-flex-basis=&#34;108px&#34;
	
&gt;&lt;/p&gt;
&lt;h4 id=&#34;encabezados-de-fans&#34;&gt;Encabezados de fans
&lt;/h4&gt;&lt;p&gt;Se monitorean los encabezados de los ventiladores de la CPU y la memoria.&lt;br&gt;
El ventilador de la CPU es de 6 pines (eléctricamente cerca de un PWM de 4 pines con diseño específico del proveedor).&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a5.png&#34;
	width=&#34;512&#34;
	height=&#34;442&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a5_hu_7efc30fdacfdfc91.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a5_hu_d9d01aac54f5b24c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;115&#34;
		data-flex-basis=&#34;278px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a6.png&#34;
	width=&#34;383&#34;
	height=&#34;471&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a6_hu_cbd39829c907d112.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/a6_hu_cd62d68cb3e25c07.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;81&#34;
		data-flex-basis=&#34;195px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/6.jpg&#34;
	width=&#34;800&#34;
	height=&#34;360&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/6_hu_f066a497e039748f.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/6_hu_460e40225e0ec29d.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;222&#34;
		data-flex-basis=&#34;533px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/7.jpg&#34;
	width=&#34;800&#34;
	height=&#34;360&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/7_hu_d18a3bd33e840c39.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/7_hu_311499e12c672e1b.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;222&#34;
		data-flex-basis=&#34;533px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/8.jpg&#34;
	width=&#34;800&#34;
	height=&#34;360&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/8_hu_c814c11acb7464ad.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/8_hu_7d0fc857018433b.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;222&#34;
		data-flex-basis=&#34;533px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/9.jpg&#34;
	width=&#34;800&#34;
	height=&#34;360&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/9_hu_8335d6e8cb6a9d22.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/9_hu_e29b07ebef53d68d.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;222&#34;
		data-flex-basis=&#34;533px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;notas-sobre-la-fuente-de-alimentación-18p--12p&#34;&gt;Notas sobre la fuente de alimentación (18P + 12P)
&lt;/h2&gt;&lt;p&gt;Usos de la placa Z440:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un conector principal de 18 pines&lt;/li&gt;
&lt;li&gt;un conector CPU/auxiliar de 12 pines&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;mapeo-del-conector-18p&#34;&gt;Mapeo del conector 18P
&lt;/h3&gt;&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/10.jpg&#34;
	width=&#34;693&#34;
	height=&#34;439&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/10_hu_b66a3fe3104be89f.jpg 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/10_hu_ce4bdeba205f5ed.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;157&#34;
		data-flex-basis=&#34;378px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;+12V_B&lt;/code&gt;, &lt;code&gt;+12V_S&lt;/code&gt;, &lt;code&gt;+12V_D&lt;/code&gt; alimentan diferentes dominios de placa.&lt;/p&gt;
&lt;h3 id=&#34;conector-12p&#34;&gt;Conector 12P
&lt;/h3&gt;&lt;p&gt;Conceptualmente cercano a una CPU de 8 pines + disposición adicional de 4 pines, con múltiples líneas de 12 V y GND para alimentación de CPU/memoria.&lt;/p&gt;
&lt;h2 id=&#34;acerca-de-la-advertencia-539-energía-lrdimm-insuficiente&#34;&gt;Acerca de la advertencia 539 (energía LRDIMM insuficiente)
&lt;/h2&gt;&lt;p&gt;Advertencia común:
&lt;code&gt;539 - Vataje de fuente de alimentación insuficiente para la configuración de memoria LR dimm&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Comportamiento observado a partir de referencias de la comunidad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Puede aparecer una advertencia con LRDIMM incluso con una fuente de alimentación OEM de alta potencia.&lt;/li&gt;
&lt;li&gt;Es difícil suprimirlo por completo en algunas combinaciones de firmware.&lt;/li&gt;
&lt;li&gt;El uso de RDIMM (2Rx4 REG ECC, no LR) generalmente evita esta advertencia.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Referencias:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://h30471.www3.hp.com/t5/tai-shi-dian-nao/HP-Z440kai-ji-zi-jian-ti-shi-cuo-wu-539-LR-nei-zai-DIMM-pei-zhi-de-dian-yuan-gong-lu-bu-zu/m-p/966408/highlight/true&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Subproceso de la comunidad HP (CN)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://h30434.www3.hp.com/t5/Business-PCs-Workstations-and-Point-of-Sale-Systems/quot-Power-supply-insufficient-quot-warning-problem/td-p/7218805&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Subproceso de la comunidad HP (EN)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;gestión-remota&#34;&gt;Gestión remota
&lt;/h2&gt;&lt;p&gt;Z440 no tiene BMC. Opciones remotas útiles:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WOL (despertar en LAN)&lt;/li&gt;
&lt;li&gt;Intel AMT (capacidad parcial dependiendo de la CPU/plataforma)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AMT puede proporcionar:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;operaciones de energía remota&lt;/li&gt;
&lt;li&gt;información de hardware/sistema&lt;/li&gt;
&lt;li&gt;Serial-over-LAN para consola de texto durante el arranque&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;aspectos-destacados-de-la-configuración-de-amt&#34;&gt;Aspectos destacados de la configuración de AMT
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Presione &lt;code&gt;Ctrl + P&lt;/code&gt; durante el arranque para ingresar a la configuración de AMT.&lt;/li&gt;
&lt;li&gt;Configurar la red y habilitar AMT.&lt;/li&gt;
&lt;li&gt;Habilitar el modo de redirección SOL/heredado para la consola serie.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/12.png&#34;
	width=&#34;1718&#34;
	height=&#34;1038&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/12_hu_afab5a313dea462f.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/12_hu_94bffce1784cb2dd.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;165&#34;
		data-flex-basis=&#34;397px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/13.png&#34;
	width=&#34;1109&#34;
	height=&#34;566&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/13_hu_82415f181ef21ddf.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/13_hu_6b6f8fa944661c33.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;195&#34;
		data-flex-basis=&#34;470px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/14.png&#34;
	width=&#34;1103&#34;
	height=&#34;563&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/14_hu_f725f352fd729b6a.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/14_hu_2873c6c86b0c459d.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;195&#34;
		data-flex-basis=&#34;470px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/15.png&#34;
	width=&#34;1109&#34;
	height=&#34;562&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/15_hu_949564a5978cda44.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/15_hu_a0dd11511d869db6.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;197&#34;
		data-flex-basis=&#34;473px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;herramientas-del-cliente&#34;&gt;Herramientas del cliente
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Acceso web: &lt;code&gt;http://&amp;lt;amt-ip&amp;gt;:16992&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;MeshCommander: &lt;a class=&#34;link&#34; href=&#34;https://www.meshcommander.com/meshcommander&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.meshcommander.com/meshcommander&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/16.png&#34;
	width=&#34;970&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/16_hu_5c4cada1ea0eda23.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/16_hu_a98a36875ca64200.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;131&#34;
		data-flex-basis=&#34;314px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/17.png&#34;
	width=&#34;970&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/17_hu_6e91d4864d15acd.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/17_hu_574b268c264849bd.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;131&#34;
		data-flex-basis=&#34;314px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/18.png&#34;
	width=&#34;970&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/18_hu_d7e9dbf30e1b7081.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/18_hu_53df52125219a76a.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;131&#34;
		data-flex-basis=&#34;314px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/19.png&#34;
	width=&#34;1114&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/19_hu_77d725b4eb178f5e.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/19_hu_ad6168dd8f754441.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;150&#34;
		data-flex-basis=&#34;361px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/20.png&#34;
	width=&#34;1114&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/20_hu_4ac55d5dd6a8b254.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/20_hu_f00d309f4a37f0b5.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;150&#34;
		data-flex-basis=&#34;361px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/21.png&#34;
	width=&#34;1114&#34;
	height=&#34;740&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/21_hu_8723b07bddb41f82.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/21_hu_93a5bfa004f7499c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;150&#34;
		data-flex-basis=&#34;361px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;arranque-sin-cabeza-sin-gpu-de-pantalla-dedicada&#34;&gt;Arranque sin cabeza (sin GPU de pantalla dedicada)
&lt;/h2&gt;&lt;p&gt;Con muchas configuraciones de Xeon, no hay salida iGPU disponible. Puede habilitar el arranque sin cabeza a través de la exportación/importación de la configuración replicada del BIOS.&lt;/p&gt;
&lt;p&gt;Flujo de trabajo:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ingrese al BIOS (&lt;code&gt;Esc&lt;/code&gt;) -&amp;gt; &lt;code&gt;Configuración replicada&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Exporte la configuración a FAT32 USB.&lt;/li&gt;
&lt;li&gt;Edite &lt;code&gt;HpSetup.txt&lt;/code&gt;, cambie &lt;code&gt;Arranque sin cabeza&lt;/code&gt; de &lt;code&gt;Desactivar&lt;/code&gt; a &lt;code&gt;Activar&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Importe la configuración desde USB.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/22.png&#34;
	width=&#34;1587&#34;
	height=&#34;990&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/22_hu_5bfa225c615df94a.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/22_hu_bca691bbb1071083.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;160&#34;
		data-flex-basis=&#34;384px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/23.png&#34;
	width=&#34;899&#34;
	height=&#34;453&#34;
	srcset=&#34;https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/23_hu_8168322ee804c091.png 480w, https://knightli.com/2023/02/26/diy-%E4%BD%8E%E6%88%90%E6%9C%AC-256g%E5%86%85%E5%AD%98-hp-z440%E4%B8%BB%E6%9D%BF/23_hu_e6382a0bb87c8e24.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;198&#34;
		data-flex-basis=&#34;476px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;notas-sobre-medición-de-energía&#34;&gt;Notas sobre medición de energía
&lt;/h2&gt;&lt;p&gt;Con &lt;code&gt;E5-2630 v4&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Configuración básica (un solo módulo de memoria, SSD, sin dGPU): alrededor de 41 W inactivos en Ubuntu.&lt;/li&gt;
&lt;li&gt;Memoria ECC REG de 8x32 GB instalada: alrededor de 60 W inactivos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Impacto aproximado por dispositivo en esta prueba: alrededor de 3 W por módulo de 32 GB.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Montar un servidor Git en Synology NAS y respaldarlo con Hyper Backup</title>
        <link>https://knightli.com/es/2022/12/07/synology-git-server-hyper-backup/</link>
        <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/12/07/synology-git-server-hyper-backup/</guid>
        <description>&lt;p&gt;Synology NAS puede funcionar como un servidor Git privado y ligero. Para proyectos personales o equipos pequeños suele ser suficiente: los repositorios quedan dentro de la LAN, el acceso se gestiona con cuentas del NAS y los datos pueden protegerse con las herramientas de copia de seguridad de Synology.&lt;/p&gt;
&lt;p&gt;Esta nota resume la configuración básica y el flujo de respaldo con Hyper Backup.&lt;/p&gt;
&lt;h2 id=&#34;instalar-git-server&#34;&gt;Instalar Git Server
&lt;/h2&gt;&lt;p&gt;Abre Package Center en Synology DSM e instala el paquete Git Server.&lt;/p&gt;
&lt;p&gt;Después de instalarlo, abre Git Server y permite que los usuarios necesarios usen Git por SSH. La cuenta del NAS debe tener acceso SSH y permiso sobre la carpeta donde se guardarán los repositorios.&lt;/p&gt;
&lt;h2 id=&#34;preparar-el-directorio-de-repositorios&#34;&gt;Preparar El Directorio De Repositorios
&lt;/h2&gt;&lt;p&gt;Crea una carpeta compartida o un subdirectorio para los repositorios Git, por ejemplo:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/volume1/git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Dentro de esa carpeta, crea repositorios bare:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init --bare project.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Un repositorio bare no tiene working tree. Es el formato adecuado para usarse como remoto.&lt;/p&gt;
&lt;h2 id=&#34;conectar-desde-un-cliente&#34;&gt;Conectar Desde Un Cliente
&lt;/h2&gt;&lt;p&gt;Desde otra máquina, clona el repositorio por SSH:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone user@nas-ip:/volume1/git/project.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;También puedes añadirlo como remoto en un proyecto local existente:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add origin user@nas-ip:/volume1/git/project.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push -u origin master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si SSH usa un puerto no estándar, configúralo en SSH o usa una URL remota personalizada.&lt;/p&gt;
&lt;h2 id=&#34;permisos&#34;&gt;Permisos
&lt;/h2&gt;&lt;p&gt;Asegúrate de que el directorio del repositorio pertenece al usuario o grupo correcto. Si varios usuarios necesitan acceso, colócalos en un grupo común y otorga permisos de lectura/escritura sobre la carpeta Git.&lt;/p&gt;
&lt;p&gt;Si el push falla, revisa primero:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si el inicio de sesión SSH funciona;&lt;/li&gt;
&lt;li&gt;si el usuario está autorizado en Git Server;&lt;/li&gt;
&lt;li&gt;si la carpeta tiene permiso de escritura;&lt;/li&gt;
&lt;li&gt;si el repositorio fue creado como bare;&lt;/li&gt;
&lt;li&gt;si la URL remota es correcta.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;copia-de-seguridad-con-hyper-backup&#34;&gt;Copia De Seguridad Con Hyper Backup
&lt;/h2&gt;&lt;p&gt;Cuando los repositorios estén en el NAS, configura Hyper Backup para respaldar la carpeta Git.&lt;/p&gt;
&lt;p&gt;En Hyper Backup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Crea una nueva tarea de backup.&lt;/li&gt;
&lt;li&gt;Selecciona el destino, como otro disco, otro NAS, un servidor rsync o almacenamiento cloud.&lt;/li&gt;
&lt;li&gt;Selecciona la carpeta de repositorios Git.&lt;/li&gt;
&lt;li&gt;Configura la programación.&lt;/li&gt;
&lt;li&gt;Activa la retención de versiones si la necesitas.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Esto protege los datos ante fallos de disco, borrados accidentales o pushes incorrectos.&lt;/p&gt;
&lt;h2 id=&#34;notas-de-restauración&#34;&gt;Notas De Restauración
&lt;/h2&gt;&lt;p&gt;Al restaurar, recupera el directorio completo del repositorio bare. Después prueba:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone user@nas-ip:/volume1/git/project.git
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si el clone funciona, el repositorio vuelve a estar disponible.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Synology Git Server es sencillo, pero suficiente para muchos repositorios privados. Los puntos importantes son acceso SSH, permisos correctos, repositorios bare y una tarea fiable de Hyper Backup.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Solucionar el consumo de batería en Windows 10 después de cerrar la tapa del portátil</title>
        <link>https://knightli.com/es/2022/09/27/windows10-laptop-lid-battery-drain/</link>
        <pubDate>Tue, 27 Sep 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/09/27/windows10-laptop-lid-battery-drain/</guid>
        <description>&lt;p&gt;Algunos portátiles con Windows 10 siguen consumiendo energía después de cerrar la tapa. La pantalla se apaga, pero el equipo puede no entrar en un estado real de bajo consumo. Después de varias horas en una mochila, la batería puede bajar mucho o el portátil puede calentarse.&lt;/p&gt;
&lt;p&gt;Normalmente está relacionado con el modo de suspensión, la acción al cerrar la tapa, fuentes de reactivación, Modern Standby o dispositivos que mantienen activo el sistema.&lt;/p&gt;
&lt;h2 id=&#34;revisar-la-acción-al-cerrar-la-tapa&#34;&gt;Revisar La Acción Al Cerrar La Tapa
&lt;/h2&gt;&lt;p&gt;Abre las opciones de energía y confirma qué debe hacer Windows al cerrar la tapa:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Control Panel -&amp;gt; Hardware and Sound -&amp;gt; Power Options -&amp;gt; Choose what closing the lid does
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Para batería y corriente, configura la acción como &lt;code&gt;Sleep&lt;/code&gt; o &lt;code&gt;Hibernate&lt;/code&gt; según tu preferencia.&lt;/p&gt;
&lt;p&gt;Si está seleccionado &lt;code&gt;Do nothing&lt;/code&gt;, el portátil seguirá funcionando después de cerrar la tapa.&lt;/p&gt;
&lt;h2 id=&#34;preferir-hibernación-para-transportes-largos&#34;&gt;Preferir Hibernación Para Transportes Largos
&lt;/h2&gt;&lt;p&gt;La suspensión todavía consume energía. Si el portátil va a estar mucho tiempo en una mochila, hibernar es más seguro.&lt;/p&gt;
&lt;p&gt;La hibernación guarda el estado de la memoria en disco y apaga el equipo de forma más completa. El arranque es más lento que desde suspensión, pero el consumo de batería es mucho menor.&lt;/p&gt;
&lt;p&gt;Puedes activar la hibernación con:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powercfg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hibernate&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;on&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después selecciona hibernación como acción al cerrar la tapa o en el menú de apagado.&lt;/p&gt;
&lt;h2 id=&#34;revisar-fuentes-de-reactivación&#34;&gt;Revisar Fuentes De Reactivación
&lt;/h2&gt;&lt;p&gt;Algunos dispositivos pueden despertar el portátil o impedir la suspensión. Comprueba la última fuente de reactivación:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powercfg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lastwake&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Lista los dispositivos con permiso para despertar el sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powercfg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;devicequery&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wake_armed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si un adaptador de red, mouse, teclado o dispositivo Bluetooth despierta el equipo, desactiva su permiso de reactivación en Device Manager.&lt;/p&gt;
&lt;h2 id=&#34;generar-un-informe-de-suspensión&#34;&gt;Generar Un Informe De Suspensión
&lt;/h2&gt;&lt;p&gt;Windows puede generar diagnósticos de suspensión:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powercfg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sleepstudy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;El informe muestra sesiones de suspensión, consumo de batería, dispositivos activos y uso anormal de energía. Es especialmente útil en equipos con Modern Standby.&lt;/p&gt;
&lt;h2 id=&#34;revisar-modern-standby&#34;&gt;Revisar Modern Standby
&lt;/h2&gt;&lt;p&gt;Algunos portátiles nuevos usan Modern Standby en lugar de la suspensión S3 tradicional. Puede mantener red y actividad en segundo plano, aumentando el consumo.&lt;/p&gt;
&lt;p&gt;Comprueba los estados de suspensión soportados:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;powercfg&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si solo está disponible Modern Standby, considera usar hibernación para transportar el equipo o dejarlo inactivo mucho tiempo.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Cuando un portátil con Windows 10 consume batería después de cerrar la tapa, revisa primero la acción de cierre, después las fuentes de reactivación y los informes de suspensión. Para bajo consumo fiable durante transporte, la hibernación suele ser mejor que la suspensión.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Compilar y flashear firmware OpenWrt personalizado para el router Redmi AX6S</title>
        <link>https://knightli.com/es/2022/09/04/redmi-ax6s-openwrt-build-flash/</link>
        <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/09/04/redmi-ax6s-openwrt-build-flash/</guid>
        <description>&lt;h2 id=&#34;configuración-de-hardware-del-ax6s&#34;&gt;Configuración de hardware del AX6S
&lt;/h2&gt;&lt;p&gt;CPU: MediaTek MT7622B, 2 núcleos A53&lt;br&gt;
Flash: 128 MB NAND&lt;br&gt;
RAM: 256 MB&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.mi.com/global/product/xiaomi-router-ax3200/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://www.mi.com/global/product/xiaomi-router-ax3200/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;compilación-personalizada-de-openwrt-para-el-ax6s&#34;&gt;Compilación personalizada de OpenWrt para el AX6S
&lt;/h2&gt;&lt;h3 id=&#34;instala-linux-primero-se-recomienda-ubuntu-lts&#34;&gt;Instala Linux primero; se recomienda Ubuntu LTS
&lt;/h3&gt;&lt;h3 id=&#34;instalar-dependencias-de-compilación&#34;&gt;Instalar dependencias de compilación
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;update&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;full&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;upgrade&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;sudo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;apt&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;install&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ack&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;antlr3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;asciidoc&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autoconf&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;automake&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;autopoint&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;binutils&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bison&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;build&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;essential&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;bzip2&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ccache&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cmake&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cpio&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;curl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;device&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tree&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;compiler&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fastjar&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;flex&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gawk&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gettext&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gcc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multilib&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;multilib&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gperf&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;haveged&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;help2man&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;intltool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libc6&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;i386&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libelf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libglib2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libgmp3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libltdl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;libmpc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libmpfr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libncurses5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libncursesw5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libreadline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libssl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libtool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lrzsz&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mkisofs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;msmtp&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nano&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ninja&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p7zip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;p7zip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;full&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;patch&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;pkgconf&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;7&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;python3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;libpython3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;qemu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utils&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;rsync&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;scons&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;squashfs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tools&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;subversion&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;swig&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;texinfo&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;uglifyjs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;upx&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ucl&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unzip&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vim&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;wget&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xmlto&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;xxd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zlib1g&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;descargar-el-código-fuente-actualizar-feeds-y-elegir-la-configuración&#34;&gt;Descargar el código fuente, actualizar feeds y elegir la configuración
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/coolsnowwolf/lede
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cd lede
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/feeds update -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/feeds install -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make menuconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Selecciona &lt;code&gt;Target Profile&lt;/code&gt;.&lt;br&gt;
&lt;img src=&#34;https://knightli.com/2022/09/04/%E7%BA%A2%E7%B1%B3ax6s-openwrt%E5%AE%9A%E5%88%B6%E7%BC%96%E8%AF%91%E5%88%B7%E6%9C%BA/1.png&#34;
	width=&#34;420&#34;
	height=&#34;68&#34;
	srcset=&#34;https://knightli.com/2022/09/04/%E7%BA%A2%E7%B1%B3ax6s-openwrt%E5%AE%9A%E5%88%B6%E7%BC%96%E8%AF%91%E5%88%B7%E6%9C%BA/1_hu_35efd3d5076fedac.png 480w, https://knightli.com/2022/09/04/%E7%BA%A2%E7%B1%B3ax6s-openwrt%E5%AE%9A%E5%88%B6%E7%BC%96%E8%AF%91%E5%88%B7%E6%9C%BA/1_hu_4e1bf032a48ec08c.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;617&#34;
		data-flex-basis=&#34;1482px&#34;
	
&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Selecciona &lt;code&gt;LuCI -&amp;gt; Applications -&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;&lt;/th&gt;
          &lt;th&gt;Significado&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;[ * ]&lt;/td&gt;
          &lt;td&gt;Seleccionado&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;[ ]&lt;/td&gt;
          &lt;td&gt;No seleccionado&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&amp;lt; M &amp;gt;&lt;/td&gt;
          &lt;td&gt;Compilar como módulo&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Aplicaciones comunes:&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Nombre&lt;/th&gt;
          &lt;th&gt;Ruta de menú&lt;/th&gt;
          &lt;th&gt;Descripción&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-adbyby-plus&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; Adbyby Plus+&lt;/td&gt;
          &lt;td&gt;Bloqueo de anuncios para dispositivos de la misma red.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-aliddns&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; AliDDNS&lt;/td&gt;
          &lt;td&gt;Resolución DDNS de Aliyun.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-ddns&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; Dynamic DNS&lt;/td&gt;
          &lt;td&gt;DNS dinámico; no admite AliDDNS.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-autoreboot&lt;/td&gt;
          &lt;td&gt;System -&amp;gt; Scheduled Reboot&lt;/td&gt;
          &lt;td&gt;Configura reinicios programados.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-arpbind&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; IP/MAC Binding&lt;/td&gt;
          &lt;td&gt;Vincula direcciones IP y MAC.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-filetransfer&lt;/td&gt;
          &lt;td&gt;System -&amp;gt; File Transfer&lt;/td&gt;
          &lt;td&gt;Transfiere archivos al sistema de archivos de OpenWrt.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-firewall&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; Firewall&lt;/td&gt;
          &lt;td&gt;Configuración del firewall.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-frpc&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; Frp Client&lt;/td&gt;
          &lt;td&gt;Cliente Frp para acceso desde intranet.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-frps&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; Frps&lt;/td&gt;
          &lt;td&gt;Servidor Frp para acceso desde intranet.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-guest-wifi&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; Guest Wi-Fi&lt;/td&gt;
          &lt;td&gt;Red Wi-Fi de invitados.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-nlbwmon&lt;/td&gt;
          &lt;td&gt;Bandwidth Monitor&lt;/td&gt;
          &lt;td&gt;Todas las funciones del menú de monitorización de ancho de banda.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-qos&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; QoS&lt;/td&gt;
          &lt;td&gt;Calidad de servicio; permite priorizar clases de tráfico.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-ssr-plus&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; ShadowSocksR Plus+&lt;/td&gt;
          &lt;td&gt;Selector de plugins de proxy.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-turboacc&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; Turbo ACC&lt;/td&gt;
          &lt;td&gt;Aceleración de red.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-unblockmusic&lt;/td&gt;
          &lt;td&gt;Sin menú&lt;/td&gt;
          &lt;td&gt;Desbloqueo de NetEase Cloud Music.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-upnp&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; UPnP&lt;/td&gt;
          &lt;td&gt;Universal Plug and Play (UPnP).&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-vlmcsd&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; KMS Server&lt;/td&gt;
          &lt;td&gt;Servidor de activación de productos Microsoft.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-wireguard&lt;/td&gt;
          &lt;td&gt;Network -&amp;gt; Interfaces&lt;/td&gt;
          &lt;td&gt;El estado se ve en Status -&amp;gt; WireGuard Status.&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;luci-app-wol&lt;/td&gt;
          &lt;td&gt;Services -&amp;gt; Wake-on-LAN&lt;/td&gt;
          &lt;td&gt;Wake-on-LAN.&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Selecciona las funciones necesarias, guarda la configuración y sal cuando termines.&lt;/p&gt;
&lt;h3 id=&#34;descargar-el-directorio-dl-y-compilar-el-firmware&#34;&gt;Descargar el directorio &lt;code&gt;dl&lt;/code&gt; y compilar el firmware
&lt;/h3&gt;&lt;p&gt;El valor detrás de &lt;code&gt;-j&lt;/code&gt; es el número de hilos. Para la primera compilación se recomienda usar un solo hilo.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;download&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;make&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;V&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;j1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de una compilación correcta, el firmware queda en &lt;code&gt;~/lede/bin/targets/mediatek/mt7622/&lt;/code&gt;.&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;Uso&lt;/th&gt;
          &lt;th&gt;Archivo&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;Primer flasheo&lt;/td&gt;
          &lt;td&gt;openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;Actualización desde OpenWrt&lt;/td&gt;
          &lt;td&gt;openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-sysupgrade.bin&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;desbloqueo-y-flasheo-del-ax6s&#34;&gt;Desbloqueo y flasheo del AX6S
&lt;/h2&gt;&lt;h3 id=&#34;flashear-el-firmware-de-prueba-de-redmi&#34;&gt;Flashear el firmware de prueba de Redmi
&lt;/h3&gt;&lt;p&gt;Solo después de flashear el firmware de prueba se puede usar telnet para las operaciones posteriores en el AX6S. Firmware de prueba: &lt;a href=&#34;https://knightli.com/2022/09/04/%E7%BA%A2%E7%B1%B3ax6s-openwrt%E5%AE%9A%E5%88%B6%E7%BC%96%E8%AF%91%E5%88%B7%E6%9C%BA/miwifi_rb03_firmware_stable_1.2.7.bin&#34;&gt;miwifi_rb03_firmware_stable_1.2.7.bin&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;calcular-la-contraseña-de-telnet&#34;&gt;Calcular la contraseña de telnet
&lt;/h3&gt;&lt;p&gt;El cálculo necesita el número de serie del router. Puedes encontrarlo en la etiqueta de la parte trasera del dispositivo y también en la interfaz de administración del router.&lt;/p&gt;
&lt;p&gt;Muchos calculadores en línea ya no funcionan. Puedes ejecutar localmente el siguiente script de Python:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#!/usr/bin/env python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;import sys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;import hashlib
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if sys.version_info &amp;lt; (3,7):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    print(&amp;#34;python version is not supported&amp;#34;, file=sys.stderr)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# credit goes to zhoujiazhao:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# https://blog.csdn.net/zhoujiazhao/article/details/102578244
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;salt = {&amp;#39;r1d&amp;#39;: &amp;#39;A2E371B0-B34B-48A5-8C40-A7133F3B5D88&amp;#39;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &amp;#39;others&amp;#39;: &amp;#39;d44fb0960aa0-a5e6-4a30-250f-6d2df50a&amp;#39;}
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;def get_salt(sn):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    if &amp;#34;/&amp;#34; not in sn:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        return salt[&amp;#34;r1d&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    return &amp;#34;-&amp;#34;.join(reversed(salt[&amp;#34;others&amp;#34;].split(&amp;#34;-&amp;#34;)))
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;def calc_passwd(sn):
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    passwd = sn + get_salt(sn)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    m = hashlib.md5(passwd.encode())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    return m.hexdigest()[:8]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;if __name__ == &amp;#34;__main__&amp;#34;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    if len(sys.argv) != 2:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        print(f&amp;#34;Usage: {sys.argv[0]} &amp;lt;S/N&amp;gt;&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sys.exit(1)
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    serial = sys.argv[1]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    print(calc_passwd(serial))
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;abc@openwrt-build:~$ python calc_ax6s_pwd.py SN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00d135eb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;La salida es la contraseña de telnet.&lt;/p&gt;
&lt;h3 id=&#34;conectar-al-ax6s-por-telnet&#34;&gt;Conectar al AX6S por telnet
&lt;/h3&gt;&lt;p&gt;Primero confirma la dirección IP del router. Puedes verla en la interfaz de administración de la red a la que está conectado. Por ejemplo, mi router usa &lt;code&gt;192.168.0.121&lt;/code&gt;. Abre una terminal y ejecuta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;telnet 192.168.0.121
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Usuario: &lt;code&gt;root&lt;/code&gt;&lt;br&gt;
Contraseña: la contraseña calculada arriba&lt;/p&gt;
&lt;p&gt;Después de iniciar sesión correctamente, ejecuta:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvram set ssh_en=1 &amp;amp;&amp;amp; nvram set uart_en=1 &amp;amp;&amp;amp; nvram set boot_wait=on &amp;amp;&amp;amp; nvram set bootdelay=3 &amp;amp;&amp;amp; nvram set flag_try_sys1_failed=0 &amp;amp;&amp;amp; nvram set flag_try_sys2_failed=1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvram set flag_boot_rootfs=0 &amp;amp;&amp;amp; nvram set &amp;#34;boot_fw1=run boot_rd_img;bootm&amp;#34; &amp;amp;&amp;amp; nvram set flag_boot_success=1 &amp;amp;&amp;amp; nvram commit 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/dropbear enable &amp;amp;&amp;amp; /etc/init.d/dropbear start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Cuando los comandos finalicen correctamente, SCP quedará habilitado. Usa SCP para subir el firmware al router.&lt;/p&gt;
&lt;h3 id=&#34;subir-el-firmware&#34;&gt;Subir el firmware
&lt;/h3&gt;&lt;p&gt;En Windows, conecta al router con WinSCP. Sube el archivo compilado &lt;code&gt;openwrt-mediatek-mt7622-xiaomi_redmi-router-ax6s-squashfs-factory.bin&lt;/code&gt; a &lt;code&gt;/tmp/&lt;/code&gt; y renómbralo como &lt;code&gt;factory.bin&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&#34;flashear-el-firmware&#34;&gt;Flashear el firmware
&lt;/h3&gt;&lt;p&gt;Ejecuta el siguiente comando en la sesión telnet:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mtd -r write /tmp/factory.bin firmware
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después del flasheo, el router se reiniciará. La información predeterminada tras el reinicio es:&lt;/p&gt;
&lt;p&gt;Dirección IP: &lt;code&gt;192.168.1.1&lt;/code&gt;&lt;br&gt;
Usuario: &lt;code&gt;root&lt;/code&gt;&lt;br&gt;
Contraseña: &lt;code&gt;password&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;recuperación-si-el-flasheo-falla&#34;&gt;Recuperación si el flasheo falla
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Descarga la herramienta de reparación de routers Xiaomi:&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://bigota.miwifi.com/xiaoqiang/tools/MIWIFIRepairTool.x86.zip&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://bigota.miwifi.com/xiaoqiang/tools/MIWIFIRepairTool.x86.zip&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Notas de uso:&lt;br&gt;
AX6S no aparece en la lista de modelos admitidos, pero funcionó en mi prueba. La herramienta de reparación para PC necesita privilegios del sistema para modificar la configuración del adaptador de red, por lo que hay que desactivar el antivirus antes de usarla.&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://web.vip.miui.com/page/info/mio/mio/detail?postId=19134127&amp;amp;app_version=dev.20051&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://web.vip.miui.com/page/info/mio/mio/detail?postId=19134127&amp;amp;app_version=dev.20051&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Qué es un ataque Sybil</title>
        <link>https://knightli.com/es/2022/07/05/sybil-attack/</link>
        <pubDate>Tue, 05 Jul 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/07/05/sybil-attack/</guid>
        <description>&lt;p&gt;Un ataque Sybil ocurre cuando una entidad real crea muchas identidades falsas y las usa para influir en un sistema distribuido.&lt;/p&gt;
&lt;p&gt;El nombre describe la idea de una persona apareciendo como muchas. En una red, foro, sistema de votación, blockchain o sistema peer-to-peer, el atacante puede registrar muchas cuentas, nodos o direcciones. Si el sistema trata cada identidad como participante independiente, el atacante gana más influencia de la que debería.&lt;/p&gt;
&lt;h2 id=&#34;por-qué-es-peligroso&#34;&gt;Por Qué Es Peligroso
&lt;/h2&gt;&lt;p&gt;Muchos sistemas distribuidos asumen que &amp;ldquo;más participantes&amp;rdquo; significa &amp;ldquo;más opiniones independientes&amp;rdquo;. Un atacante Sybil rompe esa suposición.&lt;/p&gt;
&lt;p&gt;Por ejemplo, puede:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;crear muchas cuentas falsas para manipular votaciones;&lt;/li&gt;
&lt;li&gt;ejecutar muchos nodos falsos para influir en el descubrimiento de peers;&lt;/li&gt;
&lt;li&gt;generar muchas direcciones blockchain para farmear airdrops;&lt;/li&gt;
&lt;li&gt;inundar un sistema de reputación con reseñas falsas;&lt;/li&gt;
&lt;li&gt;hacer que un grupo pequeño parezca una comunidad grande.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;El problema central es que las identidades son baratas de crear, pero el sistema da valor a cada identidad.&lt;/p&gt;
&lt;h2 id=&#34;defensas-comunes&#34;&gt;Defensas Comunes
&lt;/h2&gt;&lt;p&gt;No existe una solución universal. Distintos sistemas aumentan el coste de identidad de distintas formas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;proof of work: las identidades requieren coste computacional;&lt;/li&gt;
&lt;li&gt;proof of stake: las identidades requieren capital bloqueado;&lt;/li&gt;
&lt;li&gt;verificación de cuenta: las identidades requieren prueba del mundo real;&lt;/li&gt;
&lt;li&gt;sistemas de reputación: la influencia crece lentamente;&lt;/li&gt;
&lt;li&gt;límites de tasa: las identidades nuevas no pueden actuar demasiado rápido;&lt;/li&gt;
&lt;li&gt;análisis de grafos: se detectan grupos sospechosos.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cada defensa tiene compromisos. La verificación fuerte mejora la resistencia pero reduce privacidad. Proof of work consume recursos. Proof of stake favorece a quien tiene más capital.&lt;/p&gt;
&lt;h2 id=&#34;en-sistemas-blockchain&#34;&gt;En Sistemas Blockchain
&lt;/h2&gt;&lt;p&gt;La resistencia a Sybil es central en el diseño blockchain. Si un equipo pudiera crear nodos de votación ilimitados sin coste, el consenso sería fácil de manipular.&lt;/p&gt;
&lt;p&gt;Bitcoin usa proof of work para que la influencia dependa del hash power y no del número de cuentas. Los sistemas proof-of-stake usan stake bloqueado. Muchos proyectos con airdrops añaden análisis de comportamiento o verificación de identidad para reducir cuentas falsas.&lt;/p&gt;
&lt;h2 id=&#34;resumen&#34;&gt;Resumen
&lt;/h2&gt;&lt;p&gt;Un ataque Sybil no explota necesariamente un bug de software. Explota un coste débil de identidad. Cuando crear muchas identidades es barato y cada identidad recibe confianza o recompensa, el sistema es vulnerable.&lt;/p&gt;
&lt;p&gt;La pregunta clave de diseño es: ¿cuánto cuesta convertirse en &amp;ldquo;un participante&amp;rdquo;?&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Instale GoAccess en Ubuntu &#43; Nginx para análisis de sitios en tiempo real</title>
        <link>https://knightli.com/es/2022/04/14/goaccess-nginx-ubuntu/</link>
        <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/04/14/goaccess-nginx-ubuntu/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://knightli.com/2022/04/14/goaccess-nginx/1.png&#34;
	width=&#34;826&#34;
	height=&#34;485&#34;
	srcset=&#34;https://knightli.com/2022/04/14/goaccess-nginx/1_hu_9f5944f53f0d9412.png 480w, https://knightli.com/2022/04/14/goaccess-nginx/1_hu_1dd472445bdba4fe.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;170&#34;
		data-flex-basis=&#34;408px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;instalar-goaccess&#34;&gt;Instalar GoAccess
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# distro repo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install goaccess
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;O repositorio oficial:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -O - https://deb.goaccess.io/gnugpg.key &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gpg --dearmor &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /usr/share/keyrings/goaccess.gpg &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/goaccess.gpg] https://deb.goaccess.io/ &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;lsb_release -cs&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; main&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/goaccess.list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install goaccess
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;generar-informe&#34;&gt;Generar informe
&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;goaccess /var/log/nginx/www.knightli.com.access.log -o /www/www.knightli.com/r.html --log-format&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;COMBINED
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>Ubuntu 20.04: HP 544&#43;FLR-QSFP, RDMA y NVMe sobre Fabrics</title>
        <link>https://knightli.com/es/2022/03/29/ubuntu-rdma-nvmeof-hp-544-flr/</link>
        <pubDate>Tue, 29 Mar 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/03/29/ubuntu-rdma-nvmeof-hp-544-flr/</guid>
        <description>&lt;p&gt;Este artículo registra el uso de HP 544+FLR-QSFP (basado en Mellanox ConnectX-3 Pro) en Ubuntu 20.04 para pruebas de RDMA y NVMe-oF.&lt;/p&gt;
&lt;h2 id=&#34;hardware&#34;&gt;Hardware
&lt;/h2&gt;&lt;p&gt;Adaptador de doble puerto HP 544+FLR-QSFP 40Gb/s.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/1.jpg&#34;
	width=&#34;500&#34;
	height=&#34;500&#34;
	srcset=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/1_hu_b2afa6a26cbb1a94.jpg 480w, https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/1_hu_31b40ee8b14c1ed6.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;
		data-flex-basis=&#34;240px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/2.jpg&#34;
	width=&#34;500&#34;
	height=&#34;500&#34;
	srcset=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/2_hu_7340d37ec0be7651.jpg 480w, https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/2_hu_32e7f630251859c0.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;
		data-flex-basis=&#34;240px&#34;
	
&gt;
&lt;img src=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/3.jpg&#34;
	width=&#34;500&#34;
	height=&#34;500&#34;
	srcset=&#34;https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/3_hu_f4470a3304f5b2b3.jpg 480w, https://knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/3_hu_f9821721e1669aa6.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;100&#34;
		data-flex-basis=&#34;240px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;conductor&#34;&gt;Conductor
&lt;/h2&gt;&lt;p&gt;Utilice el paquete Mellanox OFED para Ubuntu 20.04 del sitio de redes de NVIDIA.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Agregar sistema de comentarios de expresiones a Hugo</title>
        <link>https://knightli.com/es/2022/03/25/hugo-utterances-comments/</link>
        <pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2022/03/25/hugo-utterances-comments/</guid>
        <description>&lt;h2 id=&#34;por-qué-las-declaraciones&#34;&gt;Por qué las declaraciones
&lt;/h2&gt;&lt;p&gt;Utterances es un sistema de comentarios basado en GitHub Issues.
En comparación con herramientas similares (como Gitment/Gitalk/Disqus), las ventajas comunes son:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ligero y rápido&lt;/li&gt;
&lt;li&gt;configuración sencilla&lt;/li&gt;
&lt;li&gt;los comentarios se almacenan en GitHub Issues, son fáciles de administrar en proyectos abiertos&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pasos-de-instalación&#34;&gt;Pasos de instalación
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Prepare una cuenta y un repositorio de GitHub. Los comentarios se almacenarán como problemas en ese repositorio.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2022/03/25/hugo-utterances/1.png&#34;
	width=&#34;1357&#34;
	height=&#34;816&#34;
	srcset=&#34;https://knightli.com/2022/03/25/hugo-utterances/1_hu_48206989f5aec7e1.png 480w, https://knightli.com/2022/03/25/hugo-utterances/1_hu_607d45b0fffe8fad.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;166&#34;
		data-flex-basis=&#34;399px&#34;
	
&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;Instale la aplicación GitHub de declaraciones:
&lt;a class=&#34;link&#34; href=&#34;https://github.com/apps/utterances&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/apps/utterances&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Instale la aplicación y otorgue acceso al repositorio de destino.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2022/03/25/hugo-utterances/2.png&#34;
	width=&#34;1359&#34;
	height=&#34;914&#34;
	srcset=&#34;https://knightli.com/2022/03/25/hugo-utterances/2_hu_db1353451b80d2f9.png 480w, https://knightli.com/2022/03/25/hugo-utterances/2_hu_9a6f2c4be8447a9f.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;148&#34;
		data-flex-basis=&#34;356px&#34;
	
&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;Agregue la configuración en Hugo &lt;code&gt;config.toml&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;utteranc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;enable&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;repo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;github_user/repository&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;issueTerm&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;pathname&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>Usar FRP para acceder a Synology DS File, DS Photo y Escritorio remoto sin IP pública</title>
        <link>https://knightli.com/es/2020/10/10/frp-synology-remote-access/</link>
        <pubDate>Sat, 10 Oct 2020 00:00:00 +0000</pubDate>
        
        <guid>https://knightli.com/es/2020/10/10/frp-synology-remote-access/</guid>
        <description>&lt;p&gt;FRP es una herramienta de proxy inverso de alto rendimiento. Permite exponer servicios de una red privada hacia Internet y soporta reenvío TCP, HTTP y HTTPS. Es útil cuando la red doméstica no tiene IP pública, pero se necesita acceder a servicios como Synology DS File, DS Photo o Escritorio remoto de Windows.&lt;/p&gt;
&lt;p&gt;Dirección del proyecto:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;https://github.com/fatedier/frp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;instalar-el-servidor-frp&#34;&gt;Instalar El Servidor FRP
&lt;/h2&gt;&lt;p&gt;Descarga una versión desde la página de releases de FRP. El ejemplo original usa FRP &lt;code&gt;0.34.1&lt;/code&gt; sobre Ubuntu 20.04:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/fatedier/frp/releases/download/v0.34.1/frp_0.34.1_linux_arm64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zvxf frp_0.34.1_linux_arm64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Después de extraer el paquete, verás binarios de cliente y servidor, archivos de configuración de ejemplo y servicios systemd:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;frp_0.34.1_linux_amd64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frpc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frpc_full.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frpc.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frps_full.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── frps.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;├── LICENSE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;└── systemd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── frpc.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── frpc@.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ├── frps.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    └── frps@.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Copia los binarios, configuraciones y servicios al sistema:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copy frp_0.34.1_linux_amd64/frpc /usr/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copy frp_0.34.1_linux_amd64/frps /usr/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copy frp_0.34.1_linux_amd64/*.ini /etc/fpr/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;copy frp_0.34.1_linux_amd64/systemd/* /etc/systemd/system
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Si &lt;code&gt;/etc/fpr/&lt;/code&gt; no existe, créalo antes.&lt;/p&gt;
&lt;h2 id=&#34;configuración-del-servidor&#34;&gt;Configuración Del Servidor
&lt;/h2&gt;&lt;p&gt;Un ejemplo de &lt;code&gt;frps.ini&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[common]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;bind_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;10100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;vhost_http_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;10101&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;token&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;XXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;dashboard_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;10109&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;dashboard_user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;admin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;dashboard_pwd&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;XXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/var/log/frps.log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_level&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;debug&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_max_days&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;bind_port&lt;/code&gt; se usa para la comunicación entre servidor y clientes FRP. &lt;code&gt;vhost_http_port&lt;/code&gt; recibe el tráfico HTTP público. Si se usa Nginx delante de FRP, Nginx debe reenviar el tráfico a este puerto.&lt;/p&gt;
&lt;p&gt;Para más opciones, revisa &lt;code&gt;frps_full.ini&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/frp_status-300x107.png&#34;
	width=&#34;300&#34;
	height=&#34;107&#34;
	srcset=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/frp_status-300x107_hu_4d449a9b1c4f86c.png 480w, https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/frp_status-300x107_hu_faa0c5339dfdd027.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Panel de FRP&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;280&#34;
		data-flex-basis=&#34;672px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;Comandos básicos del servicio:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start frps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop frps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart frps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status frps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; frps
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;proxy-nginx-opcional&#34;&gt;Proxy Nginx Opcional
&lt;/h2&gt;&lt;p&gt;Si el puerto 80 ya está ocupado por Nginx, puedes reenviar los dominios necesarios al puerto HTTP virtual de FRP:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;dsphoto.youdomain.com&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;dsfile.youdomian.com&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;frp.yourdomian.com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://127.0.0.1:10101&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Host&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$host:80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;X-Real-IP&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;X-Forwarded-For&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Upgrade&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$http_upgrade&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Connection&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;upgrade&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_connect_timeout&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;7d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_send_timeout&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;7d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_read_timeout&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;7d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$http_user_agent&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;*&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#34;360Spider|JikeSpider|Spider|spider|bot|Bot|2345Explorer|curl|wget|webZIP|qihoobot|Baiduspider|Googlebot|Googlebot-Mobile|Googlebot-Image|Mediapartners-Google|Adsbot-Google|Feedfetcher-Google|Yahoo!&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Slurp|Yahoo!&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Slurp&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;China|YoudaoBot|Sosospider|Sogou&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;spider|Sogou&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;web&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;spider|MSNBot|ia_archiver|Tomato&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;Bot|NSPlayer|bingbot&amp;#34;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;403&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;configuración-del-cliente-frp&#34;&gt;Configuración Del Cliente FRP
&lt;/h2&gt;&lt;p&gt;La instalación del cliente es similar. El cliente usa &lt;code&gt;frpc&lt;/code&gt;, el archivo de configuración es &lt;code&gt;frpc.ini&lt;/code&gt; y el servicio es &lt;code&gt;frpc&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Ejemplo de configuración:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;24
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;25
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;26
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;27
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;28
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;29
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;30
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;31
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;32
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;33
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;34
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;35
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[common]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;server_addr&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;frp.yourdomain.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;server_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;10100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;token&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;XXXXXX&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/tmp/frpc.log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_level&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;info&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;log_max_days&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;tcp_mux&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;protocol&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;login_fail_exit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;admin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[DSphoto]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;192.168.68.200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;80&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;custom_domains&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;dsphoto.yourdomain.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[DSfile]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;192.168.68.200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;custom_domains&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;dsfile.yourdomain.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[DSM]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;192.168.68.200&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;remote_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;5000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;[MSTC]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;tcp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_ip&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;192.168.68.168&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;local_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3389&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;na&#34;&gt;remote_port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;3389&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;DSphoto&lt;/code&gt; expone el servicio de fotos de Synology. &lt;code&gt;DSfile&lt;/code&gt; expone DS File por HTTP. &lt;code&gt;DSM&lt;/code&gt; publica el puerto de administración DSM por TCP. &lt;code&gt;MSTC&lt;/code&gt; reenvía Escritorio remoto de Windows.&lt;/p&gt;
&lt;p&gt;Una vez conectado el cliente, accede desde Internet mediante los dominios o puertos configurados.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsfile_login1-512x1024.jpg&#34;
	width=&#34;512&#34;
	height=&#34;1024&#34;
	srcset=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsfile_login1-512x1024_hu_a59a5ae57136cec5.jpg 480w, https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsfile_login1-512x1024_hu_c77c684ec257c36c.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Inicio de sesión de DS file&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;50&#34;
		data-flex-basis=&#34;120px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsphoto_login1-512x1024.jpg&#34;
	width=&#34;512&#34;
	height=&#34;1024&#34;
	srcset=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsphoto_login1-512x1024_hu_6354f3dcb2ef3d0e.jpg 480w, https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/dsphoto_login1-512x1024_hu_68577b1af3ba0203.jpg 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Inicio de sesión de DS photo&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;50&#34;
		data-flex-basis=&#34;120px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/login.png&#34;
	width=&#34;476&#34;
	height=&#34;322&#34;
	srcset=&#34;https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/login_hu_dc600ae6270b1122.png 480w, https://knightli.com/2020/10/10/%E6%97%A0%E5%85%AC%E7%BD%91ip-frp-%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%BE%A4%E6%99%96-dsfile-dsphoto-%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2/login_hu_995beec8b6116b29.png 1024w&#34;
	loading=&#34;lazy&#34;
	
		alt=&#34;Inicio de sesión de Escritorio remoto&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;147&#34;
		data-flex-basis=&#34;354px&#34;
	
&gt;&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
