<?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://www.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>Tue, 12 May 2026 22:15:34 +0800</lastBuildDate><atom:link href="https://www.knightli.com/es/categories/technical-docs/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Términos de informática en lenguaje simple: qué significan TTS, STT, API, RAG y Agent</title>
        <link>https://www.knightli.com/es/2026/05/12/computer-terms-in-plain-language/</link>
        <pubDate>Tue, 12 May 2026 22:15:34 +0800</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2026/05/09/btrfs-scrub-check-repair-guide/</link>
        <pubDate>Sat, 09 May 2026 07:11:01 +0800</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2026/05/08/deepseek-v4-local-private-deployment/</link>
        <pubDate>Fri, 08 May 2026 09:39:35 +0800</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2026/05/08/rtx-3060-local-llm-models/</link>
        <pubDate>Fri, 08 May 2026 09:25:24 +0800</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2026/05/07/linux-desktop-distro-comparison-2026/</link>
        <pubDate>Thu, 07 May 2026 21:17:11 +0800</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.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>rsync --delete Limpieza de directorios explicada y práctica</title>
        <link>https://www.knightli.com/es/2026/03/29/rsync-delete-explained/</link>
        <pubDate>Sun, 29 Mar 2026 11:00:00 +0800</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2026/03/29/git-executable-permission-x/</link>
        <pubDate>Sun, 29 Mar 2026 10:00:00 +0800</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2026/03/29/hugo-bundle-file-shortcode/</link>
        <pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2026/03/28/what-is-agent-skills/</link>
        <pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.knightli.com/2026/03/28/%E4%BB%80%E4%B9%88%E6%98%AF-agent-skills/1_hu_3f15e8771443e908.png 480w, https://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.knightli.com/es/2025/06/13/gnu-c-attribute-guide/</link>
        <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2025/06/13/c-struct-initialization/</link>
        <pubDate>Fri, 13 Jun 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.knightli.com/2025/04/17/pyocd-daplink-%E8%AF%86%E5%88%AB/1_hu_94c8fd7c40db175d.png 480w, https://www.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://www.knightli.com/es/2025/04/14/compress-docx/</link>
        <pubDate>Mon, 14 Apr 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2025/03/28/cmake-basics-and-templates/</link>
        <pubDate>Fri, 28 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2025/03/18/stm32-py32-gpio-modes/</link>
        <pubDate>Tue, 18 Mar 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.knightli.com/2025/03/17/pyocd-jlink/1.png&#34;
	width=&#34;712&#34;
	height=&#34;432&#34;
	srcset=&#34;https://www.knightli.com/2025/03/17/pyocd-jlink/1_hu_dedf493610fe49eb.png 480w, https://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.knightli.com/es/2025/01/19/openwrt-wireguard-auto-reconnect/</link>
        <pubDate>Sun, 19 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.knightli.com/es/2025/01/17/lvm-on-ubuntu/</link>
        <pubDate>Fri, 17 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2025/01/07/encode-mp3-with-ffmpeg/</link>
        <pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2025/01/01/safe-hdd-hot-swap/</link>
        <pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.knightli.com/es/2024/10/24/inpaint-web/</link>
        <pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.knightli.com/zapato2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt; &lt;br&gt;
&lt;img src=&#34;https://www.knightli.com/zapato3.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;br&gt;
&lt;img src=&#34;https://www.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://www.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://www.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://www.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://www.knightli.com/coche2.png&#34;
	
	
	
	loading=&#34;lazy&#34;
	
	
&gt;&lt;/p&gt;
&lt;center&gt;&lt;table&gt;&lt;tr&gt;&lt;td bgcolor=#D1EEEE&gt;&lt;font size=5&gt;&lt;a href=&#34;https://inpaint-web.knightli.com/&#34;&gt; Sitio web: https://inpaint-web.knightli.com/ &lt;/a&gt; &lt;/font&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/center&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://www.knightli.com/es/2024/09/29/wifi-frequency-bands/</link>
        <pubDate>Sun, 29 Sep 2024 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/2.4g_hu_1d0a5f01e12ac2fb.png 480w, https://www.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://www.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://www.knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.2g_hu_69184bd47b7224e8.png 480w, https://www.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://www.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://www.knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.5g_hu_487855bc6b1660a9.png 480w, https://www.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://www.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://www.knightli.com/2024/09/29/wifi%E9%A2%91%E6%AE%B5/5.8g_hu_9b598785b65fb427.png 480w, https://www.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://www.knightli.com/es/2024/07/09/xiaomi-ax3600-mibib-firmware-compatibility/</link>
        <pubDate>Tue, 09 Jul 2024 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.knightli.com/es/2023/10/28/openstick-debian-wifi-ap-optimization/</link>
        <pubDate>Sat, 28 Oct 2023 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2023/08/09/openstick-wifi-debian-firmware-build/</link>
        <pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2023/03/17/reset-mdadm-raid-ubuntu/</link>
        <pubDate>Fri, 17 Mar 2023 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/es/2023/03/04/ubuntu-ntfs-write-speed-fix/</link>
        <pubDate>Sat, 04 Mar 2023 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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://www.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>Verifique si la renovación automática de Certbot para Let&#39;s Encrypt está funcionando</title>
        <link>https://www.knightli.com/es/2022/12/08/verify-certbot-auto-renew/</link>
        <pubDate>Thu, 08 Dec 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2022/12/08/verify-certbot-auto-renew/</guid>
        <description>&lt;h2 id=&#34;verificar-el-estado-del-temporizador&#34;&gt;Verificar el estado del temporizador
&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;sudo systemctl status certbot.timer
&lt;/span&gt;&lt;/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 temporizador está activo y esperando, la renovación programada está habilitada.&lt;/p&gt;
&lt;h2 id=&#34;validar-flujo-de-renovación&#34;&gt;Validar flujo de renovación
&lt;/h2&gt;&lt;p&gt;Ejecutar un simulacro:&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 certbot renew --dry-run
&lt;/span&gt;&lt;/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 ensayo tiene éxito, su ruta de renovación está funcionando correctamente.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Cree un servidor Git en Synology NAS y programe una copia de seguridad con Hyper Backup</title>
        <link>https://www.knightli.com/es/2022/12/07/synology-git-server-setup/</link>
        <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2022/12/07/synology-git-server-setup/</guid>
        <description>&lt;h2 id=&#34;pasos-de-configuración&#34;&gt;Pasos de configuración
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Instale el paquete Git Server.&lt;/li&gt;
&lt;li&gt;Cree un usuario dedicado (por ejemplo, &lt;code&gt;git&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Habilitar el servicio a domicilio del usuario.&lt;/li&gt;
&lt;li&gt;Habilite el servicio SSH.&lt;/li&gt;
&lt;li&gt;Conéctese vía SSH e inicialice los repositorios.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/1.png&#34;
	width=&#34;521&#34;
	height=&#34;260&#34;
	srcset=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/1_hu_87c69ff184b96483.png 480w, https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/1_hu_5df35322f18a78c3.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;200&#34;
		data-flex-basis=&#34;480px&#34;
	
&gt;
&lt;img src=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/2.png&#34;
	width=&#34;787&#34;
	height=&#34;470&#34;
	srcset=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/2_hu_7dbf1b28ab245911.png 480w, https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/2_hu_1085648b2b405d5.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;167&#34;
		data-flex-basis=&#34;401px&#34;
	
&gt;
&lt;img src=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/3.png&#34;
	width=&#34;750&#34;
	height=&#34;428&#34;
	srcset=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/3_hu_3635c069504d6b32.png 480w, https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/3_hu_df8dd3408cc69078.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;175&#34;
		data-flex-basis=&#34;420px&#34;
	
&gt;
&lt;img src=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/4.png&#34;
	width=&#34;544&#34;
	height=&#34;446&#34;
	srcset=&#34;https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/4_hu_96578f3584dd95a6.png 480w, https://www.knightli.com/2022/12/07/%E7%BE%A4%E6%99%96%E4%B8%AD%E6%90%AD%E5%BB%BAgit%E6%9C%8D%E5%8A%A1%E5%99%A8/4_hu_35c02f9214040311.png 1024w&#34;
	loading=&#34;lazy&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;121&#34;
		data-flex-basis=&#34;292px&#34;
	
&gt;&lt;/p&gt;
&lt;h2 id=&#34;copia-de-seguridad&#34;&gt;Copia de seguridad
&lt;/h2&gt;&lt;p&gt;Utilice las tareas programadas de Hyper Backup para realizar copias de seguridad de los repositorios periódicamente.&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Compilar y flashear firmware OpenWrt personalizado para el router Redmi AX6S</title>
        <link>https://www.knightli.com/es/2022/09/04/redmi-ax6s-openwrt-build-flash/</link>
        <pubDate>Sun, 04 Sep 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.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://www.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://www.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://www.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>Ataque de sibila</title>
        <link>https://www.knightli.com/es/2022/07/05/sybil-attack/</link>
        <pubDate>Tue, 05 Jul 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2022/07/05/sybil-attack/</guid>
        <description>&lt;h2 id=&#34;origen-del-término&#34;&gt;Origen del término
&lt;/h2&gt;&lt;p&gt;El nombre proviene del caso/historia &amp;ldquo;Sybil&amp;rdquo;, asociado a múltiples identidades.&lt;/p&gt;
&lt;h2 id=&#34;qué-es-un-ataque-sybil&#34;&gt;¿Qué es un ataque Sybil?
&lt;/h2&gt;&lt;p&gt;Un atacante crea muchos nodos/cuentas falsas para obtener una influencia desproporcionada en los sistemas distribuidos.&lt;/p&gt;
&lt;p&gt;Áreas de impacto comunes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Redes P2P&lt;/li&gt;
&lt;li&gt;plataformas sociales&lt;/li&gt;
&lt;li&gt;consenso y votación de blockchain&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;mitigaciones&#34;&gt;Mitigaciones
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Prueba de trabajo (barrera de costo de recursos)&lt;/li&gt;
&lt;li&gt;Prueba de participación/peso de identidad basado en participación&lt;/li&gt;
&lt;li&gt;sistemas de identidad y reputación&lt;/li&gt;
&lt;li&gt;controles antispam económicos y a nivel de protocolo&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Conecte dos redes OpenWrt a través de Internet con WireGuard</title>
        <link>https://www.knightli.com/es/2022/04/14/openwrt-wireguard-two-networks/</link>
        <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2022/04/14/openwrt-wireguard-two-networks/</guid>
        <description>&lt;h2 id=&#34;objetivo&#34;&gt;Objetivo
&lt;/h2&gt;&lt;p&gt;Conecte dos LAN separadas a través de un túnel WireGuard cifrado mientras mantiene el acceso a Internet existente.&lt;/p&gt;
&lt;h2 id=&#34;requisitos&#34;&gt;Requisitos
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;Al menos un lado tiene dirección pública/DDNS accesible&lt;/li&gt;
&lt;li&gt;Ambos lados ejecutan OpenWrt con WireGuard instalado&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;pasos-clave&#34;&gt;Pasos clave
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;Genere pares de claves:&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;wg genkey &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee privatekey1 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wg pubkey &amp;gt; publickey1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wg genkey &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee privatekey2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wg pubkey &amp;gt; publickey2
&lt;/span&gt;&lt;/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;Configure las interfaces y los pares en ambos enrutadores.&lt;/li&gt;
&lt;li&gt;Establezca rutas/reglas de firewall para permitir el acceso entre LAN.&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>Instale GoAccess en Ubuntu &#43; Nginx para análisis de sitios en tiempo real</title>
        <link>https://www.knightli.com/es/2022/04/14/goaccess-nginx-ubuntu/</link>
        <pubDate>Thu, 14 Apr 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2022/04/14/goaccess-nginx-ubuntu/</guid>
        <description>&lt;p&gt;&lt;img src=&#34;https://www.knightli.com/2022/04/14/goaccess-nginx/1.png&#34;
	width=&#34;826&#34;
	height=&#34;485&#34;
	srcset=&#34;https://www.knightli.com/2022/04/14/goaccess-nginx/1_hu_9f5944f53f0d9412.png 480w, https://www.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://www.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://www.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://www.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://www.knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/1_hu_b2afa6a26cbb1a94.jpg 480w, https://www.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://www.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://www.knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/2_hu_7340d37ec0be7651.jpg 480w, https://www.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://www.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://www.knightli.com/2022/03/29/ubuntu-install-nvme-over-fabrics-rdma-hp-544-flr-qsfp/3_hu_f4470a3304f5b2b3.jpg 480w, https://www.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://www.knightli.com/es/2022/03/25/hugo-utterances-comments/</link>
        <pubDate>Fri, 25 Mar 2022 00:00:00 +0000</pubDate>
        
        <guid>https://www.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://www.knightli.com/2022/03/25/hugo-utterances/1.png&#34;
	width=&#34;1357&#34;
	height=&#34;816&#34;
	srcset=&#34;https://www.knightli.com/2022/03/25/hugo-utterances/1_hu_48206989f5aec7e1.png 480w, https://www.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://www.knightli.com/2022/03/25/hugo-utterances/2.png&#34;
	width=&#34;1359&#34;
	height=&#34;914&#34;
	srcset=&#34;https://www.knightli.com/2022/03/25/hugo-utterances/2_hu_db1353451b80d2f9.png 480w, https://www.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>Utilice FRP para acceder a Synology DS File/DS Photo de forma remota sin IP pública</title>
        <link>https://www.knightli.com/es/2020/10/10/frp-synology-remote-access/</link>
        <pubDate>Sat, 10 Oct 2020 00:00:00 +0000</pubDate>
        
        <guid>https://www.knightli.com/es/2020/10/10/frp-synology-remote-access/</guid>
        <description>&lt;p&gt;FRP puede exponer servicios internos a través de Internet cuando no hay una IP pública disponible.&lt;/p&gt;
&lt;p&gt;Proyecto:
&lt;a class=&#34;link&#34; href=&#34;https://github.com/fatedier/frp&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;https://github.com/fatedier/frp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Flujo de trabajo básico:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;instalar el servidor y el cliente FRP&lt;/li&gt;
&lt;li&gt;configurar reglas de reenvío (tcp/http/https)
Tercero, exponer los servicios de DS de forma segura&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        
    </channel>
</rss>
