[{"authors":[],"categories":[{"title":"Technology","url":"/es/categories/technology/"},{"title":"Digital-Radar","url":"/es/categories/digital-radar/"}],"content":" Digital Radar Resumen Ejecutivo El panorama tecnológico global se encuentra en una fase de profunda reconfiguración. La jornada de hoy destaca por la consolidación de tendencias que transforman la infraestructura digital, la seguridad y los modelos de negocio de las organizaciones. En el ámbito de la Inteligencia Artificial, observamos una transición crítica desde los modelos de lenguaje masivos y centralizados hacia arquitecturas más eficientes, localizadas y estrictamente reguladas. Paralelamente, la ciberseguridad se enfrenta a la sofisticación de los ataques de evasión y a la urgencia de adoptar estándares criptográficos preparados para la era cuántica.\nEn la infraestructura, la computación en la nube se adapta a las exigencias geopolíticas mediante el despliegue de nubes soberanas, mientras que las prácticas de DevOps consolidan la ingeniería de plataformas para mitigar la carga cognitiva de los desarrolladores. Por último, el ecosistema de código abierto vive un cisma histórico provocado por los cambios de licencias de software crítico, lo que ha impulsado la creación de bifurcaciones (forks) respaldadas por grandes consorcios neutrales. Este informe analiza en detalle estos vectores de cambio, evaluando su impacto técnico y estratégico para las organizaciones modernas.\nInteligencia Artificial La transición hacia modelos de lenguaje pequeños (SLM) y la eficiencia en el borde El paradigma de \u0026ldquo;más grande es mejor\u0026rdquo; en el desarrollo de Modelos de Lenguaje de Gran Tamaña (LLM) está siendo desafiado por la viabilidad comercial y técnica de los Modelos de Lenguaje Pequeños (SLM, por sus siglas en inglés). Durante las últimas horas, diversos proveedores de tecnología han presentado optimizaciones para modelos que oscilan entre los 3.000 y los 8.000 millones de parámetros, demostrando capacidades de razonamiento que rivalizan con sistemas diez veces mayores en tareas específicas.\nEstos modelos están diseñados para ejecutarse localmente en dispositivos finales (Edge AI) o en servidores corporativos de capacidad moderada, utilizando técnicas avanzadas de cuantización (reducción de la precisión de los pesos numéricos del modelo) y destilación de conocimiento.\nPor qué es importante Esta evolución es crucial por tres razones fundamentales:\nSostenibilidad económica: Los costes de inferencia en la nube para modelos masivos son prohibitivos a escala. Los SLM permiten a las empresas procesar millones de consultas diarias con una fracción del coste de infraestructura. Privacidad y cumplimiento: Al ejecutar los modelos de forma local o en entornos híbridos controlados, los datos sensibles de los clientes no abandonan el perímetro de la organización, facilitando el cumplimiento de normativas estrictas de privacidad. Latencia: Para aplicaciones en tiempo real, como asistentes de voz o sistemas de soporte interactivos, la latencia de red asociada a las API de nube pública es inaceptable. Los SLM en el borde ofrecen respuestas casi instantáneas. Implementación práctica de la Ley de IA de la Unión Europea La Oficina de IA de la Unión Europea ha comenzado a publicar las directrices técnicas detalladas para la implementación de la Ley de Inteligencia Artificial (AI Act). Las empresas tecnológicas que operan en territorio europeo han iniciado auditorías internas para clasificar sus sistemas según los niveles de riesgo definidos por la normativa: inaceptable, alto, específico de transparencia y mínimo.\nLas exigencias para los sistemas de \u0026ldquo;alto riesgo\u0026rdquo; (que incluyen algoritmos de contratación, evaluación crediticia e infraestructura crítica) imponen requisitos estrictos de gobernanza de datos, documentación técnica, registro de actividad y supervisión humana.\nPor qué es importante La Ley de IA de la UE no es solo un marco regional; su efecto extraterritorial (similar al del RGPD) obligará a cualquier empresa global que preste servicios en Europa a adaptar sus procesos de desarrollo. La falta de cumplimiento puede acarrear multas de hasta el 7% de la facturación global anual. Esto acelera la necesidad de herramientas de MLOps especializadas en la observabilidad, la explicabilidad de los modelos y la trazabilidad del sesgo algorítmico.\nCiberseguridad El auge de los ataques “Living off the Land” (LotL) Los informes de telemetría de las principales firmas de seguridad revelan un incremento sin precedentes en las tácticas de ataque conocidas como Living off the Land (LotL). En estos incidentes, los actores de amenazas no introducen malware externo en los sistemas de las víctimas. En su lugar, utilizan herramientas legítimas preinstaladas en el sistema operativo, como PowerShell, Windows Management Instrumentation (WMI) o utilidades de administración de red.\nAl emplear herramientas autorizadas, los atacantes logran evadir las soluciones tradicionales de detección y respuesta en el punto final (EDR), que suelen buscar firmas de archivos maliciosos conocidos.\nPor qué es importante La detección de ataques LotL requiere un cambio de paradigma en la defensa cibernética. Las organizaciones ya no pueden confiar únicamente en la reputación de los archivos. Deben implementar análisis de comportamiento basados en Inteligencia Artificial y arquitecturas de Confianza Cero (Zero Trust) que monitoricen no qué herramienta se está ejecutando, sino cómo y quién la está utilizando. La visibilidad detallada de los registros de eventos y la correlación de telemetría en tiempo real se convierten en las únicas defensas efectivas.\nLa transición obligatoria a la Criptografía Post-Cuántica (PQC) Tras la publicación por parte del Instituto Nacional de Estándares y Tecnología de EE. UU. (NIST) de los primeros estándares oficiales de algoritmos criptográficos resistentes a la computación cuántica (como ML-KEM y ML-DSA), los departamentos de seguridad de las grandes corporaciones financieras y de infraestructura crítica han comenzado a trazar sus planes de migración.\nAunque las computadoras cuánticas con capacidad para romper el cifrado RSA actual todavía están a años de distancia, la estrategia de los atacantes conocida como \u0026ldquo;Cosechar ahora, descifrar después\u0026rdquo; (Harvest Now, Decrypt Later) implica que los datos cifrados interceptados hoy serán vulnerables en el futuro.\nPor qué es importante La transición a la criptografía post-cuántica es el esfuerzo de migración tecnológica más complejo de las últimas décadas. Los nuevos algoritmos requieren tamaños de clave más grandes y tiempos de procesamiento diferentes, lo que puede romper protocolos de red existentes y degradar el rendimiento de los sistemas heredados. Las organizaciones deben realizar de inmediato un inventario de sus activos criptográficos para evaluar su \u0026ldquo;agilidad criptográfica\u0026rdquo;, es decir, la capacidad de actualizar algoritmos sin rediseñar por completo las aplicaciones.\nComputación en la Nube La consolidación de la Nube Soberana ante la fragmentación geopolítica Los tres grandes proveedores de nube pública (Amazon Web Services, Microsoft Azure y Google Cloud) han acelerado el despliegue de sus ofertas de \u0026ldquo;Nube Soberana\u0026rdquo;. Estas regiones de nube están diseñadas específicamente para cumplir con las leyes de soberanía de datos de naciones o bloques económicos específicos, garantizando que los datos de los clientes, los metadatos y las operaciones de soporte sean gestionados exclusivamente por personal local y dentro de fronteras geográficas definidas.\nEstas arquitecturas a menudo implican la colaboración con socios locales que actúan como operadores independientes de la infraestructura, aislando los datos de la jurisdicción de gobiernos extranjeros.\nPor qué es importante La soberanía de datos ya no es un requisito exclusivo del sector público o militar; se ha convertido en una prioridad para sectores altamente regulados como la banca, la salud y las telecomunicaciones. La adopción de nubes soberanas permite a las empresas multinacionales expandir sus servicios digitales globalmente sin violar las complejas y a menudo contradictorias regulaciones locales de privacidad y seguridad nacional.\nLa eliminación de las tasas de salida de datos (Egress Fees) En respuesta a la presión regulatoria, particularmente la Ley de Datos de la Unión Europea (Data Act), los principales proveedores de nube han eliminado o reducido drásticamente las tarifas por transferir datos fuera de sus plataformas cuando un cliente decide migrar a otro proveedor. Históricamente, estas tasas de salida actuaban como una barrera financiera significativa, desincentivando las estrategias multiclub.\nPor qué es importante Esta medida fomenta un mercado de nube más competitivo y dinámico. Al reducir el coste del cambio de proveedor, las organizaciones pueden diseñar arquitecturas multiclub reales, distribuyendo sus cargas de trabajo en función del rendimiento, la especialización de los servicios y el coste, en lugar de verse atrapadas por el bloqueo del proveedor (vendor lock-in). Sin embargo, esto también exige una gestión de red más compleja y herramientas de orquestación que puedan operar de manera fluida a través de múltiples nubes.\nDevOps La consolidación de la Ingeniería de Plataformas sobre el DevOps tradicional El concepto de DevOps como una responsabilidad compartida donde \u0026ldquo;tú lo construyes, tú lo ejecutas\u0026rdquo; está evolucionando hacia la Ingeniería de Plataformas. Las organizaciones están creando Plataformas Internas de Desarrollador (IDP, por sus siglas en inglés) que empaquetan herramientas, infraestructura y políticas de seguridad en portales de autoservicio para los desarrolladores.\nEn lugar de requerir que cada desarrollador de software sea un experto en Kubernetes, Terraform y redes de nube, la IDP proporciona \u0026ldquo;caminos pavimentados\u0026rdquo; (golden paths) que automatizan el aprovisionamiento de recursos de manera segura y estandarizada.\n1+-----------------------------------------------------------------+ 2| Portal de Autoservicio (IDP) | 3| [Crear Servicio] [Desplegar Base de Datos] [Ver Métricas] | 4+-----------------------------------------------------------------+ 5 | (Abstracción) 6 v 7+-----------------------------------------------------------------+ 8| Ingeniería de Plataformas (Golden Paths) | 9| - Plantillas Terraform - Políticas OPA - CI/CD Seguros | 10+-----------------------------------------------------------------+ 11 | (Orquestación) 12 v 13+-----------------------------------------------------------------+ 14| Infraestructura (Kubernetes, AWS, Azure) | 15+-----------------------------------------------------------------+ Por qué es importante La complejidad de los entornos nativos de la nube ha superado la capacidad cognitiva de los equipos de desarrollo individuales. La Ingeniería de Plataformas reduce la fricción operativa, acelera el tiempo de comercialización de las aplicaciones (Time-to-Market) y garantiza que las directrices de seguridad y cumplimiento se apliquen de forma predeterminada desde el inicio del ciclo de vida del desarrollo, mitigando el riesgo de configuraciones incorrectas en producción.\neBPF como estándar para la observabilidad y seguridad en Kubernetes La tecnología eBPF (Extended Berkeley Packet Filter) se ha consolidado como el estándar de facto para la observabilidad, el redes y la seguridad en entornos de contenedores. Al permitir la ejecución de programas de forma segura dentro del núcleo (kernel) de Linux sin modificar el código de las aplicaciones ni cargar módulos externos pesados, eBPF ofrece una visibilidad sin precedentes del comportamiento del sistema.\nPor qué es importante Los métodos tradicionales de monitorización basados en agentes o contenedores auxiliares (sidecars) introducen una sobrecarga de rendimiento significativa y complejidad en la gestión de Kubernetes. eBPF proporciona métricas de red, trazas de llamadas al sistema y detección de anomalías de seguridad en tiempo real con un impacto mínimo en el rendimiento. Esto permite identificar cuellos de botella y amenazas de seguridad a nivel de kernel, mejorando la resiliencia de las aplicaciones distribuidas.\nCódigo Abierto La crisis de licencias y el surgimiento de bifurcaciones comunitarias El ecosistema de código abierto atraviesa un periodo de tensión debido a la decisión de varias empresas comerciales de modificar las licencias de sus proyectos de código abierto (como Redis y HashiCorp con Terraform) hacia licencias de fuente disponible (Business Source License o BSL). Estas nuevas licencias restringen el uso del software por parte de proveedores de nube competidores que ofrecen el software como un servicio gestionado sin contribuir económicamente al proyecto original.\nComo respuesta directa, la comunidad de desarrolladores y fundaciones neutrales como la Linux Foundation han creado bifurcaciones (forks) verdaderamente de código abierto, como Valkey (para Redis) y OpenTofu (para Terraform).\nPor qué es importante Este cisma redefine la relación entre los creadores de software, los proveedores de nube y las empresas usuarias. Las organizaciones deben revisar cuidadosamente sus dependencias de software para evitar riesgos legales o costes de licencia inesperados. El rápido respaldo de la industria a proyectos como Valkey y OpenTofu demuestra que el mercado valora la gobernanza neutral y la estabilidad del código abierto sobre el control propietario de una sola corporación.\nLa maduración de Rust en el Kernel de Linux El desarrollo del Kernel de Linux continúa integrando Rust como su segundo lenguaje oficial de programación, junto con C. En las versiones recientes del kernel, se han incorporado controladores de dispositivos y subsistemas clave escritos en Rust. Esta integración busca aprovechar las garantías de seguridad de memoria que ofrece el compilador de Rust, eliminando de raíz clases enteras de vulnerabilidades comunes como los desbordamientos de búfer (buffer overflows) y el uso de memoria después de ser liberada (use-after-free).\nPor qué es importante Aproximadamente el 70% de las vulnerabilidades de seguridad graves en sistemas operativos de gran tamaño están relacionadas con la gestión de memoria. La adopción de Rust en el núcleo del sistema operativo más utilizado en servidores y dispositivos móviles a nivel mundial promete elevar drásticamente los niveles de seguridad y estabilidad de la infraestructura digital global a largo plazo.\nLecturas Recomendadas NIST Special Publication 800-203 (Borrador): Directrices para la transición de las organizaciones a algoritmos criptográficos post-cuánticos. Un documento esencial para directores de seguridad de la información (CISO). The CNCF Platform Engineering Maturity Model: Una guía detallada de la Cloud Native Computing Foundation para evaluar y diseñar portales internos de desarrollador eficaces. Análisis de la Oficina de IA de la UE sobre Modelos de Propósito General: Un desglose técnico de los requisitos de cumplimiento para desarrolladores de modelos fundacionales bajo la nueva legislación europea. eBPF: Superpowers for Kubernetes Observability: Un estudio técnico sobre cómo la instrumentación a nivel de kernel optimiza el rendimiento de las redes de contenedores y reduce los costes de monitorización. The Valkey Migration Guide: Documentación oficial de la Linux Foundation para la transición de entornos de producción de Redis a la bifurcación de código abierto Valkey. Conclusión Los desarrollos analizados hoy reflejan una maduración del sector tecnológico, donde la prioridad ha pasado de la experimentación acelerada a la optimización, la seguridad y el cumplimiento normativo.\nLa Inteligencia Artificial está encontrando su equilibrio económico y operativo a través de modelos más pequeños y eficientes, mientras que las organizaciones se preparan para un entorno regulatorio más estricto. En infraestructura y seguridad, la transición hacia la criptografía post-cuántica, la adopción de nubes soberanas y la consolidación de la ingeniería de plataformas demuestran que la resiliencia y la eficiencia operativa son los pilares sobre los que se construye la próxima generación de servicios digitales. Por último, la defensa del código abierto real frente a los cambios de licencias comerciales asegura que la innovación colaborativa seguirá siendo el motor de la infraestructura tecnológica global.\n","date":"20 de julio de 2026","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/2026-07-20-digital-radar/","series":[{"title":"Digital-Radar","url":"/es/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/es/tags/ai/"},{"title":"Cybersecurity","url":"/es/tags/cybersecurity/"},{"title":"Cloud","url":"/es/tags/cloud/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Open-Source","url":"/es/tags/open-source/"}],"timestamp":1784521815,"title":"Digital Radar 2026-07-20"},{"authors":[],"categories":[{"title":"Technology","url":"/es/categories/technology/"},{"title":"Quantum-Computing","url":"/es/categories/quantum-computing/"}],"content":" Estado de la computación cuántica Resumen La computación cuántica es hoy una disciplina de investigación y de nube, no un producto de consumo. IBM dice que sus sistemas se ejecutan en centros de datos con infraestructura criogénica y acceso a través de la plataforma IBM Quantum, y su hoja de ruta pública aún apunta hacia sistemas tolerantes a fallas para 2029 (Hardware de IBM, Hoja de ruta de IBM). Microsoft también posiciona Azure Quantum como un servicio en la nube para cargas de trabajo cuánticas más HPC/AI, no como hardware doméstico (Cuántico azur).\nDónde se encuentra el campo ahora El estado actual es el siguiente: existen procesadores cuánticos, pero todavía están limitados por el ruido, la corrección de errores y la infraestructura. IBM dice que sus sistemas ya operan en entornos de centros de datos de estilo de producción y que el siguiente paso es una infraestructura criogénica escalable y qubits lógicos (Hardware de IBM). Su hoja de ruta pública apunta a una ventaja cuántica a corto plazo para fines de 2026 y a la primera computadora cuántica a gran escala tolerante a fallas para 2029 (Hoja de ruta de IBM).\n¿Cuándo llegarán las computadoras cuánticas a los consumidores domésticos? Respuesta corta: no pronto. Las máquinas actuales requieren sistemas criogénicos, centros de datos especializados y capas de control clásicas híbridas (Hardware de IBM). Eso hace que una computadora cuántica de consumo tipo computadora portátil o de escritorio sea poco realista en este momento. El camino probable es primero tener más acceso a la nube e instalaciones empresariales especializadas, no una computadora cuántica en la sala de estar (Plataforma cuántica de IBM, Cuántico azur).\nMi opinión es que el uso doméstico no es una realidad de la década de 2020 y probablemente solo sea plausible una vez que la tolerancia a fallas, la refrigeración, el costo y la confiabilidad mejoren dramáticamente. Ningún proveedor importante publica hoy una hoja de ruta para el consumidor.\nÚltimos avances Los avances recientes más importantes son en su mayoría hitos de ingeniería y escalamiento, no de hardware de consumo. IBM está enfatizando familias de procesadores más grandes, escalabilidad criogénica y el camino hacia la tolerancia a fallas (Hardware de IBM). Microsoft destaca Majorana 1 en Azure Quantum y un enfoque basado en topoconductores para chips cuánticos (Cuántico azur). Quantinuum afirma que ya ha implementado comercialmente varias generaciones de sistemas cuánticos y ahora está vinculando la computación cuántica, la HPC y la IA para cargas de trabajo empresariales (Colaboración cuántica de HPE).\n¿Se utilizan ya los ordenadores cuánticos en entornos de producción? Sí, pero en casos de uso específicos y principalmente como servicios de nube híbrida. D-Wave describe explícitamente \u0026ldquo;cuanto en producción\u0026rdquo; para clientes como Pattison Food Group y NTT DOCOMO, y también describe una ruta de producción desde el descubrimiento de problemas hasta la implementación (Historias de éxito de clientes de D-Wave, Programación de producción de D-Wave). Quantinuum también dice que ha implementado comercialmente sistemas cuánticos y está trabajando con clientes de los sectores farmacéutico, ciencia de materiales, servicios financieros, gobierno e industria (Colaboración cuántica de HPE).\nEl matiz importante es que este uso de producción es principalmente optimización, simulación y flujos de trabajo híbridos. Todavía no es un sustituto general de los servidores clásicos.\n¿Se utilizarán para la computación central en la nube? Probablemente sí como acelerador, no como sustituto. El papel más probable de la tecnología cuántica es junto a los mainframes, los clústeres de HPC y las plataformas en la nube para cargas de trabajo específicas, como la optimización y la simulación. IBM habla de supercomputación cuántica y de sistemas que conectan múltiples QPU en un entorno de centro de datos (Hardware de IBM). Quantinuum dice lo mismo con la integración explícita de HPC cuántica para casos de uso empresarial e industrial (Colaboración cuántica de HPE).\nMi expectativa: Quantum será un coprocesador conectado a la nube para problemas muy específicos, no un \u0026ldquo;mainframe cuántico\u0026rdquo; independiente.\n¿Se utilizarán para la computación central de IA? También sí, pero como complemento y no como sustituto. Microsoft vincula la tecnología cuántica directamente con la supercomputación en la nube y las soluciones de inteligencia artificial en Azure Quantum (Cuántico azur). Esto sugiere un futuro en el que la tecnología cuántica puede acelerar algunos problemas de optimización, simulación e investigación relacionados con la IA, pero no un reemplazo directo de las GPU, las TPU o los mainframes de IA clásicos.\nPara el entrenamiento amplio de IA, el hardware clásico sigue siendo dominante por ahora. Quantum puede eventualmente ofrecer una aceleración de nicho, pero las fuentes públicas aún no apuntan a un papel de producción amplio.\nConclusión La computación cuántica es real, útil y ya está en uso, pero no está lo suficientemente madura para uso doméstico. El estado actual es acceso a la nube, pilotos empresariales, producción de nicho y un camino claro hacia la tolerancia a fallas en los próximos años (Hoja de ruta de IBM, Programación de producción de D-Wave, noticias cuánticas). En una frase: las computadoras cuánticas son actualmente máquinas especializadas en centros de datos y en la nube, no productos electrónicos de consumo, y su mayor valor por ahora está en los flujos de trabajo híbridos con HPC e IA.\n","date":"14 de julio de 2026","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/2026-07-14-quantum-computing-status/","series":[],"smallImg":"","tags":[{"title":"Quantum-Computing","url":"/es/tags/quantum-computing/"},{"title":"Cloud","url":"/es/tags/cloud/"},{"title":"Ai","url":"/es/tags/ai/"},{"title":"Hpc","url":"/es/tags/hpc/"},{"title":"Research","url":"/es/tags/research/"}],"timestamp":1784012400,"title":"Estado De La Computación Cuántica"},{"authors":[],"categories":[{"title":"Technology","url":"/es/categories/technology/"},{"title":"Digital-Radar","url":"/es/categories/digital-radar/"}],"content":" Digital Radar Resumen Ejecutivo El panorama tecnológico global experimenta hoy una transición crítica caracterizada por la optimización, la consolidación de estándares y la adaptación a marcos regulatorios cada vez más estrictos. En el ámbito de la Inteligencia Artificial, asistimos a un cambio de paradigma: la carrera por el modelo más grande está dando paso a la búsqueda de la máxima eficiencia mediante modelos de lenguaje pequeños (SLM) y arquitecturas híbridas. Paralelamente, la ciberseguridad se enfrenta a amenazas sofisticadas que explotan vulnerabilidades en la infraestructura crítica, obligando a las organizaciones a acelerar la adopción de arquitecturas de Confianza Cero (Zero Trust).\nEn el sector de la computación en la nube, la soberanía de los datos y el cumplimiento normativo (especialmente bajo el marco de la directiva europea NIS2) están reconfigurando las estrategias de los grandes proveedores de servicios (hyperscalers). Mientras tanto, el ecosistema DevOps consolida la ingeniería de plataformas y la observabilidad avanzada como pilares para reducir la carga cognitiva de los desarrolladores. Por último, el movimiento de código abierto navega por aguas turbulentas debido a las tensiones sobre las licencias de software, lo que está impulsando una redefinición de la gobernanza comunitaria. Este informe analiza en detalle estos vectores de cambio y su impacto estratégico en el tejido empresarial y tecnológico.\nInteligencia Artificial El auge de los Modelos de Lenguaje Pequeños (SLM) y la eficiencia en el borde Durante el último año, la industria de la Inteligencia Artificial estuvo dominada por la narrativa de \u0026ldquo;cuanto más grande, mejor\u0026rdquo;, con modelos que superaban los cientos de miles de millones de parámetros. Sin embargo, las limitaciones físicas de los centros de datos, la escasez de chips de procesamiento gráfico (GPU) y los elevados costes de inferencia han provocado un giro estratégico hacia los Modelos de Lenguaje Pequeños (SLM, por sus siglas en inglés).\nHoy se consolidan arquitecturas de menos de 10.000 millones de parámetros que, gracias a técnicas avanzadas de destilación de conocimiento, cuantización y ajuste fino (fine-tuning) con datos sintéticos de alta calidad, igualan o superan el rendimiento de modelos masivos en tareas específicas. Un ejemplo destacado es la proliferación de modelos optimizados para ejecutarse localmente en dispositivos finales (edge computing), reduciendo la latencia a milisegundos y garantizando la privacidad de los datos al no requerir conexión constante a la nube.\nPor qué es importante Este desarrollo es crucial por tres razones fundamentales:\nSostenibilidad económica y operativa: La inferencia de modelos gigantescos es financieramente insostenible para la mayoría de las empresas medianas. Los SLM democratizan el acceso a la IA generativa, permitiendo a las organizaciones desplegar soluciones personalizadas en su propia infraestructura con costes de hardware drásticamente reducidos. Privacidad y cumplimiento normativo: Al ejecutar modelos localmente en el dispositivo del usuario o en servidores locales (on-premises), las empresas del sector salud, financiero y gubernamental pueden adoptar la IA sin infringir normativas estrictas de protección de datos como el RGPD. Eficiencia energética: La huella de carbono asociada al entrenamiento e inferencia de modelos masivos es un desafío medioambiental crítico. La optimización de modelos más pequeños es un paso indispensable hacia una IA más sostenible y alineada con los objetivos ESG (ambientales, sociales y de gobernanza) de las corporaciones modernas. Ciberseguridad Vulnerabilidades en la cadena de suministro de software e infraestructura de virtualización La superficie de ataque de las organizaciones modernas continúa expandiéndose, y los actores de amenazas están dirigiendo sus esfuerzos hacia los eslabones más profundos de la infraestructura tecnológica. En las últimas horas, se ha reportado la explotación activa de una vulnerabilidad de día cero (zero-day) de alta gravedad en sistemas de virtualización ampliamente utilizados en entornos corporativos. Esta vulnerabilidad permite el escape de la máquina virtual (VM escape), lo que significa que un atacante con acceso a un entorno virtualizado puede romper el aislamiento y ejecutar código malicioso directamente en el hipervisor del servidor host.\nSimultáneamente, los ataques a la cadena de suministro de software a través del envenenamiento de repositorios públicos (como npm y PyPI) han alcanzado niveles récord de sofisticación. Los atacantes ya no solo introducen malware evidente, sino que emplean técnicas de ingeniería social y confusión de nombres (typosquatting) para introducir dependencias maliciosas que permanecen latentes durante meses antes de activarse.\nPor qué es importante La gravedad de estos incidentes radica en que comprometen la base misma de la confianza tecnológica:\nColapso del aislamiento en la nube: La seguridad de la computación en la nube se basa en la premisa de que los inquilinos (tenants) están completamente aislados entre sí. Una vulnerabilidad de escape de hipervisor amenaza la integridad de entornos multi-inquilino, permitiendo potencialmente el acceso no autorizado a datos confidenciales de otras empresas alojadas en el mismo hardware físico. La ilusión de la seguridad perimetral: Los ataques a la cadena de suministro demuestran que las defensas tradicionales en el perímetro de la red son insuficientes. Si el software que una empresa instala voluntariamente ya viene comprometido de origen, los firewalls y sistemas de detección de intrusos convencionales resultan ineficaces. Esto acelera la necesidad de implementar análisis de composición de software (SCA) en tiempo real y firmar criptográficamente cada componente del ciclo de vida del desarrollo. Computación en la Nube La soberanía de datos y la nube confidencial se convierten en imperativos globales La computación en la nube está entrando en una era de fragmentación geopolítica. Los tres grandes proveedores de nube pública (Amazon Web Services, Microsoft Azure y Google Cloud) están expandiendo aceleradamente sus regiones de \u0026ldquo;nube soberana\u0026rdquo; en Europa y Asia. Este movimiento responde a la creciente presión de los reguladores gubernamentales para garantizar que los datos de los ciudadanos no solo se almacenen localmente, sino que estén completamente protegidos de leyes extraterritoriales de acceso a la información.\nEn este contexto, la Computación Confidencial se ha consolidado como la tecnología estándar para proteger los datos en uso. Tradicionalmente, los datos se cifraban en tránsito (mientras viajan por la red) y en reposo (mientras están almacenados), pero quedaban expuestos en la memoria del sistema durante su procesamiento. Mediante el uso de entornos de ejecución seguros (TEE) basados en hardware (como AMD SEV y Intel SGX), la computación confidencial garantiza que los datos permanezcan cifrados incluso mientras son procesados por la CPU.\nPor qué es importante Este desarrollo redefine la relación entre las empresas y los proveedores de infraestructura:\nCumplimiento sin pérdida de innovación: Anteriormente, las industrias altamente reguladas se veían obligadas a mantener infraestructuras locales obsoletas y costosas por temor a las sanciones regulatorias. La nube soberana y confidencial les permite aprovechar la escalabilidad, la analítica avanzada y los servicios de IA de la nube pública sin comprometer el cumplimiento legal. Mitigación del riesgo de información privilegiada (Insider Threat): Al procesar la información dentro de enclaves seguros cifrados por hardware, ni siquiera los administradores de sistemas del propio proveedor de la nube pueden acceder a los datos del cliente. Esto elimina una de las mayores barreras de desconfianza que aún persistían en el sector financiero y de defensa para la adopción total de la nube. DevOps Consolidación de la Ingeniería de Plataformas y adopción de Kubernetes Gateway API El ecosistema de desarrollo y operaciones (DevOps) está experimentando una evolución conceptual significativa. El modelo tradicional de \u0026ldquo;tú lo construyes, tú lo ejecutas\u0026rdquo;, que a menudo sobrecargaba a los desarrolladores con la complejidad de gestionar la infraestructura, está siendo reemplazado por la Ingeniería de Plataformas. El objetivo es crear Plataformas Internas de Desarrollador (IDP) que ofrezcan portales de autoservicio, abstrayendo la complejidad subyacente de Kubernetes, las redes y las bases de datos.\nEn el plano técnico de la orquestación de contenedores, se observa una migración acelerada desde el recurso tradicional de Ingress hacia la nueva especificación Gateway API de Kubernetes. Diseñada para ser expresiva, extensible y orientada a roles, Gateway API unifica el enrutamiento de tráfico de Capa 4 y Capa 7, facilitando la gestión de arquitecturas de microservicios complejas y mallas de servicios (service meshes).\nPor qué es importante Estos avances abordan directamente la eficiencia operativa de los equipos de ingeniería:\nReducción de la carga cognitiva: Al proporcionar a los desarrolladores plantillas estandarizadas y seguras a través de una IDP, se reduce el tiempo necesario para desplegar una nueva aplicación de días a minutos. Esto permite a los ingenieros de software concentrarse en escribir código de negocio en lugar de depurar archivos YAML de configuración de infraestructura. Gobernanza y separación de responsabilidades: Gateway API resuelve un problema histórico en Kubernetes al permitir que los equipos de infraestructura de red, los administradores de clústeres y los desarrolladores de aplicaciones gestionen sus respectivas porciones de la configuración de red de forma independiente y segura, evitando conflictos de configuración que puedan provocar caídas del servicio. Código Abierto La bifurcación de proyectos clave y la búsqueda de una gobernanza neutral El ecosistema del software de código abierto (OSS) atraviesa un periodo de redefinición de sus bases económicas y de licencias. Tras las decisiones de varias empresas comerciales de cambiar las licencias de proyectos emblemáticos (como Redis, HashiCorp Terraform y Elasticsearch) de licencias de código abierto aprobadas por la OSI a licencias comerciales o de \u0026ldquo;fuente disponible\u0026rdquo; (como la Business Source License - BSL), la comunidad ha respondido con una ola de bifurcaciones (forks) respaldadas por fundaciones neutrales.\nEl caso de Valkey, la bifurcación de Redis auspiciada por la Linux Foundation y respaldada por gigantes como AWS, Google Cloud, Oracle y Ericsson, se ha convertido en el modelo a seguir. Este movimiento demuestra que la industria no está dispuesta a aceptar la monopolización de tecnologías de infraestructura crítica por parte de una sola entidad comercial, prefiriendo invertir recursos en mantener alternativas verdaderamente abiertas y gobernadas democráticamente.\nPor qué es importante Las implicaciones de esta tendencia son profundas para el futuro del desarrollo de software global:\nGarantía de continuidad del negocio: Para las empresas que construyen sus productos sobre software libre, los cambios repentinos de licencia representan un riesgo operativo y financiero inaceptable. El respaldo de la industria a proyectos bajo la gobernanza de la Linux Foundation o la CNCF proporciona estabilidad a largo plazo y evita el bloqueo de proveedores (vendor lock-in). Redefinición del modelo de negocio del software libre: Este fenómeno obliga a las empresas creadoras de software de código abierto a buscar modelos de monetización basados en el valor añadido (como servicios gestionados SaaS de alta calidad) en lugar de intentar restringir el uso del código fuente, equilibrando la sostenibilidad financiera con el espíritu de colaboración comunitaria. Lecturas Recomendadas Para profundizar en los aspectos técnicos y estratégicos abordados en este informe, se sugiere investigar los siguientes temas:\nCriptografía Post-Cuántica (PQC): Análisis de los nuevos estándares publicados por el NIST para proteger las comunicaciones cifradas actuales contra futuras amenazas de computación cuántica. WebAssembly (Wasm) en el lado del servidor: El uso de Wasm como una alternativa ligera, segura y de inicio instantáneo a los contenedores Docker tradicionales en entornos de computación en el borde. Optimización de RAG (Retrieval-Augmented Generation): Técnicas avanzadas para mejorar la precisión de los modelos de lenguaje reduciendo las alucinaciones mediante la integración eficiente de bases de datos vectoriales corporativas. Directiva NIS2 y Resiliencia Operativa: Estudio del impacto de la nueva legislación europea de ciberseguridad en las cadenas de suministro globales y las obligaciones de reporte de incidentes para directivos. FinOps en la era de la IA: Estrategias y herramientas metodológicas para medir, atribuir y optimizar los costes ocultos asociados al entrenamiento y consumo de APIs de modelos de inteligencia artificial en la nube. Conclusión El análisis de los desarrollos tecnológicos de hoy revela un patrón claro: la industria está madurando. Tras un periodo de experimentación acelerada y adopción desordenada de nuevas tecnologías, las organizaciones están priorizando la eficiencia, la seguridad y la soberanía.\nLa transición hacia modelos de IA más pequeños y eficientes demuestra que la viabilidad económica y la sostenibilidad son ahora prioritarias frente al tamaño bruto. En ciberseguridad e infraestructura, la pérdida de confianza en los perímetros tradicionales y las licencias de software restrictivas está impulsando la adopción de tecnologías de cifrado por hardware (computación confidencial) y la consolidación de proyectos de código abierto bajo gobernanza neutral. En última instancia, el éxito de las organizaciones en este nuevo entorno dependerá de su capacidad para integrar estas tecnologías no de forma aislada, sino como parte de una estrategia holística orientada a la resiliencia operativa y el cumplimiento normativo.\n","date":"14 de julio de 2026","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/2026-07-14-digital-radar/","series":[{"title":"Digital-Radar","url":"/es/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/es/tags/ai/"},{"title":"Cybersecurity","url":"/es/tags/cybersecurity/"},{"title":"Cloud","url":"/es/tags/cloud/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Open-Source","url":"/es/tags/open-source/"}],"timestamp":1784005042,"title":"Digital Radar 2026-07-14"},{"authors":[],"categories":[{"title":"Technology","url":"/es/categories/technology/"},{"title":"Digital-Radar","url":"/es/categories/digital-radar/"}],"content":" Radares digitales Resumen ejecutivo El panorama tecnológico actual se define por una transición de la implementación experimental a la optimización estructural. En inteligencia artificial, la industria se está alejando de interacciones simples y basadas en indicaciones hacia flujos de trabajo autónomos de múltiples agentes y modelos de lenguaje pequeño (SLM) altamente eficientes diseñados para la implementación perimetral. Esta evolución arquitectónica se refleja en los sectores de la nube y DevOps, donde la ingeniería personalizada de plataformas y silicio está reduciendo la carga cognitiva de los desarrolladores al tiempo que optimiza los crecientes costos de infraestructura.\nAl mismo tiempo, el panorama de la ciberseguridad enfrenta un doble desafío: prepararse para la amenaza a largo plazo de la computación cuántica mediante la adopción de estándares criptográficos recientemente finalizados, al mismo tiempo que se defiende contra campañas inmediatas de ransomware altamente específicas dirigidas a la infraestructura de virtualización. Mientras tanto, la comunidad de código abierto está atravesando un realineamiento estructural, marcado por una reacción corporativa contra los cambios de licencia y un esfuerzo concertado para llevar lenguajes seguros para la memoria al núcleo de los sistemas operativos modernos. Este informe analiza estos desarrollos fundamentales, explicando sus fundamentos técnicos y sus implicaciones comerciales más amplias.\nInteligencia artificial El cambio hacia flujos de trabajo de IA agentes El paradigma de la inteligencia artificial generativa está experimentando un cambio fundamental. Si bien la ola inicial de adopción de IA empresarial se centró en interacciones de un solo mensaje con modelos de lenguaje grande (LLM), como chatbots y resumidores de documentos básicos, la industria está avanzando rápidamente hacia flujos de trabajo \u0026ldquo;agentes\u0026rdquo;. Estos sistemas aprovechan múltiples agentes de IA especializados que colaboran, utilizan herramientas externas, ejecutan cadenas de razonamiento de varios pasos y se autocorrigen sin intervención humana continua.\nA diferencia de los modelos estáticos de aviso y respuesta, los marcos agentes (como LangGraph, CrewAI y Microsoft AutoGen) permiten que los modelos divida objetivos complejos en tareas discretas. Por ejemplo, un sistema de agencia encargado de la investigación de mercado puede escribir de forma autónoma una consulta de búsqueda, analizar los documentos recuperados, identificar lagunas en la información, ejecutar consultas de seguimiento, sintetizar los hallazgos en un informe y formatear el resultado de acuerdo con una plantilla específica.\nPor qué es importante Agentic AI representa la transición de la IA como asistente a la IA como colaborador autónomo. Para las empresas, esto aumenta drásticamente el retorno de la inversión en IA. En lugar de simplemente redactar texto, los sistemas agentes pueden automatizar procesos comerciales complejos de extremo a extremo, como la depuración automatizada de software, el manejo de escalamiento de atención al cliente y la auditoría financiera. Sin embargo, este cambio introduce nuevos desafíos en materia de observabilidad, previsibilidad y seguridad, ya que los agentes autónomos pueden exhibir comportamientos emergentes o entrar en bucles infinitos si no están adecuadamente restringidos por estrictas barreras de seguridad.\nEl auge de los modelos de lenguaje pequeño (SLM) de alto rendimiento Si bien los modelos de vanguardia como GPT-4 y Claude 3.5 Sonnet continúan superando los límites de la capacidad, se está produciendo una revolución paralela en el extremo opuesto del espectro. Los modelos de lenguaje pequeño (SLM) altamente optimizados, que normalmente oscilan entre mil millones y 9 mil millones de parámetros, están alcanzando niveles de rendimiento que rivalizan con modelos mucho más grandes de hace apenas un año. Lanzamientos recientes, como Phi-3 de Microsoft, NeMo de Mistral y Llama 3 8B de Meta, demuestran que los refinamientos arquitectónicos y los datos de entrenamiento de alta calidad son más críticos que el simple recuento de parámetros.\nEstos modelos están diseñados para ejecutarse de manera eficiente en hardware de consumo, dispositivos móviles y servidores perimetrales. Al utilizar técnicas como la cuantificación (que reduce la precisión de los pesos de los modelos) y la decodificación especulativa, los desarrolladores pueden implementar estos modelos con una huella de memoria mínima y una latencia ultrabaja.\nPor qué es importante La proliferación de SLM capaces democratiza la IA al reducir las barreras de entrada financieras y de infraestructura. Las empresas pueden ejecutar estos modelos localmente, eliminando los altos costos de API y la latencia asociados con los LLM alojados en la nube. Además, la implementación local aborda cuestiones críticas de privacidad y cumplimiento de los datos, ya que los datos confidenciales o de propiedad del cliente nunca abandonan la red local. Esto hace que los SLM sean muy atractivos para industrias como la salud, las finanzas y la defensa, donde la soberanía de los datos es primordial.\nCiberseguridad NIST finaliza los estándares de criptografía poscuántica El Instituto Nacional de Estándares y Tecnología (NIST) ha finalizado oficialmente su primer conjunto de algoritmos de cifrado diseñados para resistir ataques de futuras computadoras cuánticas. Los estándares publicados incluyen ML-KEM (anteriormente Kyber) para cifrado general y ML-DSA (anteriormente Dilithium) y FN-DSA (anteriormente Falcon) para firmas digitales.\nLas computadoras cuánticas aprovechan los principios de superposición y entrelazamiento para resolver problemas matemáticos complejos, como la factorización de números enteros y logaritmos discretos, exponencialmente más rápido que las supercomputadoras clásicas. Esta capacidad amenaza con dejar completamente obsoletos los sistemas criptográficos ampliamente utilizados, incluidos RSA y la criptografía de curva elíptica (ECC).\n1+-----------------------------------------------------------------+ 2| NIST Post-Quantum Cryptography Standards | 3+---------------------------------+-------------------------------+ 4| Algorithm Name | Primary Use Case | 5+---------------------------------+-------------------------------+ 6| ML-KEM (formerly Kyber) | General Encryption / Key Exch.| 7| ML-DSA (formerly Dilithium) | Digital Signatures | 8| FN-DSA (formerly Falcon) | Digital Signatures (Compact) | 9+---------------------------------+-------------------------------+ Por qué es importante Si bien aún faltan años para una computadora cuántica criptográficamente relevante (CRQC), la amenaza es inmediata debido a las estrategias de \u0026ldquo;cosechar ahora, descifrar después\u0026rdquo;. Hoy en día, los adversarios interceptan y almacenan activamente datos cifrados de alto valor, con la intención de descifrarlos una vez que la tecnología cuántica madure. Las organizaciones deben comenzar de inmediato a auditar sus activos criptográficos y planificar su migración a la criptografía poscuántica (PQC). La transición de los sistemas heredados a estos nuevos algoritmos será un esfuerzo de varios años que requerirá cambios significativos en las arquitecturas de software, los protocolos de red y los módulos de seguridad de hardware (HSM).\nCampañas de ransomware dirigidas al hipervisor Los ciberdelincuentes están eludiendo cada vez más las defensas de los terminales individuales para atacar directamente la infraestructura de virtualización. Los grupos de ransomware, como los que implementan las variantes LockBit, Akira y BlackBasta, se dirigen específicamente a VMware ESXi y otros hipervisores basados ​​en Linux.\nAl explotar las vulnerabilidades en las interfaces de administración del hipervisor o utilizar credenciales administrativas comprometidas, los atacantes obtienen acceso a los servidores básicos subyacentes. Una vez dentro, implementan cargas útiles de ransomware especializadas diseñadas para cifrar los archivos de disco de la máquina virtual (VMDK) directamente, desactivando efectivamente docenas o cientos de servidores virtualizados en una sola acción.\nPor qué es importante Apuntar al hipervisor maximiza el apalancamiento de los operadores de ransomware. En lugar de tomarse el tiempo para comprometer y cifrar sistemas operativos individuales uno por uno, los atacantes pueden paralizar toda una infraestructura empresarial en minutos. Este enfoque también evita los agentes tradicionales de detección y respuesta de endpoints (EDR), que normalmente se ejecutan dentro de los sistemas operativos invitados en lugar de en el propio hipervisor. Las organizaciones deben proteger sus planos de gestión de virtualización, aplicar una segmentación estricta de la red, implementar autenticación multifactor (MFA) para el acceso al hipervisor y garantizar que las copias de seguridad se almacenen en entornos inmutables y aislados.\nComputación en la nube La carrera armamentista del silicio personalizado Los principales proveedores de nube a hiperescala (Amazon Web Services (AWS), Microsoft Azure y Google Cloud Platform (GCP)) están ampliando rápidamente sus carteras de silicio personalizado. AWS ha lanzado sus procesadores Graviton4, Google está ampliando la disponibilidad de sus procesadores Axion basados ​​en Arm y Microsoft está implementando sus CPU Cobalt 100.\nHistóricamente, los proveedores de la nube dependían casi exclusivamente de procesadores x86 de Intel y AMD. Al diseñar sus propios chips personalizados basados ​​en la arquitectura Arm, los hiperescaladores pueden optimizar el silicio para cargas de trabajo específicas en la nube, como microservicios, bases de datos e inferencia de aprendizaje automático.\n1+-----------------------------------------------------------------+ 2| Hyperscaler Custom Arm-Based Silicon | 3+-------------------+---------------------------------------------+ 4| Cloud Provider | Custom Silicon Family | 5+-------------------+---------------------------------------------+ 6| AWS | Graviton4 | 7| Google Cloud | Axion | 8| Microsoft Azure | Cobalt 100 | 9+-------------------+---------------------------------------------+ Por qué es importante El silicio personalizado permite a los proveedores de la nube romper su dependencia de los fabricantes de chips tradicionales, dándoles un mayor control sobre sus cadenas de suministro y márgenes de ganancias. Para los clientes, estos chips personalizados ofrecen relaciones precio-rendimiento significativamente mejores, y a menudo ofrecen entre un 30 % y un 40 % mejor rendimiento por vatio en comparación con las instancias x86 equivalentes. Además, la eficiencia energética superior de los procesadores basados ​​en Arm es fundamental para los proveedores de la nube que se esfuerzan por cumplir ambiciosos objetivos de sostenibilidad y reducción de carbono en medio del auge de la IA, que consume mucha energía.\nLa infraestructura de nube soberana gana impulso Impulsada por tensiones geopolíticas, estrictas regulaciones de protección de datos (como GDPR y Schrems II) y preocupaciones de seguridad nacional, la demanda de infraestructura de nube soberana está aumentando. Los gobiernos y las industrias altamente reguladas rechazan cada vez más las implementaciones de nube pública estándar en favor de soluciones de nube localizadas y soberanas.\nEn respuesta, los hiperescaladores se están asociando con empresas de telecomunicaciones locales y proveedores de TI nacionales para construir regiones de nube aisladas. Estas \u0026ldquo;nubes soberanas\u0026rdquo; garantizan que todos los datos, metadatos y sistemas operativos permanezcan dentro de un límite nacional específico, administrados exclusivamente por personal local que tenga las autorizaciones de seguridad adecuadas.\nPor qué es importante Las nubes soberanas resuelven la tensión entre los beneficios operativos de la computación en nube pública y los requisitos legales de la soberanía nacional de datos. Impiden que los gobiernos extranjeros accedan a datos confidenciales a través de mecanismos legales extraterritoriales (como la Ley CLOUD de EE. UU.). A medida que las leyes de soberanía digital se endurecen a nivel mundial, las empresas que operan en múltiples jurisdicciones deben adoptar arquitecturas de nube multirregionales que cumplan con las normas soberanas para evitar sanciones legales severas e interrupciones operativas.\nDevOps Ingeniería de plataformas y el auge de las plataformas de desarrollo interno (IDP) El modelo tradicional de DevOps de \u0026ldquo;tú lo construyes, tú lo ejecutas\u0026rdquo; está evolucionando. Si bien su objetivo es empoderar a los desarrolladores, a menudo ha resultado en una sobrecarga cognitiva, lo que requiere que los ingenieros de software dominen conceptos complejos de infraestructura, configuraciones de Kubernetes y canalizaciones de CI/CD junto con sus responsabilidades principales de codificación. Para abordar esto, las organizaciones están adoptando la ingeniería de plataformas.\nLos equipos de ingeniería de plataformas crean y mantienen plataformas de desarrollo internas (IDP). Estas plataformas brindan capacidades de autoservicio, lo que permite a los desarrolladores aprovisionar bases de datos, configurar entornos e implementar aplicaciones a través de plantillas estandarizadas de ruta dorada. El objetivo es abstraer la complejidad de la infraestructura subyacente y al mismo tiempo aplicar las mejores prácticas operativas, de seguridad y de cumplimiento de forma predeterminada.\n1+-----------------------------------------------------------------+ 2| Traditional DevOps vs. Platform Engineering | 3+-----------------------------------------------------------------+ 4| Traditional DevOps: | 5| [Developer] ---\u0026gt; [Kubernetes, Terraform, CI/CD, Security] | 6| (High cognitive overload, fragmented workflows) | 7| | 8| Platform Engineering: | 9| [Developer] ---\u0026gt; [Internal Developer Platform (IDP)] | 10| |---\u0026gt; [Standardized Infrastructure] | 11| |---\u0026gt; [Automated Compliance] | 12| (Reduced friction, consistent guardrails) | 13+-----------------------------------------------------------------+ Por qué es importante Al reducir la fricción de los desarrolladores, Platform Engineering acelera directamente la velocidad de entrega de software y mejora la experiencia de los desarrolladores (DevEx). Permite a los desarrolladores centrarse en escribir la lógica empresarial en lugar de luchar con las configuraciones de la infraestructura. Para las empresas, los IDP garantizan que las barreras de seguridad y las medidas de control de costos se incluyan directamente en el ciclo de vida del desarrollo, lo que reduce el riesgo de recursos en la nube mal configurados y TI en la sombra.\nEstandarización de la observabilidad con OpenTelemetry para LLM A medida que las aplicaciones de IA generativa pasan a producción, las herramientas tradicionales de monitoreo del rendimiento de aplicaciones (APM) están resultando insuficientes. Para abordar esta brecha, el proyecto OpenTelemetry (OTel), un estándar en incubación de CNCF, está ampliando su especificación para incluir convenciones semánticas para modelos de lenguaje grandes y flujos de trabajo de IA generativos.\nEsta expansión estandariza cómo se recopilan los datos de telemetría (métricas, registros y seguimientos) de las aplicaciones de IA. Permite a los desarrolladores realizar un seguimiento de métricas específicas de LLM, como el consumo de tokens, la latencia de respuesta y aviso, la precisión del modelo y la eficiencia del almacenamiento en caché semántico, junto con métricas tradicionales del sistema como la utilización de CPU y memoria.\nPor qué es importante Sin una observabilidad estandarizada, depurar aplicaciones complejas de IA de varios pasos es increíblemente difícil. Cuando un sistema agente falla o experimenta una alta latencia, los desarrolladores deben rastrear la solicitud a través de múltiples microservicios, bases de datos vectoriales y API LLM externas. Al integrar la observabilidad de LLM en el estándar OpenTelemetry de código abierto, las organizaciones pueden evitar la dependencia de los proveedores con herramientas de monitoreo patentadas y obtener visibilidad unificada de extremo a extremo de sus modernas pilas de aplicaciones impulsadas por IA.\nCódigo abierto La iniciativa Valkey y la reacción violenta de las licencias de código abierto El ecosistema de código abierto está experimentando un realineamiento significativo luego de cambios en las licencias por parte de entidades comerciales prominentes. Un buen ejemplo es Redis, que recientemente pasó de la licencia BSD permisiva a licencias de propiedad dual (RSALv2 y SSPL). En respuesta, la Fundación Linux, respaldada por gigantes de la industria como AWS, Google, Oracle y Ericsson, lanzó Valkey, una bifurcación de código abierto y totalmente compatible de la base de datos en memoria de Redis.\nEste incidente es parte de una tendencia más amplia en la que las empresas basadas en software de código abierto (como HashiCorp con Terraform y Elastic con Elasticsearch) cambian a licencias restrictivas para proteger sus modelos de negocio de los proveedores de nube que empaquetan y revenden su software como servicios administrados.\nPor qué es importante La rápida movilización de la industria en torno a Valkey demuestra la resiliencia de la comunidad de código abierto cuando cuenta con el respaldo de los principales proveedores de la nube. Indica a otras empresas comerciales de código abierto que el cambio a licencias propietarias puede dar lugar a bifurcaciones inmediatas y bien financiadas que diluyan su participación de mercado. Para los consumidores empresariales, esta tendencia resalta la importancia de las auditorías de licencias y la necesidad de establecer planes de contingencia para dependencias críticas de código abierto.\nIntegración continua de Rust en el kernel de Linux La integración del lenguaje de programación Rust en el kernel de Linux continúa progresando, lo que marca un cambio histórico que se aleja de la dependencia exclusiva de C. Liderados por el proyecto Rust para Linux, los desarrolladores están introduciendo constantemente soporte para Rust para escribir controladores de dispositivos, sistemas de archivos y protocolos de red.\nEl principal impulsor de esta transición son las estrictas garantías de tiempo de compilación de Rust con respecto a la seguridad de la memoria. A diferencia de C, que requiere que los desarrolladores administren manualmente la memoria, lo que a menudo genera vulnerabilidades como desbordamientos de búfer, errores de uso después de la liberación y carreras de datos, Rust evita estos errores en la etapa de compilación sin sacrificar el rendimiento del tiempo de ejecución.\nPor qué es importante Las vulnerabilidades de seguridad de la memoria representan aproximadamente el 70% de todos los errores de seguridad graves en grandes sistemas de software, incluido el kernel de Linux. Al reescribir subsistemas y controladores críticos del kernel en Rust, la comunidad de código abierto está eliminando sistemáticamente clases enteras de vulnerabilidades de seguridad a nivel del sistema operativo. En última instancia, esta transición dará como resultado una infraestructura más segura, estable y resistente que impulse todo, desde servidores en la nube hasta dispositivos IoT integrados.\nLectura recomendada La transición a la criptografía poscuántica: Una guía detallada del NIST sobre la implementación de los estándares ML-KEM y ML-DSA recientemente finalizados dentro de arquitecturas empresariales heredadas. La hoja de ruta del proyecto Valkey: Una descripción general de los planes de la Fundación Linux para la base de datos Valkey, centrándose en mejoras de rendimiento e integraciones nativas de la nube. Modelo de madurez de ingeniería de plataformas: Un marco de la Cloud Native Computing Foundation (CNCF) para evaluar y escalar plataformas de desarrolladores internos. El auge de los marcos de IA agentes: Una inmersión técnica profunda en la arquitectura de los sistemas multiagente y sus implicaciones para la automatización empresarial. Seguridad del plano del hipervisor: Una guía de seguridad completa de CISA sobre cómo defender VMware ESXi y los entornos virtualizados contra las tácticas modernas de ransomware. Conclusión Los desarrollos tecnológicos actuales resaltan un tema claro: la industria está superando los ciclos iniciales de exageración de las nuevas tecnologías y centrándose en el arduo trabajo de estabilización, optimización y seguridad. En la IA, esto es evidente en el cambio hacia flujos de trabajo autónomos de múltiples agentes y modelos de borde altamente eficientes que brindan valor comercial práctico. En infraestructura, el aumento del silicio en la nube personalizado y la ingeniería de plataformas demuestra un compromiso para reducir los costos y la fricción de los desarrolladores. Mientras tanto, los sectores de ciberseguridad y de código abierto están abordando proactivamente los riesgos sistémicos, ya sea preparándose para el futuro cuántico, asegurando las capas de virtualización o defendiendo la integridad de las licencias y las bases de código de código abierto. Las organizaciones que naveguen con éxito estos cambios estructurales estarán bien posicionadas para construir arquitecturas digitales resilientes, escalables y seguras para el futuro.\n","date":"13 de julio de 2026","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/2026-07-13-digital-radar/","series":[{"title":"Digital-Radar","url":"/es/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/es/tags/ai/"},{"title":"Cybersecurity","url":"/es/tags/cybersecurity/"},{"title":"Cloud","url":"/es/tags/cloud/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Open-Source","url":"/es/tags/open-source/"}],"timestamp":1783921532,"title":"Radares Digitales 2026-07-13"},{"authors":[],"categories":[{"title":"Technology","url":"/es/categories/technology/"},{"title":"Digital-Radar","url":"/es/categories/digital-radar/"}],"content":" Radares digitales Resumen ejecutivo El panorama tecnológico actual se define por una transición crítica de la implementación experimental a la madurez operativa. En inteligencia artificial, la industria se está alejando de modelos monolíticos de fuerza bruta hacia flujos de trabajo agentes altamente optimizados y modelos de lenguaje pequeño (SLM) localizados. Esta transición promete democratizar las capacidades de la IA y al mismo tiempo abordar preocupaciones apremiantes sobre los costos operativos y la privacidad de los datos.\nAl mismo tiempo, el ámbito de la ciberseguridad está lidiando con vulnerabilidades sistémicas dentro de la cadena de suministro de software, lo que obliga a las organizaciones a reevaluar los límites de confianza y acelerar la adopción de lenguajes de programación seguros para la memoria.\nEn infraestructura, Cloud Computing y DevOps están convergiendo en dos frentes: el surgimiento de arquitecturas de nube soberanas para satisfacer regulaciones geopolíticas estrictas y la institucionalización de la ingeniería de plataformas para gestionar la carga cognitiva del desarrollo nativo de la nube.\nFinalmente, el ecosistema de código abierto está atravesando una profunda crisis de identidad a medida que los proyectos fundamentales pasan a modelos de licencia restrictivos, lo que desencadena bifurcaciones lideradas por la comunidad que redefinen los estándares de la industria. Este informe analiza estos desarrollos fundamentales y ofrece profundidad técnica y contexto estratégico para los líderes tecnológicos.\nInteligencia artificial El cambio hacia flujos de trabajo agentes y modelos de lenguaje pequeño El paradigma de la inteligencia artificial generativa está experimentando un cambio estructural fundamental. Durante los últimos dos años, el enfoque de la industria ha estado dominado por la búsqueda de mayores recuentos de parámetros en los modelos de lenguajes grandes (LLM) de frontera. Sin embargo, la realidad económica de ejecutar modelos masivos, junto con las limitaciones de latencia de las aplicaciones en tiempo real, ha catalizado un doble movimiento: el surgimiento de la \u0026ldquo;IA agente\u0026rdquo; y la rápida optimización de los modelos de lenguaje pequeño (SLM).\nLa IA agente representa una transición de interacciones pasivas de pronta y respuesta a sistemas autónomos y orientados a objetivos. En lugar de depender de un modelo único y masivo para generar una solución completa, las arquitecturas agentes emplean redes de modelos más pequeños y especializados que colaboran para resolver tareas complejas. Estos agentes utilizan razonamiento iterativo, ejecución de herramientas (como consultar bases de datos o ejecutar código) y bucles de autocorrección. Marcos como LangGraph, AutoGen y CrewAI están pasando de herramientas de desarrollo experimentales a capas de orquestación de nivel empresarial.\nAl mismo tiempo, los SLM (normalmente definidos como modelos con menos de 10 mil millones de parámetros, como el Phi-3 de Microsoft, el Llama 3.1 8B de Meta y las últimas ofertas de Mistral) están demostrando capacidades que rivalizan con los modelos de código cerrado de generaciones anteriores. A través de técnicas de cuantificación avanzadas, conjuntos de datos de entrenamiento destilados y optimizaciones específicas de hardware, estos modelos ahora pueden ejecutarse de manera eficiente en hardware de consumo, dispositivos perimetrales y servidores empresariales localizados.\n1[User Query] ──\u0026gt; [Orchestrator Agent] ──┬──\u0026gt; [Retrieval Agent] ──\u0026gt; [Vector DB] 2 ├──\u0026gt; [Execution Agent] ──\u0026gt; [Secure Sandbox] 3 └──\u0026gt; [Critic Agent] ────\u0026gt; [Output Validation] Por qué es importante Este cambio es fundamental por tres razones principales: costo, privacidad y confiabilidad.\nEn primer lugar, la sostenibilidad financiera de las iniciativas empresariales de IA depende de la reducción de los costos de inferencia. Ejecutar SLM especializados para tareas específicas es mucho más económico que enrutar cada consulta a una API patentada con miles de millones de parámetros.\nEn segundo lugar, la privacidad de los datos y el cumplimiento normativo (como GDPR e HIPAA) hacen que la transmisión de datos propietarios a modelos externos alojados en la nube sea una responsabilidad legal importante. Los SLM localizados permiten a las empresas mantener los datos confidenciales completamente dentro de sus perímetros seguros.\nFinalmente, los flujos de trabajo agentes abordan la falta de confiabilidad inherente de los LLM. Al dividir tareas complejas en pasos discretos y verificables ejecutados por agentes especializados, las organizaciones pueden implementar barreras de seguridad rigurosas, reduciendo drásticamente las alucinaciones y mejorando el resultado determinista requerido para los entornos de producción.\nCiberseguridad Vulnerabilidades en la cadena de suministro de software y el impulso para la seguridad de la memoria El panorama de la ciberseguridad está cada vez más definido por amenazas sistémicas dirigidas a la cadena de suministro de software. En lugar de intentar violar directamente los perímetros empresariales bien defendidos, los actores de amenazas sofisticados están centrando sus esfuerzos en las fases iniciales, comprometiendo las bibliotecas de código abierto, las dependencias de terceros y los dispositivos perimetrales en los que las organizaciones confían implícitamente.\nLas implicaciones a largo plazo del intento de puerta trasera de XZ Utils continúan resonando en la comunidad de seguridad. Este incidente puso de relieve una vulnerabilidad crítica en el ecosistema de código abierto: la dependencia de la infraestructura fundamental de Internet en proyectos mantenidos por voluntarios y con financiación insuficiente. Los atacantes están aprovechando la ingeniería social y campañas de preparación de varios años para obtener el estatus de mantenedor de repositorios críticos, con la intención de inyectar puertas traseras sofisticadas y ofuscadas.\nParalelamente, los dispositivos de borde empresarial, como las puertas de enlace de redes privadas virtuales (VPN) y los firewalls de proveedores como Ivanti, Palo Alto Networks y Fortinet, se han convertido en los objetivos principales de la explotación de día cero. Estos dispositivos, que a menudo ejecutan bases de código heredadas sin mitigaciones modernas de exploits, sirven como puntos de acceso inicial tanto para grupos de espionaje patrocinados por el estado como para afiliados de ransomware.\nEn respuesta a estas vulnerabilidades persistentes, la Agencia de Seguridad de Infraestructura y Ciberseguridad (CISA), junto con socios internacionales, ha intensificado su defensa de los principios de \u0026ldquo;Secure by Design\u0026rdquo;. Un pilar central de esta iniciativa es la transición de lenguajes de programación que no son seguros para la memoria, como C y C++, hacia alternativas seguras para la memoria, principalmente Rust and Go.\nPor qué es importante La centralización de la distribución de software significa que un solo compromiso ascendente puede tener efectos catastróficos en cascada en miles de organizaciones descendentes. Las medidas de seguridad reactiva tradicionales, como los antivirus basados ​​en firmas y los cortafuegos perimetrales, son ineficaces contra el software comprometido que posee firmas criptográficas legítimas y privilegios administrativos.\nLas organizaciones deben pasar de una postura reactiva a una arquitectura proactiva y de confianza cero. Esto requiere la implementación de una ingesta y un análisis continuos de la lista de materiales de software (SBOM) para obtener visibilidad de las dependencias transitivas. Además, el impulso de CISA por la seguridad de la memoria no es meramente académico; Las vulnerabilidades de corrupción de memoria representan aproximadamente el 70% de todos los fallos de seguridad graves. Al realizar la transición de la infraestructura crítica y los componentes centrales del software a lenguajes seguros para la memoria, la industria puede eliminar sistemáticamente clases enteras de vulnerabilidades, alterando fundamentalmente la economía de la ciberdefensa.\nComputación en la nube Las nubes soberanas y el silicio personalizado redefinen la infraestructura El sector de la computación en la nube está experimentando una doble transformación impulsada por las presiones geopolíticas y los límites físicos del escalamiento de los semiconductores. A medida que las leyes de soberanía de datos se endurecen a nivel mundial y las demandas computacionales de la inteligencia artificial aumentan, los hiperescaladores de la nube se ven obligados a innovar más allá del hardware tradicional y los modelos de centros de datos centralizados.\nLas iniciativas de nube soberana han pasado de ofertas de cumplimiento de nicho a requisitos arquitectónicos convencionales. Impulsados ​​por los estrictos marcos de protección de datos de la Unión Europea y movimientos legislativos similares en los países de Asia y el Pacífico, AWS, Microsoft Azure y Google Cloud Platform (GCP) están estableciendo zonas de nube física y lógicamente aisladas. Estas \u0026ldquo;regiones soberanas\u0026rdquo; son operadas enteramente por ciudadanos locales, utilizan cadenas de suministro localizadas y garantizan que los datos, metadatos y sistemas de identidad permanezcan estrictamente dentro de las fronteras nacionales, inmunes a la vigilancia extranjera o al alcance legal (como la Ley CLOUD de EE. UU.).\nAl mismo tiempo, las realidades económicas y térmicas de ejecutar cargas de trabajo masivas han acelerado la adopción del silicio personalizado. Los hiperescaladores están evitando cada vez más a los fabricantes de chips tradicionales para diseñar sus propios circuitos integrados de aplicaciones específicas (ASIC) y CPU basadas en ARM. Los ejemplos incluyen Graviton4 y Trainium2 de AWS, Axion CPU y TPU v5p de Google, y Cobalt 100 y Maia 100 de Microsoft.\nProveedor CPU personalizada Entrenamiento/Inferencia de IA ASIC Propuesta de valor principal AWS Gravitón4 Trainium2 / Inferencia2 Alto precio-rendimiento, profunda integración del ecosistema Google Nube Axión (BRAZO) TPU v5p Optimizado para entrenamiento de IA y Kubernetes a gran escala MicrosoftAzure Cobalto 100 Maia 100 Diseñado para cargas de trabajo de Azure y servicios OpenAI Por qué es importante Para los arquitectos empresariales, el auge de las nubes soberanas significa que las estrategias de nubes múltiples e híbridas ahora deben incorporar límites geopolíticos. El cumplimiento ya no se trata sólo de claves de cifrado; se trata de geografía física, jurisdicción operativa y estatus legal del operador de la nube. Si no se alinea la arquitectura de la nube con estas realidades, se corre el riesgo de sufrir graves sanciones regulatorias e interrupciones operativas.\nEn el frente del hardware, la adopción de silicio personalizado es fundamental para gestionar el creciente costo total de propiedad (TCO) de la infraestructura de la nube. Las CPU personalizadas basadas en ARM ofrecen una relación precio-rendimiento hasta un 50 % mejor y un consumo de energía significativamente menor en comparación con las arquitecturas x86 tradicionales. Para las organizaciones que ejecutan microservicios a gran escala o entrenan modelos propietarios de aprendizaje automático, migrar a instancias de silicio personalizadas es la palanca más efectiva para optimizar el gasto en la nube y cumplir con los mandatos de sostenibilidad corporativa.\nDevOps Ingeniería de plataforma y estandarización de OpenTelemetry El movimiento DevOps está experimentando una evolución estructural a medida que las organizaciones buscan mitigar la complejidad de los entornos modernos nativos de la nube. El ideal histórico de \u0026ldquo;usted lo construye, usted lo ejecuta\u0026rdquo; se ha convertido, en muchos casos, en agotamiento de los desarrolladores y fragmentación operativa. Para contrarrestar esto, la industria se está consolidando rápidamente en torno a la ingeniería de plataformas y la estandarización de OpenTelemetry.\nLa ingeniería de plataformas se centra en el diseño y la entrega de plataformas de desarrollo interno (IDP). En lugar de exigir que cada ingeniero de software domine los manifiestos de Kubernetes, las configuraciones de Terraform y las complejas canalizaciones de CI/CD, los equipos de ingeniería de plataformas construyen \u0026ldquo;caminos dorados\u0026rdquo;: API y portales de autoservicio seleccionados que abstraen la complejidad de la infraestructura. Herramientas como Backstage (originalmente de código abierto de Spotify) se han convertido en el estándar de la industria para crear estos portales para desarrolladores, lo que permite a los ingenieros proporcionar entornos seguros y compatibles con un solo clic.\n1[Developer] ──\u0026gt; [Internal Developer Platform (e.g., Backstage)] 2 │ 3 ├──\u0026gt; [Golden Path: Provision Microservice] 4 │ │ 5 │ ├──\u0026gt; Kubernetes Namespace 6 │ ├──\u0026gt; CI/CD Pipeline (GitHub Actions) 7 │ └──\u0026gt; IAM Roles \u0026amp; Secrets (Vault) 8 │ 9 └──\u0026gt; [Golden Path: Provision Database] Paralelamente, el desafío de monitorear estas arquitecturas de microservicios efímeras y altamente distribuidas ha llevado a la adopción casi universal de OpenTelemetry (OTel) como estándar para la observabilidad nativa de la nube. OpenTelemetry, un proyecto de Cloud Native Computing Foundation (CNCF), proporciona una especificación y herramientas neutrales para el proveedor para recopilar métricas, registros y seguimientos. La industria se está alejando de los agentes de monitoreo propietarios, que bloquean a las organizaciones en plataformas SaaS específicas, hacia arquitecturas nativas de OTel.\nPor qué es importante La ingeniería de plataformas aborda directamente la sobrecarga cognitiva que afecta a los equipos de desarrollo de software modernos. Al centralizar la gestión de la infraestructura y las barreras de seguridad dentro de un IDP, las organizaciones pueden acelerar drásticamente la velocidad de los desarrolladores y al mismo tiempo garantizar controles consistentes de cumplimiento, seguridad y costos. Transforma DevOps de un conjunto de prácticas descentralizadas, a menudo caóticas, a un producto interno estructurado y escalable.\nLa estandarización de OpenTelemetry es igualmente transformadora. Desacopla la capa de recopilación de datos de telemetría de la capa de análisis. Esto evita la dependencia del proveedor, lo que permite a las organizaciones enrutar sus datos de observabilidad a múltiples backends (como Datadog, Dynatrace, Honeycomb o instancias autohospedadas de Prometheus/Grafana) sin instrumentar sus bases de código varias veces. En una era en la que los costos de observabilidad y salida de datos se están disparando, OTel proporciona la flexibilidad arquitectónica necesaria para optimizar las estrategias de monitoreo.\nCódigo abierto El cisma de las licencias y el auge de las bifurcaciones comunitarias El ecosistema del software de código abierto (OSS) está experimentando una profunda crisis filosófica y económica. Un número creciente de empresas de código abierto respaldadas por capital de riesgo están abandonando las licencias permisivas de código abierto en favor de licencias restrictivas de \u0026ldquo;fuente disponible\u0026rdquo; o orientadas a los negocios. Esta tendencia ha fracturado comunidades de larga data y ha obligado a reevaluar la relación entre las entidades comerciales y los contribuyentes de código abierto.\nEl ejemplo reciente más destacado es Redis, que pasó de la licencia BSD permisiva a un esquema de licencia dual bajo la Licencia disponible de origen de Redis (RSALv2) y la Licencia pública del lado del servidor (SSPLv1). Esto sigue movimientos similares de HashiCorp (Terraform en transición a la licencia de fuente comercial), Elastic y MongoDB en años anteriores. Estas empresas argumentan que los hiperescaladores de la nube explotan su código de fuente abierta para ofrecer servicios gestionados sin contribuir a los proyectos iniciales, lo que hace que el modelo tradicional de fuente abierta sea comercialmente inviable. La respuesta de la comunidad y la industria a estos cambios en las licencias ha sido rápida y decisiva. A raíz del anuncio de Redis, la Fundación Linux, con el respaldo de importantes empresas de tecnología, incluidas AWS, Google y Oracle, lanzó Valkey, una bifurcación de Redis de alto rendimiento y totalmente de código abierto basada en la última versión con licencia BSD. De manera similar, la transición de Terraform por parte de HashiCorp condujo a la creación de OpenTofu, una exitosa bifurcación impulsada por la comunidad bajo los auspicios de la Fundación Linux.\nPor qué es importante Este cisma en materia de licencias introduce importantes riesgos legales y operativos para las empresas. El software que alguna vez se podía utilizar libremente bajo licencias permisivas ahora puede tener restricciones que prohíben su uso en entornos competitivos o requieren acuerdos de licencia comerciales complejos y costosos.\nLas organizaciones deben implementar estrictas políticas de gobernanza de código abierto para auditar continuamente sus dependencias de software. La rápida aparición y el respaldo de la industria de bifurcaciones como Valkey y OpenTofu demuestran que la industria tecnológica está dispuesta a movilizar recursos masivos para mantener alternativas abiertas y neutrales respecto de los proveedores a los componentes críticos de la infraestructura. Para los líderes tecnológicos, la lección es clara: la dependencia de proyectos de código abierto de un solo proveedor conlleva un riesgo inherente, y la participación activa en fundaciones neutrales (como la CNCF o la Fundación Linux) es esencial para la estabilidad arquitectónica a largo plazo.\nLectura recomendada La pragmática de la IA agente: Una exploración en profundidad de los marcos de orquestación de múltiples agentes, centrándose en la gestión del estado, la integración de herramientas y las estrategias de optimización de costos en entornos de producción. Transición a sistemas con memoria segura: Una guía práctica para líderes de ingeniería sobre cómo migrar bases de código C/C++ heredadas a Rust, que detalla patrones de interoperabilidad y beneficios de seguridad impuestos por el compilador. Arquitectura para la soberanía de datos: Un análisis integral de los requisitos técnicos, las estrategias de administración de claves de cifrado y los marcos legales necesarios para implementar arquitecturas de nube multirregionales compatibles. Implementación de plataformas de desarrollo internas (IDP): Un plan paso a paso para crear portales de desarrolladores utilizando Backstage, centrándose en reducir la carga cognitiva y establecer \u0026ldquo;caminos dorados\u0026rdquo; seguros. La economía de las licencias de código abierto: Una mirada analítica a las presiones comerciales que impulsan el cambio hacia licencias de código abierto y la viabilidad a largo plazo de bifurcaciones impulsadas por la comunidad como Valkey y OpenTofu. Conclusión El panorama tecnológico actual exige un equilibrio sofisticado entre innovación rápida y gestión de riesgos rigurosa. La transición a la IA agente y a los modelos de lenguaje pequeño ofrece un camino hacia una inteligencia artificial sostenible, privada y altamente funcional. Sin embargo, estos avances deben estar respaldados por prácticas de seguridad sólidas que aborden las realidades de una cadena de suministro de software comprometida. En el ámbito de la infraestructura, el aumento de las nubes soberanas y el silicio personalizado resalta la necesidad de alinear la arquitectura técnica con las realidades geopolíticas y las eficiencias del hardware. Mientras tanto, Platform Engineering y OpenTelemetry proporcionan los marcos operativos necesarios para gestionar esta creciente complejidad sin agotar a los equipos de ingeniería.\nFinalmente, las batallas por las licencias en la comunidad de código abierto sirven como un claro recordatorio de que el software fundamental de la web moderna está sujeto a cambios económicos y legales, lo que requiere una gobernanza vigilante y una adaptabilidad estratégica por parte de los líderes tecnológicos de todo el mundo.\n","date":"12 de julio de 2026","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/2026-07-12-digital-radar/","series":[{"title":"Digital-Radar","url":"/es/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/es/tags/ai/"},{"title":"Cybersecurity","url":"/es/tags/cybersecurity/"},{"title":"Cloud","url":"/es/tags/cloud/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Open-Source","url":"/es/tags/open-source/"}],"timestamp":1783843594,"title":"Radares Digitales 2026-07-12"},{"authors":[],"categories":[{"title":"Devops","url":"/es/categories/devops/"},{"title":"Azure","url":"/es/categories/azure/"}],"content":"In part 1 the azure-pipelines.yml was merged into the main branch via a Pull Request. In this second part we attach that YAML to a pipeline and run it on a Microsoft-hosted Windows agent in the cloud.\nThe Pipelines section The Pipelines section in the sidebar contains more items than Repos:\nPipelines — the CI pipelines (build) Environments — deployment targets such as acceptance and production Releases — the classic visual release pipelines (older system, being replaced by multi-stage YAML) Library — variable groups and secure files Task groups — reusable task blocks that can be shared across multiple pipelines Deployment groups — self-hosted agents grouped per environment On a new project the Pipelines list is empty.\nCreating a pipeline: the wizard Via Create Pipeline the four-step wizard starts: Connect → Select → Configure → Review.\nStep 1 — Connect: where is the code? ADO supports Azure Repos Git, GitHub, Bitbucket Cloud, other Git servers and Subversion. At the bottom there is also a link to the classic editor — the old visual pipeline builder without YAML. This is no longer actively developed.\nStep 2 — Select: which repository? Since there is only one repo in the project, dev-ops-lab01 is the only option.\nStep 3 — Configure is automatically skipped. ADO detects that an azure-pipelines.yml already exists in the root of the repo and jumps straight to Review.\nStep 4 — Review: the existing YAML is shown. ADO reads the file directly from the repo — nothing is copied or stored separately. The pipeline is the YAML in the repo.\nThe YAML created in part 1:\n1trigger: 2 - main 3 4pool: 5 vmImage: \u0026#39;windows-latest\u0026#39; 6 7steps: 8 - task: PowerShell@2 9 displayName: \u0026#39;System information\u0026#39; 10 inputs: 11 targetType: \u0026#39;inline\u0026#39; 12 script: | 13 Write-Host \u0026#34;Hostname: $env:COMPUTERNAME\u0026#34; 14 Write-Host \u0026#34;OS: $env:OS\u0026#34; 15 Write-Host \u0026#34;Build number: $(Build.BuildNumber)\u0026#34; 16 Write-Host \u0026#34;Branch: $(Build.SourceBranchName)\u0026#34; The key components:\nKeyword Meaning trigger A push to main starts the pipeline automatically pool.vmImage Microsoft-hosted agent — windows-latest is the most recent Windows Server image steps The list of steps to execute task: PowerShell@2 A built-in ADO task, version 2 $(Build.BuildNumber) Built-in ADO variable, automatically populated $(Build.SourceBranchName) Built-in ADO variable with the branch name Via Run the pipeline is started for the first time.\nThe first run After starting, ADO shows the run summary. The pipeline completed successfully.\nWhat is visible:\n#20260414.1 — build number, constructed from date and sequence number Merged PR 1: Added azure-pipelines.yml — the commit this ran against branch main, commit aaedef9f — the exact merge commit from the PR in part 1 Stage: 1 job completed in 15s — total execution time including agent provisioning The job log Clicking Job opens the detailed log view. The left sidebar shows all the steps ADO automatically executes around the custom YAML steps:\nInitialize job — agent is configured Checkout dev-ops-lab01@main — the repo is cloned on the agent System information — the custom PowerShell task Post-job: Checkout — cleanup after checkout Finalize Job — agent signs off Report build status — status is reported back to the repo The main log shows the agent metadata: Pool: Azure Pipelines, Image: windows-latest, Agent: Azure Pipelines 1. This is a disposable VM in a Microsoft data centre that was provisioned on demand for this job and destroyed after completion.\nPowerShell output The output of the System information step:\n1Hostname: runnervm67wqg 2OS: Windows_NT 3Build number: 20260414.1 4Branch: main The agent is named runnervm67wqg — a randomly assigned Microsoft-hosted Windows VM. The ADO variables $(Build.BuildNumber) and $(Build.SourceBranchName) were automatically populated by the platform with the correct values.\nWhat has been achieved After this second part it is clear how a YAML pipeline works in Azure DevOps:\nThe pipeline wizard links a YAML file in the repo to a pipeline definition ADO automatically detects an existing azure-pipelines.yml A Microsoft-hosted agent is provisioned on demand, executes the job and is discarded afterwards Built-in ADO variables are available in every step without any configuration The job log shows all steps including the automatic steps added by ADO itself In part 3 we will extend the pipeline with stages and jobs — the building blocks for real CI/CD pipelines with multiple environments.\n","date":"14 de abril de 2026","img":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover.png","lang":"es","langName":"Español","largeImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_ce8b2a8b791d2d56.png","permalink":"/es/posts/2026-azure-devops-pipelines-eerste-pipeline/","series":[{"title":"Azure DevOps Lab","url":"/es/series/azure-devops-lab/"}],"smallImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_7a21eef3dae21511.png","tags":[{"title":"Azure-Devops","url":"/es/tags/azure-devops/"},{"title":"Pipelines","url":"/es/tags/pipelines/"},{"title":"YAML","url":"/es/tags/yaml/"},{"title":"Ci-Cd","url":"/es/tags/ci-cd/"},{"title":"PowerShell","url":"/es/tags/powershell/"},{"title":"Windows","url":"/es/tags/windows/"},{"title":"Lab","url":"/es/tags/lab/"}],"timestamp":1776186060,"title":"Azure DevOps — Part 2: Your First YAML Pipeline"},{"authors":[],"categories":[{"title":"Devops","url":"/es/categories/devops/"},{"title":"Azure","url":"/es/categories/azure/"}],"content":"Azure DevOps is Microsoft\u0026rsquo;s platform for managing the complete software delivery chain: version control, CI/CD pipelines, project planning, package feeds and documentation. In this first part of the series we build the foundation: a Git repository, branch protection and the Pull Request workflow.\nSetup: organisation and project After logging in to dev.azure.com the mvdboom organisation is visible with one existing project.\nOpening that project revealed it was a TFVC project — Microsoft\u0026rsquo;s older centralised version control system. TFVC projects use $/projectname paths instead of Git branches and work with changesets and shelvesets. For modern DevOps workflows, Git is the standard.\nTFVC projects cannot be converted to Git. A new project dev-ops-lab01 was therefore created as a Private project with Git as the version control system.\nAzure DevOps Repos Opening Repos shows an empty repository with three options to get started: clone locally, push an existing repo, or initialise directly in the browser with a README. The sidebar shows the Git-specific sections: Files, Commits, Pushes, Branches, Tags, Pull requests and Advanced Security.\nUsing Initialize (with README checked) creates the main branch. The first commit — 924f2a1b: Added README.md — is immediately visible including author and timestamp.\nBranch policies on main A production environment never allows direct pushes to main. Via Branches → ⋯ → Branch policies on the main branch the policies screen opens.\nThe four available policies:\nRequire a minimum number of reviewers — blocks merge without approval Check for linked work items — requires a link to a Board item for traceability Check for comment resolution — all review comments must be resolved Limit merge types — enforces a specific merge strategy (squash, rebase, etc.) Below those are Build Validation (a pipeline must pass before merge), Status Checks (external tools such as SonarQube) and Automatically included reviewers.\nEnabling the first policy reveals its configuration options.\nFor the lab environment the policy is set to minimum 1 reviewer with \u0026ldquo;Allow requestors to approve their own changes\u0026rdquo; checked — so the full workflow can be completed without a second account.\nOnce a required policy is active, the rule applies automatically: direct push to main is blocked, everything goes through a Pull Request.\nFeature branch and first commit From the Files view a new branch feature/add-pipeline was created using the branch selector. The name follows the common convention: feature/ as a prefix followed by a descriptive name.\nVia + New → File the file azure-pipelines.yml was created and typed directly in the browser.\n1trigger: 2 - main 3 4pool: 5 vmImage: \u0026#39;windows-latest\u0026#39; 6 7steps: 8 - task: PowerShell@2 9 displayName: \u0026#39;System information\u0026#39; 10 inputs: 11 targetType: \u0026#39;inline\u0026#39; 12 script: | 13 Write-Host \u0026#34;Hostname: $env:COMPUTERNAME\u0026#34; 14 Write-Host \u0026#34;OS: $env:OS\u0026#34; 15 Write-Host \u0026#34;Build number: $(Build.BuildNumber)\u0026#34; 16 Write-Host \u0026#34;Branch: $(Build.SourceBranchName)\u0026#34; After saving via Commit the change is on the feature branch. ADO immediately suggests at the top: \u0026ldquo;Create a pull request\u0026rdquo;.\nPull Request workflow When creating the Pull Request, ADO automatically shows the correct direction: feature/add-pipeline → main. The tabs Files 1 and Commits 1 confirm the scope of the change.\nAfter creation the PR is in Active status. The branch policy is immediately visible as a blocking check:\n🔵 At least 1 reviewer must approve — merge blocked ✅ No merge conflicts — branch is clean Using Approve the PR is approved. Both checks turn green and the Complete button becomes active.\nClicking Complete shows the merge dialog with a choice of four merge types:\nType Behaviour Merge (no fast forward) Always creates a merge commit; branch history remains visible in the graph Squash commit All commits from the feature branch compressed into one commit on main Rebase and fast forward Commits replayed linearly on top of main; no merge commit Semi-linear merge Rebase first, then merge commit The default Merge (no fast forward) is the right choice in most environments. Delete feature/add-pipeline after merging is checked by default — good practice to keep the repository tidy.\nAfter Complete merge the PR shows Completed status with the full audit trail: created → joined as reviewer → approved → completed.\nWhat has been achieved After this first part the following foundation is in place:\nA Git repository in Azure DevOps (not TFVC) Branch policy on main: direct push blocked, everything via PR Feature branch workflow: feature/add-pipeline created, file committed Full Pull Request completed: create → review → approve → merge The file azure-pipelines.yml is now in main. In part 2 we will attach a pipeline to it and run the YAML on a Microsoft-hosted agent.\n","date":"14 de abril de 2026","img":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch.png","lang":"es","langName":"Español","largeImg":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch_hu_d980affb1eb962a9.png","permalink":"/es/posts/2026-azure-devops-repos-branches-policies-pull-requests/","series":[{"title":"Azure DevOps Lab","url":"/es/series/azure-devops-lab/"}],"smallImg":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch_hu_9ffcb8558117715e.png","tags":[{"title":"Azure-Devops","url":"/es/tags/azure-devops/"},{"title":"Git","url":"/es/tags/git/"},{"title":"Repos","url":"/es/tags/repos/"},{"title":"Pull-Request","url":"/es/tags/pull-request/"},{"title":"Branch-Policy","url":"/es/tags/branch-policy/"},{"title":"YAML","url":"/es/tags/yaml/"},{"title":"Windows","url":"/es/tags/windows/"},{"title":"Lab","url":"/es/tags/lab/"}],"timestamp":1776186000,"title":"Azure DevOps — Part 1: Repos, Branches, Policies and Pull Requests"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/es/categories/windows/"}],"content":" Download as Word document\nThis article describes the full build of a two-server Windows Server 2022 home lab in Proxmox VE. Together, the two virtual machines provide Active Directory Domain Services, DNS, Group Policy and a Certificate Authority (ADCS). RDP connections are secured with PKI certificates so the Mac Mini M1 management workstation connects without certificate warnings.\nThis is part 3 of the series on building a Windows DevOps lab in Proxmox. In part 1 I described how to create a VM, and in part 2 how to prepare the template.\nLab Environment Component Value Proxmox host macpro2013.local Proxmox console https://macpro2013.local:8006 Management workstation Mac Mini M1 VM 1 - AD + DNS WS2022-AD-DNS - 192.168.178.210 VM 2 - CA WS2022-CA01 - 192.168.178.211 Default gateway 192.168.178.1 Subnet prefix /24 Domain LAB01.local Resources (both VMs) 2 vCPU / 4 GB RAM Template WS2022-TEMPLATE-BASE Build Order The CA has a hard dependency on a working AD and DNS. Build everything in this order:\nClone WS2022-TEMPLATE-BASE to WS2022-AD-DNS and configure hostname and static IP Install AD DS + DNS and promote to Domain Controller Configure DNS zones, the SYSVOL scripts folder and Group Policy Clone WS2022-TEMPLATE-BASE to WS2022-CA01 and join the domain Install ADCS (Enterprise Root CA), Web Enrollment and IIS Configure certificate templates and CRL distribution points Deploy Set-RDPCert.ps1 through SYSVOL and a Scheduled Task on both servers Trust the Root CA certificate on the Mac Mini M1 Step 1 - Clone and Prepare WS2022-AD-DNS Clone WS2022-TEMPLATE-BASE to WS2022-AD-DNS through the Proxmox console. Set 2 vCPU and 4 GB RAM and attach the VM to the lab bridge.\nAfter booting, sign in as local Administrator and run the following in an elevated PowerShell session:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Rename the computer 4Rename-Computer -NewName \u0026#34;WS2022-AD-DNS\u0026#34; -Force 5 6# Identify the active network adapter 7$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 8 9# Remove any existing DHCP configuration 10Remove-NetIPAddress -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 11Remove-NetRoute -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 12 13# Assign a static IP address 14New-NetIPAddress ` 15 -InterfaceIndex $adapter.ifIndex ` 16 -IPAddress 192.168.178.210 ` 17 -PrefixLength 24 ` 18 -DefaultGateway 192.168.178.1 19 20# Point DNS to loopback - after AD DS installation point to own IP 21Set-DnsClientServerAddress ` 22 -InterfaceIndex $adapter.ifIndex ` 23 -ServerAddresses 127.0.0.1 24 25# Restart to apply the hostname 26Restart-Computer -Force Step 2 - Install AD DS and DNS After the restart, sign in again as local Administrator and run:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Install AD DS and DNS with all management tools 4Install-WindowsFeature ` 5 -Name AD-Domain-Services, DNS ` 6 -IncludeManagementTools ` 7 -IncludeAllSubFeature 8 9# Promote to Domain Controller and create the new forest 10Import-Module ADDSDeployment 11 12Install-ADDSForest ` 13 -DomainName \u0026#34;LAB01.local\u0026#34; ` 14 -DomainNetBiosName \u0026#34;LAB01\u0026#34; ` 15 -ForestMode \u0026#34;WinThreshold\u0026#34; ` 16 -DomainMode \u0026#34;WinThreshold\u0026#34; ` 17 -InstallDns $true ` 18 -DatabasePath \u0026#34;C:\\Windows\\NTDS\u0026#34; ` 19 -LogPath \u0026#34;C:\\Windows\\NTDS\u0026#34; ` 20 -SysvolPath \u0026#34;C:\\Windows\\SYSVOL\u0026#34; ` 21 -SafeModeAdministratorPassword (ConvertTo-SecureString \u0026#34;P@ssw0rd!DSRM2026\u0026#34; -AsPlainText -Force) ` 22 -Force The server restarts automatically. Afterwards, sign in as LAB01\\Administrator.\nThen update the DNS pointer and create the reverse lookup zone:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3# Update DNS pointer to own IP 4$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 5Set-DnsClientServerAddress ` 6 -InterfaceIndex $adapter.ifIndex ` 7 -ServerAddresses 192.168.178.210, 8.8.8.8 8 9# Create reverse lookup zone 10Add-DnsServerPrimaryZone ` 11 -NetworkID \u0026#34;192.168.178.0/24\u0026#34; ` 12 -ReplicationScope \u0026#34;Forest\u0026#34; 13 14# Add PTR record for the AD server 15Add-DnsServerResourceRecordPtr ` 16 -ZoneName \u0026#34;178.168.192.in-addr.arpa\u0026#34; ` 17 -Name \u0026#34;210\u0026#34; ` 18 -PtrDomainName \u0026#34;WS2022-AD-DNS.LAB01.local.\u0026#34; 19 20# Create the SYSVOL scripts folder 21$scriptShare = \u0026#34;\\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\u0026#34; 22If (-Not (Test-Path $scriptShare)) { 23 New-Item -ItemType Directory -Path $scriptShare -Force 24} Step 3 - Configure Group Policy 1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3Import-Module GroupPolicy 4 5# Create the GPO and link to the domain root 6$gpo = New-GPO -Name \u0026#34;LAB01-Core-Settings\u0026#34; 7New-GPLink -Name \u0026#34;LAB01-Core-Settings\u0026#34; -Target \u0026#34;DC=LAB01,DC=local\u0026#34; -LinkEnabled Yes 8 9# Require NLA for RDP 10Set-GPRegistryValue ` 11 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 12 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 13 -ValueName \u0026#34;UserAuthentication\u0026#34; -Type DWord -Value 1 14 15# Set TLS security layer 16Set-GPRegistryValue ` 17 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 18 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 19 -ValueName \u0026#34;SecurityLayer\u0026#34; -Type DWord -Value 2 20 21# High encryption level 22Set-GPRegistryValue ` 23 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 24 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Windows NT\\Terminal Services\u0026#34; ` 25 -ValueName \u0026#34;MinEncryptionLevel\u0026#34; -Type DWord -Value 3 26 27# Automatic certificate enrollment (computers and users) 28Set-GPRegistryValue ` 29 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 30 -Key \u0026#34;HKLM\\SOFTWARE\\Policies\\Microsoft\\Cryptography\\AutoEnrollment\u0026#34; ` 31 -ValueName \u0026#34;AEPolicy\u0026#34; -Type DWord -Value 7 32 33Set-GPRegistryValue ` 34 -Name \u0026#34;LAB01-Core-Settings\u0026#34; ` 35 -Key \u0026#34;HKCU\\SOFTWARE\\Policies\\Microsoft\\Cryptography\\AutoEnrollment\u0026#34; ` 36 -ValueName \u0026#34;AEPolicy\u0026#34; -Type DWord -Value 7 Step 4 - Clone WS2022-CA01 and Join the Domain Clone WS2022-TEMPLATE-BASE to WS2022-CA01 with 2 vCPU and 4 GB RAM on the same lab bridge. Configure the hostname and static IP on first boot:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Local VM console / Elevated PowerShell 2 3Rename-Computer -NewName \u0026#34;WS2022-CA01\u0026#34; -Force 4 5$adapter = Get-NetAdapter | Where-Object { $_.Status -eq \u0026#39;Up\u0026#39; } | Select-Object -First 1 6Remove-NetIPAddress -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 7Remove-NetRoute -InterfaceIndex $adapter.ifIndex -Confirm:$false -ErrorAction SilentlyContinue 8 9New-NetIPAddress ` 10 -InterfaceIndex $adapter.ifIndex ` 11 -IPAddress 192.168.178.211 ` 12 -PrefixLength 24 ` 13 -DefaultGateway 192.168.178.1 14 15# REQUIRED: point DNS to the AD server 16Set-DnsClientServerAddress ` 17 -InterfaceIndex $adapter.ifIndex ` 18 -ServerAddresses 192.168.178.210 19 20Restart-Computer -Force After the restart, join the domain:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Elevated PowerShell 2 3# Verify DNS resolution before joining the domain 4Resolve-DnsName LAB01.local 5 6# Join the domain 7Add-Computer ` 8 -DomainName \u0026#34;LAB01.local\u0026#34; ` 9 -Credential (Get-Credential -Message \u0026#34;Enter LAB01\\Administrator credentials\u0026#34;) ` 10 -Restart -Force Step 5 - Install ADCS and Configure the Certificate Authority Sign in as LAB01\\Administrator on WS2022-CA01:\n1# RUN ON: WS2022-CA01 (192.168.178.211) - Elevated PowerShell 2 3# Check and install IIS 4Get-WindowsFeature Web-Server 5Install-WindowsFeature Web-Server -IncludeManagementTools 6 7# Install the CA role and Web Enrollment 8Install-WindowsFeature ` 9 -Name ADCS-Cert-Authority ` 10 -IncludeManagementTools ` 11 -IncludeAllSubFeature 12 13Install-WindowsFeature ADCS-Web-Enrollment -IncludeManagementTools 14 15# Verify installation 16Get-WindowsFeature ADCS-Cert-Authority, ADCS-Web-Enrollment, Web-Server | ` 17 Select-Object Name, Installed, DisplayName 18 19# Configure the Enterprise Root CA 20Install-AdcsCertificationAuthority ` 21 -CAType EnterpriseRootCA ` 22 -CACommonName \u0026#34;LAB01-Root-CA\u0026#34; ` 23 -CADistinguishedNameSuffix \u0026#34;DC=LAB01,DC=local\u0026#34; ` 24 -CryptoProviderName \u0026#34;RSA#Microsoft Software Key Storage Provider\u0026#34; ` 25 -KeyLength 4096 ` 26 -HashAlgorithmName SHA256 ` 27 -ValidityPeriod Years ` 28 -ValidityPeriodUnits 10 ` 29 -DatabaseDirectory \u0026#34;C:\\Windows\\system32\\CertLog\u0026#34; ` 30 -LogDirectory \u0026#34;C:\\Windows\\system32\\CertLog\u0026#34; ` 31 -Force 32 33# Configure Web Enrollment 34Install-AdcsWebEnrollment -Force 35 36# Verify 37Get-WindowsFeature ADCS-Web-Enrollment 38Get-Service W3SVC 39netstat -an | findstr :80 40 41# Test the Web Enrollment page 42Invoke-WebRequest ` 43 -Uri \u0026#34;http://localhost/certsrv\u0026#34; ` 44 -UseDefaultCredentials ` 45 | Select-Object StatusCode, StatusDescription The Web Enrollment page is available at http://WS2022-CA01.LAB01.local/certsrv.\nStep 6 - Secure RDP with Set-RDPCert.ps1 Create the script in SYSVOL on WS2022-AD-DNS:\n1# RUN ON: WS2022-AD-DNS (192.168.178.210) - Elevated PowerShell 2 3notepad \\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\\Set-RDPCert.ps1 Paste the following content into Notepad, save and close it:\n1#Requires -RunAsAdministrator 2\u0026lt;# 3.SYNOPSIS 4 Binds a CA-issued certificate to the RDP listener on every startup. 5.DESCRIPTION 6 Finds the most recent valid certificate in Cert:\\LocalMachine\\My issued by 7 LAB01-Root-CA for the local computer\u0026#39;s FQDN. If none is found, certificate 8 auto-enrollment is triggered. The selected certificate thumbprint is written 9 to the RDP-Tcp registry key and the Remote Desktop service is restarted. 10.NOTES 11 Deploy via SYSVOL and run as SYSTEM via Scheduled Task at startup. 12 Lab: LAB01.local - WS2022-AD-DNS / WS2022-CA01 13#\u0026gt; 14 15Set-StrictMode -Version Latest 16$ErrorActionPreference = \u0026#39;Stop\u0026#39; 17 18$LogFile = \u0026#34;C:\\Scripts\\Set-RDPCert.log\u0026#34; 19 20function Write-Log { 21 param([string]$Message) 22 $timestamp = Get-Date -Format \u0026#34;yyyy-MM-dd HH:mm:ss\u0026#34; 23 \u0026#34;$timestamp $Message\u0026#34; | Tee-Object -FilePath $LogFile -Append | Write-Host 24} 25 26Write-Log \u0026#34;=== Set-RDPCert.ps1 started ===\u0026#34; 27 28# 1. Determine the computer\u0026#39;s FQDN 29$fqdn = [System.Net.Dns]::GetHostEntry(\u0026#39;\u0026#39;).HostName 30Write-Log \u0026#34;FQDN: $fqdn\u0026#34; 31 32# 2. Find a valid certificate issued by LAB01-Root-CA 33$rdpCert = Get-ChildItem Cert:\\LocalMachine\\My | 34 Where-Object { 35 $_.Issuer -like \u0026#34;*LAB01-Root-CA*\u0026#34; -and 36 $_.Subject -like \u0026#34;*$fqdn*\u0026#34; -and 37 $_.NotAfter -gt (Get-Date) -and 38 $_.HasPrivateKey 39 } | 40 Sort-Object NotAfter -Descending | 41 Select-Object -First 1 42 43# 3. If no certificate is found, trigger auto-enrollment and retry 44if (-not $rdpCert) { 45 Write-Log \u0026#34;No valid certificate found - triggering auto-enrollment...\u0026#34; 46 \u0026amp; certutil -pulse | Out-Null 47 Start-Sleep -Seconds 30 48 49 $rdpCert = Get-ChildItem Cert:\\LocalMachine\\My | 50 Where-Object { 51 $_.Issuer -like \u0026#34;*LAB01-Root-CA*\u0026#34; -and 52 $_.Subject -like \u0026#34;*$fqdn*\u0026#34; -and 53 $_.NotAfter -gt (Get-Date) -and 54 $_.HasPrivateKey 55 } | 56 Sort-Object NotAfter -Descending | 57 Select-Object -First 1 58} 59 60if (-not $rdpCert) { 61 Write-Log \u0026#34;ERROR: No certificate available after auto-enrollment. Aborting.\u0026#34; 62 exit 1 63} 64 65Write-Log \u0026#34;Certificate selected: $($rdpCert.Subject)\u0026#34; 66Write-Log \u0026#34;Thumbprint : $($rdpCert.Thumbprint)\u0026#34; 67Write-Log \u0026#34;Valid until: $($rdpCert.NotAfter)\u0026#34; 68 69# 4. Grant Network Service read access to the private key 70$keyPath = $rdpCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName 71if ($keyPath) { 72 $keyFile = Get-ChildItem \u0026#34;$env:ProgramData\\Microsoft\\Crypto\\RSA\\MachineKeys\\$keyPath\u0026#34; ` 73 -ErrorAction SilentlyContinue 74 if ($keyFile) { 75 $acl = Get-Acl $keyFile.FullName 76 $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( 77 \u0026#34;NT AUTHORITY\\NETWORK SERVICE\u0026#34;, \u0026#34;Read\u0026#34;, \u0026#34;Allow\u0026#34;) 78 $acl.AddAccessRule($rule) 79 Set-Acl -Path $keyFile.FullName -AclObject $acl 80 Write-Log \u0026#34;Private key ACL updated for NETWORK SERVICE.\u0026#34; 81 } 82} 83 84# 5. Bind the certificate to the RDP listener 85$rdpReg = \u0026#34;HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#34; 86Set-ItemProperty -Path $rdpReg -Name SSLCertificateSHA1Hash -Value $rdpCert.Thumbprint 87Write-Log \u0026#34;Registry updated with new thumbprint.\u0026#34; 88 89# 6. Restart Remote Desktop Services to apply the new certificate 90Write-Log \u0026#34;Restarting TermService...\u0026#34; 91Restart-Service -Name TermService -Force 92Write-Log \u0026#34;TermService restarted.\u0026#34; 93 94Write-Log \u0026#34;=== Set-RDPCert.ps1 completed successfully ===\u0026#34; Then copy the script locally and register the Scheduled Task on both servers:\n1# RUN ON: BOTH SERVERS - WS2022-AD-DNS + WS2022-CA01 - Elevated PowerShell 2 3# Create local copy 4If (-Not (Test-Path \u0026#34;C:\\Scripts\u0026#34;)) { New-Item -ItemType Directory -Path \u0026#34;C:\\Scripts\u0026#34; -Force } 5Copy-Item ` 6 -Path \u0026#34;\\\\LAB01.local\\SYSVOL\\LAB01.local\\scripts\\Set-RDPCert.ps1\u0026#34; ` 7 -Destination \u0026#34;C:\\Scripts\\Set-RDPCert.ps1\u0026#34; ` 8 -Force 9 10Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine -Force 11 12# Register the Scheduled Task 13$action = New-ScheduledTaskAction ` 14 -Execute \u0026#34;powershell.exe\u0026#34; ` 15 -Argument \u0026#34;-NonInteractive -ExecutionPolicy Bypass -File C:\\Scripts\\Set-RDPCert.ps1\u0026#34; 16$trigger = New-ScheduledTaskTrigger -AtStartup 17$principal = New-ScheduledTaskPrincipal -UserId \u0026#34;SYSTEM\u0026#34; -LogonType ServiceAccount -RunLevel Highest 18$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) ` 19 -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 5) -StartWhenAvailable $true 20 21Register-ScheduledTask ` 22 -TaskName \u0026#34;Set-RDPCertificate\u0026#34; -TaskPath \u0026#34;\\LAB01\\\u0026#34; ` 23 -Action $action -Trigger $trigger -Principal $principal -Settings $settings ` 24 -Description \u0026#34;Binds CA certificate to RDP on every startup\u0026#34; -Force 25 26# Run immediately for first-time installation 27Start-ScheduledTask -TaskPath \u0026#34;\\LAB01\\\u0026#34; -TaskName \u0026#34;Set-RDPCertificate\u0026#34; Step 7 - Trust the Root CA Certificate on Mac Mini M1 1# RUN ON: Mac Mini M1 - Terminal (macOS) 2 3# Download the Root CA certificate 4curl -o ~/Downloads/LAB01-Root-CA.cer http://192.168.178.211/LAB01-Root-CA.cer 5 6# Install in the System Keychain as a trusted root 7sudo security add-trusted-cert \\ 8 -d \\ 9 -r trustRoot \\ 10 -k /Library/Keychains/System.keychain \\ 11 ~/Downloads/LAB01-Root-CA.cer Add both VMs in Microsoft Remote Desktop:\n192.168.178.210 - LAB01\\Administrator - WS2022-AD-DNS 192.168.178.211 - LAB01\\Administrator - WS2022-CA01 RDP connections will no longer display certificate warnings.\nVerification 1# WS2022-AD-DNS - full DC diagnostics 2dcdiag /test:Replications /test:DNS /test:KnowsOfRoleHolders /v 3 4# WS2022-CA01 - CA and Web Enrollment 5Get-Service certsvc | Select-Object Name, Status 6Get-WindowsFeature ADCS-Web-Enrollment 7Get-Service W3SVC 8netstat -an | findstr :80 9certutil -CRL 10certutil -verifystore Root \u0026#34;LAB01-Root-CA\u0026#34; 11 12# Both servers - verify the RDP certificate 13$rdpReg = \u0026#34;HKLM:\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#34; 14$thumb = (Get-ItemProperty $rdpReg -Name SSLCertificateSHA1Hash).SSLCertificateSHA1Hash 15Get-ChildItem Cert:\\LocalMachine\\My | Where-Object { $_.Thumbprint -eq $thumb } | 16 Select-Object Subject, Thumbprint, NotAfter, Issuer Download The complete manual, including all commands, the full Set-RDPCert.ps1 script, troubleshooting and reference material, is also available as a Word document:\nWS2022-Lab-Manual-EN.docx\n","date":"2 de abril de 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-home-lab-ad-dns-ca-rdp.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/ws2022-home-lab-ad-dns-ca-rdp/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/es/tags/windows-server-2022/"},{"title":"Proxmox","url":"/es/tags/proxmox/"},{"title":"Active Directory","url":"/es/tags/active-directory/"},{"title":"DNS","url":"/es/tags/dns/"},{"title":"Certificate Authority","url":"/es/tags/certificate-authority/"},{"title":"PKI","url":"/es/tags/pki/"},{"title":"Group Policy","url":"/es/tags/group-policy/"},{"title":"RDP","url":"/es/tags/rdp/"},{"title":"PowerShell","url":"/es/tags/powershell/"},{"title":"Lab","url":"/es/tags/lab/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Security","url":"/es/tags/security/"}],"timestamp":1775116800,"title":"Windows Server 2022 Home Lab — AD DS, DNS, CA and Secured RDP"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/es/categories/windows/"}],"content":" Download as Word document\nThis is part 2 of the series on building a Windows DevOps lab in Proxmox. In part 1 I described how to create the VM. In this article I prepare the VM as a reusable Proxmox template. All future VMs — the CA server, member servers and other roles — will be cloned from this template.\nImportant: After Sysprep, never start the VM again. If you do, the generalization is consumed and the template must be rebuilt from scratch.\nOverview of steps Install VirtIO guest drivers Windows Update — fully patch the OS Apply performance optimizations Basic settings — timezone, RDP, IE Enhanced Security Sysprep — generalize and shut down Convert to template in Proxmox Step 1 — Install VirtIO guest drivers Windows Server 2022 requires VirtIO drivers to function correctly on Proxmox. They cover the storage controller, network adapter, memory ballooning, display and other paravirtualized devices.\nOpen File Explorer in the VM and navigate to the VirtIO CD drive (D: or E:). Scroll down in the file list:\nVirtIO CD drive contents — virtio-win-guest-tools.exe is at the bottom of the list (30MB Application)\nDouble-click virtio-win-guest-tools.exe (the Application, approximately 30MB). This installs all required drivers in one go. Accept the default settings and wait for the installation to complete.\nTip: Always use virtio-win-guest-tools.exe instead of individual drivers from the subfolders. It is faster and ensures nothing is missed.\nStep 2 — Windows Update Fully patching the OS before Sysprep ensures that every cloned VM starts already up to date without having to run updates individually.\n2.1 Starting Windows Update Open Settings → Update \u0026amp; Security → Windows Update and click Check for updates. Available updates will begin to download and install:\nWindows Update downloading and installing multiple updates — let this run undisturbed\n2.2 Known issue — Windows Update GUI freezes The Windows Update GUI in Server 2022 VMs is unreliable. Buttons regularly stop responding and downloads appear to hang. This is a known issue in VM environments.\nWindows Update GUI with Install Now button not responding — switch to PowerShell\nNote: When the Windows Update GUI freezes, do not try to resolve this via the GUI. Use the PowerShell method below instead.\n2.3 Recommended method — PSWindowsUpdate via PowerShell Open PowerShell as Administrator (right-click Start → Windows PowerShell (Admin)):\nPowerShell (Admin) open and ready\nStep 1 — Install the PSWindowsUpdate module:\n1Install-Module PSWindowsUpdate -Force -Confirm:$false PSWindowsUpdate module installing — type Y when prompted to install the NuGet provider or trust PSGallery\nType Y and press Enter when prompted to install the NuGet provider or trust PSGallery.\nStep 2 — Import the module and install all updates:\n1Import-Module PSWindowsUpdate 2Get-WindowsUpdate -Install -AcceptAll -AutoReboot PSWindowsUpdate running — shows status per KB article\nThe VM will restart automatically if required. Updates are applied during the restart:\nWindows applying updates during restart — do not interrupt this\nAfter the restart, log back in and run the command again until there are no more updates:\n1Get-WindowsUpdate -Install -AcceptAll -AutoReboot Windows Update showing \u0026ldquo;You\u0026rsquo;re up to date\u0026rdquo; after the first round\nRun Windows Update a second time to confirm nothing was missed. Some updates only become available after others have been installed:\nWindows Update confirmed up to date after second check — OS is fully patched\nNote: Some updates (such as KB890830 — Windows Malicious Software Removal Tool) sometimes fail persistently in VM environments. This is known and harmless — it has no impact on server functionality and can safely be skipped.\nStep 3 — Performance optimizations Apply these adjustments in PowerShell (Admin) before Sysprep so that every cloned VM automatically benefits from them:\n1# Set high performance power plan 2powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c 3 4# Disable Windows Search indexing — not needed on servers 5Set-Service WSearch -StartupType Disabled 6Stop-Service WSearch -Force 7 8# Disable SysMain / Superfetch — not useful in VMs 9Set-Service SysMain -StartupType Disabled 10Stop-Service SysMain -Force Tip: Also change the VM Display from Default to VirtIO-GPU in the Proxmox Hardware tab. This significantly improves console responsiveness.\nStep 4 — Basic settings Run these commands in PowerShell (Admin):\n1# Set timezone to Amsterdam 2Set-TimeZone -Name \u0026#34;W. Europe Standard Time\u0026#34; 3 4# Enable RDP 5Set-ItemProperty -Path \u0026#39;HKLM:\\System\\CurrentControlSet\\Control\\Terminal Server\u0026#39; ` 6 -Name \u0026#34;fDenyTSConnections\u0026#34; -Value 0 7Enable-NetFirewallRule -DisplayGroup \u0026#34;Remote Desktop\u0026#34; 8 9# Disable NLA for easier lab access 10Set-ItemProperty -Path \u0026#39;HKLM:\\System\\CurrentControlSet\\Control\\Terminal Server\\WinStations\\RDP-Tcp\u0026#39; ` 11 -Name \u0026#34;UserAuthentication\u0026#34; -Value 0 12 13# Disable IE Enhanced Security Configuration 14$AdminKey = \u0026#34;HKLM:\\SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{A509B1A7-37EF-4b3f-8CFC-4F3A74704073}\u0026#34; 15$UserKey = \u0026#34;HKLM:\\SOFTWARE\\Microsoft\\Active Setup\\Installed Components\\{A509B1A8-37EF-4b3f-8CFC-4F3A74704073}\u0026#34; 16Set-ItemProperty -Path $AdminKey -Name \u0026#34;IsInstalled\u0026#34; -Value 0 17Set-ItemProperty -Path $UserKey -Name \u0026#34;IsInstalled\u0026#34; -Value 0 Note: After enabling RDP via the registry, a restart is required before port 3389 starts listening. Run Restart-Computer and wait for the VM to come back.\nVerify RDP connection After the restart, verify RDP from the Proxmox host shell:\nPing successful and nc -zv confirms port 3389 open — RDP is working correctly. Get-NetFirewallRule shows all Remote Desktop rules as Enabled: True\nThe screenshot shows:\nping 192.168.178.11 — responds with 0% packet loss, network is working nc -zv 192.168.178.11 3389 — port open, RDP is listening Get-NetFirewallRule — all Remote Desktop firewall rules show Enabled: True Tip: If nc shows \u0026ldquo;Connection refused\u0026rdquo; after enabling RDP, a restart is required. RDP only starts listening after a restart.\nStep 5 — Sysprep Sysprep generalizes the installation by removing all machine-specific identifiers, including the Security Identifier (SID), computer name and hardware references. This is essential — without Sysprep every cloned VM would share the same SID, causing Active Directory conflicts.\nThis is the point of no return. After Sysprep the VM shuts itself down. Never start the VM again after this. Go directly to Proxmox and convert it to a template.\nRun in PowerShell (Admin) or the Command Prompt:\n1C:\\Windows\\System32\\Sysprep\\sysprep.exe /oobe /generalize /shutdown Flag Purpose /generalize Removes unique system identifiers — SID, computer name, hardware IDs /oobe Configures Windows to run first-time setup on next boot /shutdown Automatically shuts down the VM after completion Sysprep takes approximately 2–5 minutes. The VM shuts itself down when done.\nStep 6 — Convert to template in Proxmox Once the VM has shut itself down after Sysprep, in the Proxmox left panel:\nRight-click the VM (e.g. 900 WS2022-TEMPLATE-BASE) Select Convert to template Confirm the action The VM icon changes to a template icon (stacked pages). The VM can no longer be started directly — only cloned.\nCloning the template for new VMs To create a new VM from the template:\nRight-click the template in the Proxmox left panel Select Clone Set Mode to Full Clone — not Linked Clone Enter the new VM name according to the naming convention (e.g. WS2022-LAB02-CA) Set the VM ID Click Clone Note: Always use Full Clone. Linked clones depend on the template disk and cannot function independently. Full clones are completely independent VMs.\nAfter cloning, the new VM boots into Windows OOBE (first-time setup) where you configure the Administrator password, computer name and network settings before joining the domain.\nSummary checklist # Task Done 1 Install virtio-win-guest-tools.exe from VirtIO CD drive ☐ 2 Run PSWindowsUpdate until fully patched — repeat after each restart ☐ 3 Set high performance power plan via powercfg ☐ 3 Disable WSearch and SysMain services ☐ 3 Change Proxmox Display to VirtIO-GPU in Hardware tab ☐ 4 Set timezone to W. Europe Standard Time ☐ 4 Enable RDP and disable NLA ☐ 4 Disable IE Enhanced Security Configuration ☐ 4 Restart and verify RDP on port 3389 via nc ☐ 5 Run Sysprep: /oobe /generalize /shutdown ☐ 6 Convert VM to template in Proxmox immediately after shutdown ☐ ","date":"31 de marzo de 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-template-preparation.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/ws2022-proxmox-template-preparation/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/es/tags/windows-server-2022/"},{"title":"Proxmox","url":"/es/tags/proxmox/"},{"title":"Virtualization","url":"/es/tags/virtualization/"},{"title":"Lab","url":"/es/tags/lab/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"VirtIO","url":"/es/tags/virtio/"},{"title":"Sysprep","url":"/es/tags/sysprep/"},{"title":"Template","url":"/es/tags/template/"},{"title":"PowerShell","url":"/es/tags/powershell/"}],"timestamp":1774944000,"title":"Windows Server 2022 in Proxmox — Template Preparation"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/es/categories/windows/"}],"content":" Download as Word document\nIn this article I describe step by step how I create a Windows Server 2022 VM in Proxmox VE 9.1.6. The guide is based on real-world experience and includes all corrections and lessons learned along the way. This is part 1 of a series on building a fully functional Windows DevOps lab in Proxmox.\nLab Environment Component Value Proxmox host macpro2013.local — Mac Pro 2013 Trashcan Proxmox version 9.1.6 RAM 128 GB Storage 3.6 TB NVMe (local-lvm pool) Network bridge vmbr0 — internal lab network (192.168.178.x) Proxmox WebUI https://192.168.178.205:8006 Why a CA Is Needed — the SSL Warning Anyone who opens the Proxmox WebUI via macpro2013.local in Safari will immediately see a certificate warning. Proxmox uses a self-signed certificate by default.\nSafari displays an SSL warning for macpro2013.local — this will be resolved once the Certificate Authority is set up\nThis is exactly the motivation to set up an internal Certificate Authority (CA) later. Once that is running, Proxmox can be issued a trusted certificate and the warning will disappear.\nPrerequisites Make sure the following ISO files are available in Proxmox local storage (Proxmox WebUI → local → ISO Images):\nWindows Server 2022 Evaluation: Windows_2022_SERVER_EVAL_x64FRE_en-us.iso VirtIO drivers: virtio-win-0.1.285.iso or newer Note: Both ISOs are required. Without the VirtIO ISO, Windows Setup cannot detect the disk or network adapter.\nVM Naming Use consistent names that include the OS version and all active roles. This lets you see at a glance what each VM does in the Proxmox panel.\nPattern Example Description WS2022-LAB{nn}-{ROLES} WS2022-LAB01-AD-DNS Lab VM with all active roles in the name WS2022-LAB{nn}-CA WS2022-LAB02-CA Certificate Authority VM WS2022-TEMPLATE-{NAME} WS2022-TEMPLATE-BASE Template VM — use VM ID 900+ Renaming a VM is done via the Proxmox host shell (the WebUI has no rename option):\n1ssh root@macpro2013.local 2qm set \u0026lt;VMID\u0026gt; --name \u0026lt;NIEUWE-NAAM\u0026gt; 3 4# Voorbeeld: 5qm set 100 --name WS2022-LAB01-AD-DNS Below you can see how the Proxmox panel looks after both VMs have been correctly created and renamed:\nProxmox panel with WS2022-LAB01-AD-DNS (VM 100) and WS2022-TEMPLATE-BASE (VM 900) correctly created\nCreating a VM — the Proxmox Wizard Click Create VM (blue button at the top right) and work through all tabs as described below.\nGeneral Tab Setting Value Notes Name WS2022-TEMPLATE-BASE Descriptive name including OS and role VM ID 900 Use 900+ for templates, 100+ for lab VMs Node macpro2013 Your Proxmox host OS Tab Setting Value Notes ISO Image Windows_2022_SERVER_EVAL_x64FRE_en-us.iso Select from local storage Type Microsoft Windows Must be set explicitly Version 11/2022/2025 Must be set explicitly Add VirtIO drivers ISO Enabled (checkbox) Adds a second CD drive for the VirtIO ISO VirtIO ISO virtio-win-0.1.285.iso Select from local storage Note: Type and Version must both be set manually. The checkbox for the VirtIO ISO adds a second CD drive — this is essential for loading storage and network drivers during Windows Setup.\nSystem Tab Setting Value Notes BIOS OVMF (UEFI) Required for Windows Server 2022 Machine pc-q35 Modern chipset required for TPM 2.0 SCSI Controller VirtIO SCSI single Best storage performance EFI Storage local-lvm Must be explicitly selected — no default TPM Storage local-lvm Must be explicitly selected — no default TPM Version v2.0 Required for Windows Server 2022 Note: EFI Storage and TPM Storage have no default value — both must be explicitly selected. Without these settings the VM will not boot correctly.\nDisks Tab Setting Value Notes Bus/Device SCSI Use together with VirtIO SCSI controller Storage local-lvm NVMe-backed pool Disk Size 60 GB Sufficient for OS, roles and tools Cache Write back Best performance on NVMe Discard Enabled Enables TRIM for SSD/NVMe storage IO Thread Enabled Improves disk throughput CPU Tab Setting Value Notes Sockets 1 Single socket Cores 2 Sufficient for all lab VM roles Type host Passes through the real host CPU — better performance than the default kvm64 Note: CPU Type must be set to host. The default kvm64 limits the available CPU instruction set features and reduces performance.\nMemory Tab Setting Value Notes Memory 4096 MB 4 GB per VM Minimum Memory 4096 MB Set equal to Memory to disable ballooning Ballooning Device Disabled Not well supported on Windows Note: Ballooning must be disabled for Windows VMs. Set Minimum Memory equal to Memory. In the hardware overview this is reflected as [balloon=0].\nNetwork Tab Setting Value Notes Bridge vmbr0 Internal lab network Model VirtIO (paravirtualized) Best performance — requires VirtIO drivers Firewall Enabled (leave as default) Leave enabled — mirrors production and builds troubleshooting skills Note: Leave the Proxmox firewall enabled on the network adapter. Disabling it may seem convenient but removes an important layer that mirrors real production environments. Troubleshooting through the firewall is a valuable skill.\nHardware Verification Before First Boot After clicking Finish, do not start the VM yet. First click the VM in the left panel and select Hardware. Verify that all settings match the tables above.\nVM 900 (WS2022-TEMPLATE-BASE) — Hardware tab with correct configuration. Note balloon=0, host CPU type, both ISOs present, 60G disk with writeback/discard/iothread, EFI and TPM present.\nCheck specifically:\nMemory: 4.00 GiB [balloon=0] — balloon=0 confirms that ballooning is off Processors: 2 (1 socket, 2 cores) [host] — confirms host CPU type BIOS: OVMF (UEFI) Machine: pc-q35 SCSI Controller: VirtIO SCSI single CD/DVD ide0: virtio-win ISO present CD/DVD ide2: Windows 2022 ISO present Hard Disk: 60G, cache=writeback, discard=on, iothread=1 Network: vmbr0, firewall=1 EFI Disk and TPM State present on local-lvm Starting the VM and Windows Boot Click Start and immediately open the Console. As soon as you see the following, click inside the console window first (to capture keyboard input) and press any key:\n1Press any key to boot from CD or DVD...... Note: If you are too late, the VM will fall through to PXE boot as shown below. Simply reset the VM and try again — be ready at the console before you click Start.\nPXE boot fallback when the CD boot prompt was missed — reset the VM and try again\nIf you catch the prompt in time, the Windows Boot Manager appears:\nWindows Boot Manager — select Windows Setup [EMS Enabled] and press Enter\nSelect Windows Setup [EMS Enabled] (already highlighted) and press Enter.\nEdition Selection At the edition selection screen, choose:\nWindows Server 2022 Datacenter (Desktop Experience)\nNote: Select Datacenter, not Standard. And Desktop Experience, not Core. Core has no GUI and is therefore unsuitable for this lab template.\nLoading the VirtIO Storage Driver On the \u0026ldquo;Where do you want to install the operating system?\u0026rdquo; screen, the disk list is empty. This is normal — Windows cannot see the VirtIO SCSI disk without the driver.\nWindows Setup shows no disk — the VirtIO SCSI driver must be loaded first\nSteps to load the driver:\nClick Load driver Click Browse Navigate to the VirtIO CD drive (D: or E:) Open the folder: vioscsi \\ w2k22 \\ amd64 Click OK Select Red Hat VirtIO SCSI pass-through controller Click Next The 60 GB disk now appears in the list. Select it and continue. The Windows installation begins:\nWindows Server 2022 installation in progress — 23% complete\nAfter Installation — Server Manager After installation and restart you land on the Server Manager Dashboard. Dismiss the Windows Admin Center notification (check \u0026ldquo;Don\u0026rsquo;t show this message again\u0026rdquo;):\nServer Manager Dashboard — Windows Server 2022 Datacenter successfully installed\nThe VM is now ready for the next step: template preparation as described in part 2.\nSummary Checklist # Task Done 1 Upload Windows Server 2022 ISO to Proxmox local storage ☐ 2 Upload VirtIO drivers ISO to Proxmox local storage ☐ 3 Create VM with correct settings in all wizard tabs ☐ 4 Verify hardware configuration in Proxmox Hardware tab before starting ☐ 5 Start VM — catch the CD boot prompt immediately in the Console ☐ 6 Select Windows Server 2022 Datacenter (Desktop Experience) ☐ 7 Load VirtIO SCSI driver (vioscsi/w2k22/amd64) before disk selection ☐ 8 Complete Windows installation ☐ 9 Continue to part 2 — Template Preparation ☐ ","date":"30 de marzo de 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-vm-creation.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/ws2022-proxmox-vm-creation/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/es/tags/windows-server-2022/"},{"title":"Proxmox","url":"/es/tags/proxmox/"},{"title":"Virtualization","url":"/es/tags/virtualization/"},{"title":"Lab","url":"/es/tags/lab/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"VirtIO","url":"/es/tags/virtio/"},{"title":"VM","url":"/es/tags/vm/"}],"timestamp":1774857600,"title":"Windows Server 2022 in Proxmox — Creating a VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/es/categories/windows/"}],"content":"This article describes step by step how I installed Active Directory Domain Services (AD DS) and DNS on a Windows Server 2022 Datacenter VM in a VMware Fusion lab environment. The result is a fully functional domain controller for the domain lab.local, serving as the foundation for a Windows DevOps lab.\nEnvironment Component Value Virtualization VMware Fusion (macOS) Guest OS Windows Server 2022 Datacenter (Desktop Experience) Hostname DC01 Domain name lab.local NetBIOS name LAB Lab network adapter Ethernet1 — 172.16.37.10 (static IP) Internet adapter Ethernet0 — DHCP via VMware NAT Step 1 — Configure Networking Before installing Active Directory, the domain controller needs a static IP address. AD DS and DNS depend on a stable address.\nThe VM has two network adapters: one for internet access (NAT, DHCP) and one for the lab network (Private to my Mac, static IP).\n1.1 Add a Second Network Card in VMware Fusion The VM must be powered off to add a second network adapter. Go to VM \u0026gt; Settings and add a new Network Adapter. Set it to Private to my Mac.\nVMware Fusion network settings: Private to my Mac creates an isolated internal lab network\n1.2 Set a Static IP on Ethernet1 Open Control Panel \u0026gt; Network Connections. Right-click Ethernet1 \u0026gt; Properties \u0026gt; Internet Protocol Version 4 (TCP/IPv4) \u0026gt; Properties.\nFill in the following values:\nIP address: 172.16.37.10 Subnet mask: 255.255.255.0 Default gateway: leave empty Preferred DNS server: 172.16.37.10 (DC01 points to itself) IPv4 Properties: static IP 172.16.37.10 for the lab network. Leave gateway empty — internet runs through Ethernet0.\nNote: Ethernet0 (internet) stays on DHCP. Only Ethernet1 gets a static IP. This way the VM works anywhere — at home, at work, at a relative\u0026rsquo;s place — because the internal lab network is completely isolated.\n1.3 Verification Open PowerShell and verify:\n1Get-NetIPAddress -AddressFamily IPv4 | Select-Object InterfaceAlias, IPAddress Expected output:\n1Ethernet1 172.16.37.10 2Ethernet0 192.168.x.x (varies via DHCP) Step 2 — Install the AD DS Role via Server Manager 2.1 Open Server Manager Server Manager opens automatically after login. Dismiss the Windows Admin Center notification.\nCheck \u0026ldquo;Don\u0026rsquo;t show this message again\u0026rdquo; and close\nServer Manager Dashboard — the starting point for all server management\n2.2 Add a Role Click Add roles and features in the Dashboard.\nChoose Role-based or feature-based installation. DC01 is already shown as the destination server.\nDC01 is already selected in the server pool. Click Next.\n2.3 Select Active Directory Domain Services Check Active Directory Domain Services. A popup will appear asking to add required features — click Add Features.\nCheck Active Directory Domain Services in the list\nNo additional features needed. Everything required is already selected.\n2.4 AD DS Information Page Information page about AD DS. Important: DNS will be installed automatically.\n2.5 Confirm Installation Check Restart the destination server automatically if required and click Install.\nOverview of all components that will be installed\n2.6 Installation Successful Installation succeeded on DC01. Now click the blue link \u0026ldquo;Promote this server to a domain controller\u0026rdquo;.\nImportant: The AD DS role is now installed but DC01 is not yet a domain controller. The link \u0026ldquo;Promote this server to a domain controller\u0026rdquo; is the next step.\nStep 3 — Configure the Domain Controller 3.1 Deployment Configuration Choose Add a new forest and enter as Root domain name: lab.local\nChoose Add a new forest for a completely new domain. Domain name: lab.local\n3.2 Domain Controller Options Functional levels are set to Windows Server 2016 — fine for a modern lab. DNS server and Global Catalog are checked.\nSet the DSRM password. This is an emergency password for Active Directory recovery — store it safely.\nFunctional level 2016, DNS Server and Global Catalog checked. Fill in the DSRM password.\n3.3 DNS Options A warning appears that a DNS delegation cannot be created. This is normal for an internal lab domain like lab.local that doesn\u0026rsquo;t exist on the public internet. Leave Create DNS delegation unchecked.\nThe DNS delegation warning is normal for a private lab domain. No action required.\n3.4 NetBIOS Name Windows automatically sets the NetBIOS name to LAB. Wait for the field to populate.\nWait for the NetBIOS name to appear automatically\nNetBIOS name is LAB — without .local extension. You\u0026rsquo;ll log in later as LAB\\Administrator.\n3.5 File Locations The default locations are fine for a lab.\nDefault locations for AD DS database (NTDS) and SYSVOL. Leave as is.\n3.6 Review Options Verify the summary:\nDomain: lab.local NetBIOS: LAB DNS Server: Yes Global Catalog: Yes Create DNS Delegation: No Summary of the configuration. Everything looks correct — click Next.\n3.7 Prerequisites Check The green checkmark confirms all checks have passed. Yellow warnings are normal for a lab.\nGreen checkmark: All prerequisite checks passed. Click Install.\n3.8 Installation The server configures DNS and restarts automatically.\nDNS Server service is being configured. DC01 will restart automatically when done.\nAfter the reboot: Log in as LAB\\Administrator instead of the local Administrator.\nStep 4 — Verification After Installation Open PowerShell as Administrator and verify:\n1# Domain information 2Get-ADDomain 3 4# Domain controller information 5Get-ADDomainController 6 7# Check DNS zones 8Get-DnsServerZone 9 10# Test name resolution 11Resolve-DnsName dc01.lab.local If Resolve-DnsName dc01.lab.local returns IP address 172.16.37.10, DNS is working correctly.\nNext Steps Now that DC01 is functioning as a domain controller for lab.local, the next steps are:\nCA01 — Certificate Authority for internal TLS certificates (Jenkins, Harbor, Nexus) Join other VMs to lab.local — point DNS to 172.16.37.10 on each new VM Create Organisational Units and service accounts for Jenkins, Ansible and Nexus ","date":"27 de marzo de 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-server-2022-ad-dns.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/windows_server_2022_ad_dns/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/es/tags/windows/"},{"title":"Active Directory","url":"/es/tags/active-directory/"},{"title":"DNS","url":"/es/tags/dns/"},{"title":"Windows Server 2022","url":"/es/tags/windows-server-2022/"},{"title":"VMware","url":"/es/tags/vmware/"},{"title":"Lab","url":"/es/tags/lab/"},{"title":"Devops","url":"/es/tags/devops/"},{"title":"Domain Controller","url":"/es/tags/domain-controller/"}],"timestamp":1774566000,"title":"Windows Server 2022 — Active Directory and DNS Installation"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"Troubleshooting LDAPS Connectivity: Using Built-in Windows Tools to Audit Firewall Compliance As organizations move toward more secure infrastructure, migrating from standard LDAP (Port 389) to LDAPS (Port 636) is a critical step. However, this transition often reveals \u0026ldquo;silent\u0026rdquo; failures where a network firewall might allow the initial connection but block the subsequent SSL/TLS handshake.\nAt Van den Boom Online, we understand that a smooth user experience starts with a robust backend. In this guide, we’ll show you how to perform packet capturing using only built-in Windows tools to verify if your traffic is reaching its destination or being dropped by security appliances.\nWhy Packet Capture for LDAPS? When a connection fails, the error message is often a generic \u0026ldquo;Server Unavailable.\u0026rdquo; By capturing the packets, you can see the exact stage of failure:\nTCP Three-Way Handshake: Is the server even responding to the initial SYN request?\nTLS Client Hello: Is the client sending its encryption requirements?\nTLS Server Hello: Is the server responding with its certificate, or is the connection being reset (RST) by a firewall?\nStep 1: Capturing Traffic with Pktmon Since Windows 10 (Version 2004) and Windows Server 2019, Microsoft has included a powerful tool called Packet Monitor (Pktmon). You don\u0026rsquo;t need to install third-party software like Wireshark on a sensitive server to get the data you need.\nOpen an Elevated Command Prompt Right-click your Command Prompt or PowerShell and select Run as Administrator.\nSet a Filter for LDAPS To avoid \u0026ldquo;noise\u0026rdquo; from other background traffic, filter specifically for Port 636:\n1pktmon filter add -p 636 Start the Capture Run the following command to begin logging. The \u0026ndash;etw flag ensures it captures events in a format Windows can process: 1pktmon start --etw Now, attempt your LDAPS login or connection. Once the failure occurs, move to the next step.\nStop the Capture 1pktmon stop Step 2: Converting the Data for Analysis The resulting file (PktMon.etl) is a binary format. To make it readable for an AI tool or for manual inspection, you can convert it to a text format or a Wireshark-compatible file.\nTo convert to a text file for quick analysis:\n1pktmon format PktMon.etl \u0026gt; ldaps_analysis.txt Now let an AI tool analyse the text file.\nStep 3: What to Look For Once you open your log, look for the following sequence to determine if the firewall is the culprit:\nSYN -\u0026gt; SYN-ACK -\u0026gt; ACK: If you see this, the TCP layer is open. Your firewall allows basic connectivity.\nClient Hello: The client sends this to start the TLS process.\nMissing Server Hello: If you see a \u0026ldquo;Client Hello\u0026rdquo; followed by a TCP RST (Reset) or no response at all, your firewall is likely performing \u0026ldquo;Deep Packet Inspection\u0026rdquo; (DPI) and blocking the encrypted traffic because it doesn\u0026rsquo;t recognize the certificate or the TLS version.\nConclusion Connectivity issues shouldn\u0026rsquo;t be a guessing game. By using pktmon, you can prove exactly where the chain breaks. If you see a successful TCP handshake but a failed TLS \u0026ldquo;Hello\u0026rdquo; exchange, you have the evidence needed to request a firewall policy change from your network team.\nAre you looking to secure your online platforms or optimize your server communication? Van den Boom Online provides the technical expertise to ensure your digital infrastructure is both fast and secure. Contact us today to learn more.\n","date":"18 de enero de 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-packet-capturing-ldaps.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/windows_packet_capturing/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/es/tags/windows/"},{"title":"LDAPS","url":"/es/tags/ldaps/"},{"title":"TLS","url":"/es/tags/tls/"},{"title":"Networking","url":"/es/tags/networking/"},{"title":"Security","url":"/es/tags/security/"},{"title":"Pktmon","url":"/es/tags/pktmon/"}],"timestamp":1768763941,"title":"Windows Packet Capturing for LDAPS Analysis"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"Create a Ubuntu Virtual Machine with: 32 GB RAM 8 cores 120 GB HD\nStep-by-step: Install AWX 24.6.1 on Minikube (Ubuntu)\n🔧 1. System Preparation\n1$ sudo apt update \u0026amp;\u0026amp; sudo apt upgrade -y 2$ sudo apt install -y curl wget apt-transport-https ca-certificates gnupg lsb-release software-properties-common 3$ sudo timedatectl set-timezone Europe/Amsterdam 📦 2. Install Docker (Minikube backend)\n1$ curl -fsSL https://get.docker.com | sudo bash 2$ sudo usermod -aG docker $USER 3$ newgrp docker # Activate group without reboot 4 5Enable and start Docker: 6$ sudo systemctl enable docker 7$ sudo systemctl start docker 8 9Test: 10$ docker run hello-world 🧱 3. Install Minikube\n1$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 2$ sudo install minikube-linux-amd64 /usr/local/bin/minikube 3 4Test: 5$ minikube version ⚙️ 4. Install kubectl (Kubernetes CLI)\n1$ curl -LO \u0026#34;https://dl.k8s.io/release/$(curl -Ls https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\u0026#34; 2$ sudo install kubectl /usr/local/bin/kubectl 3 4Test: 5$ kubectl version --client 🚀 5. Start Minikube\n1$ minikube start --cpus=4 --memory=8192 --driver=docker 2 3Optional: Set as default 4$ minikube config set memory 8192 5$ minikube config set cpus 4 6$ minikube config set driver docker 📁 6. Install AWX Operator (matching 24.6.1)\n1$ git clone https://github.com/ansible/awx-operator.git 2$ cd awx-operator 3$ git checkout 2.14.0 # Matches AWX 24.6.1 4 5Install required tools: 6$ sudo apt install -y make 7 8Install the operator: 9$ make deploy 10 11Verify: 12$ kubectl get pods -n awx 📄 7. Create AWX Instance (CR)\nCreate a file awx.yaml:\n1apiVersion: awx.ansible.com/v1beta1 2kind: AWX 3metadata: 4 name: awx 5spec: 6 service_type: nodeport 7 ingress_type: none 8 image: quay.io/ansible/awx 9 image_version: 24.6.1 10 postgres_storage_class: standard 11 postgres_resource_requirements: 12 requests: 13 memory: 512Mi 14 cpu: 250m 15 limits: 16 memory: 1Gi 17 cpu: 500m 18 web_resource_requirements: 19 requests: 20 memory: 512Mi 21 cpu: 250m 22 limits: 23 memory: 2Gi 24 cpu: 1 25 26Then apply it: 27$ kubectl apply -f awx.yaml -n awe 28 29Watch deployment: 30$ kubectl get awx -n awx 31$ kubectl get pods -n awx -w 32 33$ kubectl get svc -n awx 🌐 8. Access AWX Web UI\n1Get the NodePort: 2$ kubectl get svc -n awx | grep awx-service 3 4Example output: 5awx-service NodePort 10.0.0.94 \u0026lt;none\u0026gt; 8052:30437/TCP 5m 6awx-service NodePort 10.98.159.10 \u0026lt;none\u0026gt; 80:30153/TCP 5m29s 7 8Then: 9$ minikube ip 10 11Get NodePort: 12$ kubectl get svc awx-service -n awx -o yaml 13 14$ minikube service awx-service -n awx 15 16Or open in browser: 17http://\u0026lt;your-server-ip\u0026gt;:\u0026lt;NodePort\u0026gt; 18http://192.168.49.2:30153/ 🔐 9. Login credentials Get admin password:\n1$ kubectl get secret awx-admin-password -n awx -o jsonpath=\u0026#34;{.data.password}\u0026#34; | base64 --decode \u0026amp;\u0026amp; echo 2* Username: admin 3* Password: output from above 🧼 10. (Optional) Enable Minikube dashboard Kubernetes Dashboard\n1$ minikube dashboard Step-by-Step: Auto-start AWX on Minikube after Reboot\n🔁 1. Enable Docker to start at boot\n1$ sudo systemctl enable docker 🚀 2. Create a systemd service to auto-start Minikube Create a new systemd unit:\n1$ sudo vim /etc/systemd/system/minikube.service 2Paste this: 3 4[Unit] 5Description=Minikube K8s Cluster 6After=docker.service 7Requires=docker.service 8 9[Service] 10Type=oneshot 11ExecStart=/usr/local/bin/minikube start --driver=docker 12RemainAfterExit=yes 13User=your-username 14Environment=HOME=/home/your-username 15WorkingDirectory=/home/your-username 16 17[Install] 18WantedBy=multi-user.target 19 20🔧 Replace your-username with your actual Linux username. 21 22Save and run: 23$ sudo systemctl daemon-reexec 24$ sudo systemctl daemon-reload 25$ sudo systemctl enable minikube.service 26 27Test it manually: 28$ sudo systemctl start minikube.service 29 30$ kubectl get pods -n awx -w 31NAME READY STATUS RESTARTS AGE 32awx-migration-24.6.1-pn969\t0/1 Completed 0 21m 33awx-operator-controller-manager-68699bb54-pscct 2/2 Running 2 (64s ago) 68m 34awx-postgres-15-0 1/1 Running 1 (58s ago) 26m 35awx-task-86d87f596c-xm8wx 4/4 Running 4 (62s ago) 25m 36awx-web-7c76dcb5b8-ctmrf 3/3 Running 3 (54s ago) 25m 🛠️ 3. Ensure AWX Operator and AWX pods auto-recover Kubernetes handles pod recovery automatically. As long as Minikube starts correctly and the AWX Operator was deployed with: make deploy …it will recreate your AWX custom resource and pods on reboot. You can confirm with:\n1$ kubectl get pods -n awx 🌐 4. Make NodePort consistent (optional) Kubernetes assigns a random NodePort unless you explicitly set it. To make access reliable:\n1$ kubectl patch svc awx-service -n awx --type=\u0026#39;json\u0026#39; -p=\u0026#39;[ 2 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/type\u0026#34;, \u0026#34;value\u0026#34;:\u0026#34;NodePort\u0026#34;}, 3 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/selector\u0026#34;, \u0026#34;value\u0026#34;:{ 4 \u0026#34;app.kubernetes.io/component\u0026#34;: \u0026#34;awx\u0026#34;, 5 \u0026#34;app.kubernetes.io/managed-by\u0026#34;: \u0026#34;awx-operator\u0026#34;, 6 \u0026#34;app.kubernetes.io/name\u0026#34;: \u0026#34;awx-web\u0026#34; 7 }}, 8 {\u0026#34;op\u0026#34;: \u0026#34;replace\u0026#34;, \u0026#34;path\u0026#34;: \u0026#34;/spec/ports/0/nodePort\u0026#34;, \u0026#34;value\u0026#34;:31082} 9]\u0026#39; 10 11 12$ vim awx-nodeport-service.yaml 13 14apiVersion: v1 15kind: Service 16metadata: 17 name: awx-service 18 namespace: awx 19spec: 20 type: NodePort 21 selector: 22 app: awx # Make sure this matches your pod labels 23 ports: 24 - protocol: TCP 25 port: 80 # Service port inside the cluster 26 targetPort: 8052 # Port your pod/container listens on 27 nodePort: 31082 # The static NodePort you want to assign 28 29Re-apply: 30$ kubectl apply -f awx-nodeport-service.yaml 31 32Then your UI is always at: 33http://\u0026lt;server-ip\u0026gt;:31082 🧪 5. Verify after reboot Reboot the server:\n1$ sudo reboot 2 3After boot: 4$ minikube status 5$ kubectl get pods -n awx Check UI:\n1$ minikube ip 2http://\u0026lt;your-server-ip\u0026gt;:31082 ","date":"2 de julio de 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-awx-minikube.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/ansible_awx/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Install","url":"/es/tags/install/"},{"title":"Ansible","url":"/es/tags/ansible/"},{"title":"Minikube","url":"/es/tags/minikube/"},{"title":"Ubuntu","url":"/es/tags/ubuntu/"},{"title":"AWX","url":"/es/tags/awx/"}],"timestamp":1751456125,"title":"Install Ansible AWX 24.6.1 in Minikube on Ubuntu 24.04.2 LTS in a Single VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"Attention: I have not been able to make it restart automatically after a reboot! Perhaps it is better to look into making it run in Minikube? Create a Red Hat 9 Virtual Machine with: 32 GB RAM 8 cores 120 GB HD\n1$ sudo hostnamectl hostname aap.vandenboom.local Download the Ansible Automation Platform 2.5 Containerized Setup Bundle from: https://access.redhat.com/downloads/content/480/ver=2.5/rhel---9/2.5/x86_64/product-software\n1$ tar zxvf ansible*.tar.gz 2 3$ sudo vim /etc/hosts 4localhost aap.vandenboom.local 5 6$ ping aap.vandenboom.local 7 8$ sudo dnf install -y podman git python3-pip rsync tar jq unzip 9 10$ podman login registry.redhat.io 11 12$ sudo dnf install ansible-core wget 13 14$ python3 -m pip install virtualenv 15$ pip3 install ansible 16 17$ vim inventory 18Edit the settings as seen below 19 20$ time ansible-playbook -i inventory ansible.containerized_installer.install -K This is the contents of the file: ./inventory\n1# This is the AAP enterprise installer inventory file 2# Please consult the docs if you\u0026#39;re unsure what to add 3# For all optional variables please consult the included README.md 4# or the Red Hat documentation: 5# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation 6 7# This section is for your AAP Gateway host(s) 8# ----------------------------------------------------- 9[automationgateway] 10#gateway1.example.org 11#gateway2.example.org 12aap.vandenboom.local ansible_connection=local 13 14# This section is for your AAP Controller host(s) 15# ----------------------------------------------------- 16[automationcontroller] 17#controller1.example.org 18#controller2.example.org 19aap.vandenboom.local ansible_connection=local 20 21# This section is for your AAP Execution host(s) 22# ----------------------------------------------------- 23[execution_nodes] 24#hop1.example.org receptor_type=\u0026#39;hop\u0026#39; 25#exec1.example.org 26#exec2.example.org 27 28# This section is for your AAP Automation Hub host(s) 29# ----------------------------------------------------- 30[automationhub] 31#hub1.example.org 32#hub2.example.org 33aap.vandenboom.local ansible_connection=local 34 35# This section is for your AAP EDA Controller host(s) 36# ----------------------------------------------------- 37[automationeda] 38#eda1.example.org 39#eda2.example.org 40aap.vandenboom.local ansible_connection=local 41 42#[redis] 43#gateway1.example.org 44#gateway2.example.org 45#hub1.example.org 46#hub2.example.org 47#eda1.example.org 48#eda2.example.org 49 50[database] 51aap.vandenboom.local ansible_connection=local 52 53[all:vars] 54 55# Ansible 56ansible_connection=local 57 58# Common variables 59# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-general-inventory-variables 60# ----------------------------------------------------- 61postgresql_admin_username=postgres 62postgresql_admin_password=ansible 63bundle_install=true 64# The bundle directory must include /bundle in the path 65bundle_dir=\u0026#39;{{ lookup(\u0026#34;ansible.builtin.env\u0026#34;, \u0026#34;PWD\u0026#34;) }}/bundle\u0026#39; 66 67registry_username=\u0026lt;your_account\u0026gt; 68registry_password=\u0026lt;your_password\u0026gt; 69 70redis_mode=standalone 71 72# AAP Gateway 73# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-gateway-variables 74# ----------------------------------------------------- 75gateway_admin_password=ansible 76gateway_pg_host=aap.vandenboom.local 77gateway_pg_database=gateway 78gateway_pg_username=gateway 79gateway_pg_password=ansible 80 81# AAP Controller 82# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-controller-variables 83# ----------------------------------------------------- 84controller_admin_password=ansible 85controller_pg_host=aap.vandenboom.local 86#controller_pg_host= 87controller_pg_database=controller 88controller_pg_username=controller 89controller_pg_password=ansible 90 91# AAP Automation Hub 92# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#ref-hub-variables 93# ----------------------------------------------------- 94hub_admin_password=ansible 95hub_pg_host=aap.vandenboom.local 96hub_pg_database=hub 97hub_pg_username=hub 98hub_pg_password=ansible 99 100# AAP EDA Controller 101# https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/containerized_installation/appendix-inventory-files-vars#event-driven-ansible-controller 102# ----------------------------------------------------- 103eda_admin_password=ansible 104eda_pg_host=aap.vandenboom.local 105eda_pg_database=eda 106eda_pg_username=eda 107eda_pg_password=ansible I ran the playbook command with timing it. The total time it took is shown by the real time: ⏱ Total time: 108 minutes and 35.856 seconds = 1 hour, 48 minutes, 36 seconds\n","date":"29 de junio de 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-automation-platform.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/ansible_automation_platform/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"RedHat","url":"/es/tags/redhat/"},{"title":"RHEL","url":"/es/tags/rhel/"},{"title":"Ansible","url":"/es/tags/ansible/"},{"title":"Automation","url":"/es/tags/automation/"},{"title":"Platform","url":"/es/tags/platform/"}],"timestamp":1751231408,"title":"Install Red Hat Ansible Automation Platform 2.5 in a Single VM"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"When comparing Kubernetes with OpenShift (Red Hat\u0026rsquo;s Kubernetes-based platform), there are several key differences that affect how they handle resource consumption and system resources. While OpenShift is built on top of Kubernetes, there are additional functionalities and differences that impact the resource requirements:\nAdditional Functionalities in OpenShift OpenShift offers more out-of-the-box functionality than Kubernetes. This can lead to higher overhead, but also to more ease of use and integration: Security: OpenShift adds extra security layers, such as Security Context Constraints (SCC) and SELinux restrictions, which may require additional resources for securing containers and applications.\nIntegrated CI/CD: OpenShift provides built-in Continuous Integration/Continuous Deployment (CI/CD) tools, like OpenShift Pipelines, which require more resources to manage pipelines and execute builds.\nRegistry: OpenShift includes an integrated container registry, which can lead to additional storage and network consumption if you store and manage many images.\nThese extra functionalities may increase resource usage compared to a standard Kubernetes cluster that you might configure yourself with external tools.\nCluster Management Kubernetes gives you full control over how your cluster and resources are managed. If you set up a Kubernetes cluster yourself, you can optimize the configuration and choice of components for your specific needs. This can result in a more streamlined, resource-efficient implementation, as long as you know what you\u0026rsquo;re doing.\nOpenShift comes with a pre-configured cluster environment that is more structured. The default configurations in OpenShift focus on easier management and security, but this also means that there is more overhead due to the pre-enabled features. Since OpenShift includes many things by default (such as security, logging, monitoring, and networking), it often consumes more resources than a barebones Kubernetes cluster.\nResource Usage in Scaling Kubernetes has a very dynamic and flexible scaling mechanism. For example, if you have applications running on Kubernetes, you can define your own scaling strategies, such as scaling based on CPU or memory usage (with the Horizontal Pod Autoscaler, HPA). This offers a high degree of control over resource usage, but you must be careful not to request unnecessary extra resources.\nOpenShift also offers autoscaling functionality, but it may be more focused on \u0026ldquo;best practices.\u0026rdquo; This means that OpenShift may sometimes scale more aggressively, depending on the pre-configured policies. This can lead to higher resource consumption, especially in larger environments.\nNetworking and Storage Kubernetes gives you the freedom to choose your own networking and storage solutions, which means you might choose an optimized solution with less overhead. For example, if you use a lightweight networking solution, your resource consumption could be lower.\nOpenShift has its own network stack and storage integration. This means you\u0026rsquo;re using Red Hat\u0026rsquo;s solutions for networking and storage, which simplifies integration and management, but may require more resources for managing these built-in services.\nUpdates and Maintenance Kubernetes does not have built-in methods for updating and maintaining the cluster. This can lead to a lighter load on system resources, but requires manual actions and knowledge to manage effectively.\nOpenShift provides a robust way to automatically update and maintain the cluster, which reduces the administrative burden but also uses additional resources to manage these processes. Since OpenShift offers more features, such as logging, monitoring, and native support for updating the entire platform, it can be more resource-intensive than standard Kubernetes.\nResource Optimization Kubernetes offers a higher degree of control over resource usage. You can set resource limits for each pod and container, giving you a good view of how efficiently your cluster is running. However, these adjustments need to be made manually.\nOpenShift also provides resource management, but because it has more automated processes, it may sometimes be less flexible in how it allocates resources. On the other hand, this is also useful for businesses that don’t want to micromanage, as the platform handles many things automatically.\nConclusion:\nKubernetes is generally \u0026ldquo;lighter\u0026rdquo; when it comes to resource usage because you have full control over what runs in the cluster and how it is managed. If you want a minimalist approach, you can have a very optimized Kubernetes cluster, depending on your configuration.\nOpenShift, on the other hand, adds many additional features and configurations (such as CI/CD integration, built-in security, and logging), which results in higher resource consumption. However, it also offers benefits in terms of ease of management, security, and out-of-the-box functionality, making it especially attractive for companies that want to spend less time on cluster management and focus more on their applications.\nSo, if you\u0026rsquo;ve seen the warning about Kubernetes burning resources before, this might actually apply even more to OpenShift. When looking purely at resource consumption, Kubernetes is often more efficient, but OpenShift offers a more comprehensive and user-friendly experience, although that comes with a higher resource burden.\n","date":"29 de marzo de 2025","img":"https://1552afcb.notes-6if.pages.dev/images/openshift-kubernetes-vergelijking.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/pas_op_met_openshift/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/es/tags/kubernetes/"},{"title":"Resources","url":"/es/tags/resources/"}],"timestamp":1743257743,"title":"A Comparison of the Resource Usage of Kubernetes and OpenShift"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"The statement \u0026ldquo;beware of Kubernetes, it burns through your resources\u0026rdquo; refers to the fact that Kubernetes, although a powerful and flexible solution for orchestrating containerized applications, can consume a relatively large amount of system resources (such as CPU, memory, and storage).\nThis is due to several factors:\nKubernetes has overhead: Kubernetes itself runs as a cluster of various components, such as the API server, scheduler, controller manager, and more. These components run on the control plane and need to be managed. This adds extra overhead to your system, meaning that the resources Kubernetes itself uses are added on top of the applications you are actually running.\nComplexity of cluster management: In larger Kubernetes clusters, the amount of computing power required can increase due to the management of multiple nodes, workloads, and the associated control mechanisms. This can lead to increased resource consumption, especially if the cluster is not well-configured.\nScaling applications: Kubernetes is designed to automatically scale your applications based on load. However, depending on your configuration, Kubernetes might start additional pods or reserve resources, even if they are not actually being used, which can waste resources.\nComplex networks and services: Kubernetes uses complex networking layers for managing communication between pods and services. This can impact performance and consume additional network resources. The network connections between the various Kubernetes components can also contribute to higher resource costs in some cases.\nUse of on-demand services: Kubernetes makes use of cloud-based infrastructures for auto-scaling, meaning the cluster may sometimes request more resources than necessary. For example, if you don\u0026rsquo;t properly configure when certain resources should be scaled up, it could require unnecessary capacity.\nIn short, Kubernetes is extremely powerful and offers many benefits for large and complex applications, but it consumes significant amounts of resources, especially if it\u0026rsquo;s not properly tuned to your needs. It\u0026rsquo;s important to configure and optimize it well so that you don’t waste resources unnecessarily.\n","date":"29 de marzo de 2025","img":"https://1552afcb.notes-6if.pages.dev/images/kubernetes-resources-warning.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/pas_op_met_kubernetes/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/es/tags/kubernetes/"},{"title":"Resources","url":"/es/tags/resources/"}],"timestamp":1743256843,"title":"The Statement 'Beware of Kubernetes, It Burns Through Your Resources'"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/es/authors/martijnvandenboom/"}],"categories":[],"content":"Concurrency might sound like a technical term, but it boils down to a program performing multiple tasks at once, as if it’s multitasking. Imagine you’re cooking: while the pasta is on the stove, you start the washing machine and charge your phone. Although you’re not doing everything at the exact same moment, it all happens smoothly side by side. Software that supports concurrency works the same way: a program can, for instance, download files, perform calculations, and send data to a server all at once. This multitasking makes the use of computing power more efficient and ensures faster, smoother performance.\nGolang / Go excels at making concurrency simple and intuitive. Using so-called goroutines, Go offers a lightweight and efficient solution for multitasking, unlike traditional threads in, say, Java. Java threads often consume significant amounts of memory (typically megabytes per thread), whereas goroutines are much lighter and demand fewer system resources. This makes Go particularly well-suited for modern applications like microservices, where scalability plays a key role.\nClassic mistakes are avoided\nWith Go, common multitasking issues are effectively sidestepped. This makes it more reliable than traditional solutions. It helps you avoid classic errors such as:\nRace conditions: Issues caused by simultaneous data access. Deadlocks: Situations where processes block each other. Resource leaks: Inefficient use of system resources. These advantages make Go not only powerful but also a stable choice for companies looking to develop efficient, error-free software.\nReal-time systems and alternatives\nWhile Go is exceptional in its simplicity and strength, it’s less suited for real-time systems. That’s because Go has a garbage collector, a feature that automatically frees up unused memory space. While this is handy for most applications, it can occur at unexpected moments and cause delays. The same applies to Java, which also relies on garbage collection. For real-time systems, where every millisecond counts, languages like C, C++, and Rust are better options. These languages provide direct control over memory management and are designed with performance and predictability in mind.\nAn interesting approach is to combine the best of both worlds. For real-time requirements, you can write modules in C, C++, or Rust and integrate them with Go, for example. This way, you benefit from Go’s simplicity and scalability while leveraging the reliability and speed of languages like C or Rust.\nGo offers a modern, efficient solution for concurrent software and helps prevent classic mistakes. For situations where real-time performance is critical, languages like C or Rust provide a robust foundation. With the right combinations, you can tackle almost any challenge! Feel free to reach out if you’d like to know more or need advice. 😊\nP.S. The information I’ve found here sparks my imagination and has made me curious to dig deeper and see what I can prove myself. However, in an attempt to demonstrate and compare actual memory statistics, some things aren’t as straightforward as they seem. The memory usage of goroutines heavily depends on how much memory is allocated through them rather than having a clear initial memory footprint. So, I’m testing the information I’ve found and the claims made within it.\n","date":"22 de marzo de 2025","img":"https://1552afcb.notes-6if.pages.dev/images/golang-go-concurrency.svg","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/golang_go_concurrency/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Golang","url":"/es/tags/golang/"},{"title":"Go","url":"/es/tags/go/"},{"title":"Multitasking","url":"/es/tags/multitasking/"},{"title":"Concurrency","url":"/es/tags/concurrency/"}],"timestamp":1742673643,"title":"Golang / Go: The Smart Programming Language for Efficient Software and Concurrency"},{"authors":[],"categories":[],"content":"","date":"23 de febrero de 2025","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/contact/","series":[],"smallImg":"","tags":[],"timestamp":1740268800,"title":"Contacto"},{"authors":[],"categories":[],"content":"¡Gracias por tu mensaje!\nApreciamos que se comunique con nosotros. Nuestro equipo está en ello y se comunicará con usted lo antes posible.\nMientras tanto, si tienes alguna pregunta, ¡no dudes en enviarnos otro mensaje!\n","date":"14 de febrero de 2025","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/thank-you/","series":[],"smallImg":"","tags":[],"timestamp":1739491200,"title":"Gracias"},{"authors":[],"categories":[],"content":" BIOGRAFÍA Martijn es un experimentado profesional de TI con más de 26 años de experiencia en tecnología de la información, gestión de infraestructura y automatización. A lo largo de su carrera, ha trabajado en entornos empresariales y gubernamentales complejos, contribuyendo a proyectos para organizaciones como CGI, Rijkswaterstaat, ProRail y el municipio de \u0026rsquo;s-Hertogenbosch.\nSu trabajo se ha centrado en la administración de sistemas, la automatización, el monitoreo, las redes y el diseño de infraestructuras de TI confiables y escalables.\nANTECEDENTES\nLa fascinación de Martijn por las computadoras comenzó durante sus estudios de Ingeniería de la Construcción (HBO Bouwkunde) en Tilburg a fines de la década de 1990, cuando conoció la programación de Microsoft Visual Basic. Crear pequeñas aplicaciones y ver cómo el software podía automatizar el trabajo repetitivo despertó una pasión duradera por la informática y el desarrollo de software.\nEsa curiosidad evolucionó gradualmente hasta convertirse en una carrera profesional a largo plazo en TI y automatización.\nEXPERIENCIA BÁSICA\nDesarrollo de Python Automatización ansible Secuencias de comandos Bash y PowerShell *Administración de sistemas Linux Plataformas de gestión y seguimiento de redes. Prácticas de CI/CD Mejorar la confiabilidad y la eficiencia a través de la automatización ha seguido siendo un tema central a lo largo de su trabajo.\nMENTORÍA Y EDUCACIÓN\nParalelamente a su carrera profesional, Martijn también ha participado activamente en la tutoría y la educación. El trabajo voluntario ha incluido la enseñanza de habilidades informáticas, la tutoría de estudiantes de secundaria y la introducción de conceptos de programación usando C# (Visual Studio) y Python (Spyder/Anaconda).\nSOSTENIBILIDAD E INICIATIVAS INTERNACIONALES\nMartijn también participa en iniciativas de sostenibilidad y desarrollo internacional. Un ejemplo es un proyecto de cultivo de mosca soldado negra (BSF) en Uganda, desarrollado en colaboración con Foundation Foods Ltd. El proyecto se centra en producir proteínas de insectos sostenibles para la alimentación animal y al mismo tiempo reciclar desechos orgánicos.\nAdemás, Martijn ha trabajado en el concepto y diseño del Sistema de Pago de Recogida de Residuos de Polietileno de Planet Protection. Este concepto tiene como objetivo mejorar la recolección de desechos plásticos al permitir que los recolectores lleven desechos de polietileno a los puntos de recolección locales y reciban pagos digitales basados ​​en el peso, apoyando tanto la protección ambiental como las oportunidades económicas locales.\nPERSONAL\nMartijn vive actualmente en Utrecht, Países Bajos, junto con su esposa. La tecnología, la automatización y la innovación sostenible siguen siendo motivaciones centrales tanto en su labor profesional como en sus iniciativas personales.\nPATROCINIO\n¿Quieres apoyar mi trabajo?\nko-fi.com/martijnvandenboom paypal.me/ingmacmvandenboom *buymeacoffee.com/ingvdboom ","date":"13 de febrero de 2025","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/about/","series":[],"smallImg":"","tags":[],"timestamp":1739404800,"title":"Acerca De"},{"authors":[],"categories":[],"content":"Creación de servicio de animaciones Creación de servicio de animaciones\nDa vida a tus ideas con impresionantes animaciones\nEn \u0026ldquo;van den Boom Animations\u0026rdquo;, nos especializamos en crear animaciones personalizadas que cautiven y atraigan a su audiencia. Ya sea que esté buscando mejorar su sitio web, publicitar su marca o agregar un efecto llamativo a su proyecto, nuestro equipo está aquí para transformar su visión en movimiento. Desde transiciones suaves y elementos visuales dinámicos hasta animaciones atractivas, ofrecemos soluciones personalizadas para que su contenido se destaque. ¡Déjanos ayudarte a contar tu historia a través de la magia de la animación!\nQué ofrecemos:\nOfrecemos una amplia gama de servicios de animación para adaptarnos a cada necesidad. Ya sea que esté buscando animaciones dinámicas para sitios web, imágenes atractivas para redes sociales o gráficos en movimiento para su próximo proyecto de video, lo tenemos cubierto. Nuestra experiencia incluye todo, desde animaciones de logotipos hasta gráficos en movimiento 2D/3D. Trabajamos estrechamente con usted para crear animaciones personalizadas que se alineen con su marca, estilo y objetivos, asegurando que su mensaje se transmita de la manera más cautivadora posible.\nCómo funciona:\nComenzar con nosotros es simple y sin complicaciones. Primero, tendremos una conversación para comprender su visión, los objetivos del proyecto y el estilo de animación que está buscando. Luego, nuestro equipo creativo elaborará un concepto adaptado a sus necesidades y compartirá diseños iniciales o guiones gráficos. Una vez que esté satisfecho con la dirección, pasamos a la producción, donde le damos vida a la animación con atención al detalle y la calidad. Durante todo el proceso, lo mantenemos involucrado con actualizaciones periódicas, asegurando que el resultado final supere sus expectativas. De principio a fin, estamos aquí para hacer que su experiencia de animación sea fluida y agradable. Saludos cordiales,\nMartijn P.D. Tenga en cuenta: Este servicio se basa en las contribuciones acordadas por ambas partes. Si le brindamos un servicio excelente y está satisfecho con el resultado, agradeceríamos mucho los comentarios positivos que podamos mostrar públicamente e incluir en nuestro portafolio. Creación de servicio de animaciones\nEjemplos:\n1. La letra rotativa: \"van den Boom Animations\" esta letra \"B\" giratoria es una de las primeras ideas que se me ocurrieron cuando comencé a explorar el mundo del diseño web y las animaciones. Un sitio web puede volverse mucho más entretenido y animado a través de estos pequeños pero poderosos detalles: las animaciones que sorprenden al usuario y enriquecen la experiencia. Agregar movimientos sutiles, como rotar un elemento o hacer que una imagen brille, crea un sitio web más dinámico y atractivo. Mi objetivo es aportar esa magia, para que cada sitio web que creamos tenga ese pequeño toque extra, algo que los visitantes no sólo notan sino que también aprecian. 2. La llama ardiente: Nuestra animación de llamas simboliza la ardiente creatividad que ponemos en cada proyecto. Como una llama que baila y cambia constantemente, le damos a tus ideas energía y movimiento. Ya sea que estés buscando un elemento dinámico para tu sitio web o un efecto visual que capte la atención, nuestras llamas elevan tu proyecto al siguiente nivel. ¡Mira cómo la llama se enciende y se mueve, al igual que nuestros procesos creativos! .logotipo_empresa { familia de fuentes: \"DejaVu Sans Mono\", monoespacio; tamaño de fuente: 20px; pantalla: flexible; alinear elementos: centro; justificar-contenido: centro; margen superior: 18px; margen inferior: 8px; } .contenedor-prefijo { ancho: 7 canales; pantalla: flexible; alinear elementos: centro; } .derecha { margen izquierdo: 20px; color: #000000; } #cursor { animación: parpadeo 1s fin de paso infinito; color: #000000; } [data-bs-theme=\"dark\"] .correcto, [datos-bs-theme=\"oscuro\"] #cursor { color: #ffffff; } @keyframes parpadean { desde, hasta { opacidad: 1; } 50% { opacidad: 0; } } 3. El logotipo de la empresa: El logotipo de nuestra empresa es en sí mismo una animación viva. El texto \u0026lt;VDB/\u0026gt; se escribe carácter por carácter, como un desarrollador que escribe código, seguido de un cursor que parpadea suavemente. Después de una breve pausa, la secuencia comienza de nuevo, un recordatorio constante de que siempre estamos construyendo algo nuevo. La combinación de sintaxis de lenguaje de programación y tipografía monoespacial refleja exactamente quiénes somos: una empresa técnica que reúne creatividad y artesanía en cada solución que ofrecemos. _ Servicios digitales ","date":"11 de febrero de 2025","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/animations/","series":[],"smallImg":"","tags":[],"timestamp":1739232000,"title":"Animaciones"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":" Requisitos Cuenta DigitalOcean Crear archivo Docker Cree Dockerfile en la raíz de su sitio.\nNuestro plantilla inicial ya incluye el Dockerfile.\n1############### 2# Build Stage # 3############### 4FROM hugomods/hugo:exts as builder 5 6COPY . /src 7 8ENV HUGO_ENV=production 9 10# Base URL 11ARG HUGO_BASEURL= 12ENV HUGO_BASEURL=${HUGO_BASEURL} 13 14# Module Proxy 15ARG HUGO_MODULE_PROXY= 16ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY} 17 18# NPM mirrors, such as https://registry.npmmirror.com 19ARG NPM_CONFIG_REGISTRY= 20ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY} 21 22# Install dependencies 23RUN npm ci 24 25# Build site 26RUN hugo --minify --gc --enableGitInfo 27 28# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code. 29# RUN cp ./public/en/404.html ./public/404.html 30 31############### 32# Final Stage # 33############### 34FROM hugomods/hugo:nginx 35COPY --from=builder /src/public /site /site es el directorio de salida de archivos estáticos, que se utilizará más adelante. Crear aplicación Navegue hasta DigitalOcean Dashboard -\u0026gt; Panel izquierdo -\u0026gt; Apps -\u0026gt; Crear aplicación y luego complete el formulario de la siguiente manera.\nModificar recursos En este paso, necesitaremos modificar los recursos, ya que actualmente la plataforma de aplicaciones DigitalOcean Buildpack no puede detectar los sitios Hugo configurados a través de directorio de configuración.\nEs posible que vea varios recursos como se muestra en la imagen de arriba; deberá eliminar los recursos innecesarios, excepto el del tipo Dockerfile.\nEditar recursos de Dockerfile Dado que el servicio web no es gratuito, debemos editar el recurso Dockerfile para que sea un sitio estático.\nHaga clic en el botón Edit a la derecha del recurso Dockerfile y luego accederá al panel de configuración de recursos. Edite el Tipo de recurso y cámbielo a Sitio estático. Edite el Directorio de salida y configúrelo como /site. Una vez hecho esto, obtendrá la configuración similar anterior, ahora hagamos clic en el botón Volver para verificar los recursos.\nSi todo va bien, debería obtener solo un recurso, que es del tipo Static Site | Dockerfile.\nRevisión Revise la sección de facturación; no se le cobrará si implementa no más de 3 sitios estáticos.\nTenga en cuenta que se cobrará el uso de transferencia excedido; lea más en precios.\nImplementar Es hora de implementar el sitio haciendo clic en el botón Crear recursos si todo está bien.\n¿Qué sigue? Una vez creada la aplicación, se implementará automáticamente; puede consultar los registros de compilación si algo sale mal.\nPodrás personalizar el dominio después de implementarlo exitosamente.\n","date":"21 de enero de 2024","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/digitalocean-app-platform/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"DigitalOcean","url":"/es/tags/digitalocean/"},{"title":"Docker","url":"/es/tags/docker/"},{"title":"Dockerfile","url":"/es/tags/dockerfile/"},{"title":"Buildpack","url":"/es/tags/buildpack/"}],"timestamp":1705820419,"title":"Implementar en La Plataforma De Aplicaciones DigitalOcean"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/es/categories/widget/"}],"content":"The funding widget, AKA buy me a coffee widget, gives the readers a way to support a creator.\nSite Parameters The funding is a key value pair that mapping from platform to their QR Code image, username or URL.\nName Type Default Description funding Object - funding.alipay String - Alipay QR Code Image. funding.wechat String - Wechat QR Code Image. funding.paypal String - Paypal username. funding.ko_fi String - Ko-fi username. funding.patreon String - Patreon username. funding.open_collective String - Open Collective username. funding.buymeacoffee String - Buy Me a Coffee username. Page Parameter Name Type Default Description funding Object - Override the global funding settings, empty to disable. ","date":"29 de enero de 2023","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/widgets/funding/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/es/tags/buy-me-a-coffee/"},{"title":"Funding","url":"/es/tags/funding/"}],"timestamp":1674992659,"title":"Funding Widget"},{"authors":[],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"El código corto toggle es similar al code-toggle, pero es más genérico.\nUso 1{{\u0026lt; toggle myToggleName \u0026gt;}} 2 3 {{\u0026lt; toggle-item myToggleItemName \u0026gt;}} 4 CONTENT HERE, MARKDOWN and SHORTCODE are support. 5 {{\u0026lt; /toggle-item \u0026gt;}} 6 7 ... 8 9{{\u0026lt; /toggle \u0026gt;}} El myToggleName DEBE ser único por página. El myToggleItemName DEBE ser único por palanca. Ejemplo Foo Bar foo barra PHP JS SQL 1eco \u0026#34;hola mundo\u0026#34; 1console.log(\u0026#34;hola mundo\u0026#34;) 1SELECCIONA \u0026#34;hola mundo\u0026#34; ","date":"21 de enero de 2023","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/toggle/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Toggle","url":"/es/tags/toggle/"}],"timestamp":1674314531,"title":"Palanca"},{"authors":[],"categories":[],"content":"La búsqueda del cliente será cada vez más lenta a medida que crezca el contenido; es razonable tener un servicio de búsqueda remota para manejar las solicitudes de búsqueda de un sitio grande.\nAlgolia es un servicio de búsqueda popular que ofrece un plan gratuito (10.000 registros, 10.000 solicitudes por mes). Después de leer este artículo, aprenderá cómo configurar Algolia y cargar archivos de índice automáticamente.\nPreparativos En primer lugar, debe crear una cuenta de Algolia y luego crear su aplicación.\nNavegue hasta Descripción general \u0026gt; Claves API, la página muestra todo lo que pueda necesitar en los pasos restantes, como el ID de la aplicación, la clave API de búsqueda y la clave API de administrador.\nConfiguración Nombre Tipo Predeterminado Descripción algolia Objeto - Algolia algolia.appId Cadena - ID de aplicación algolia.apiKey Cadena - Buscar solo clave API algolia.indexName Cadena - Nombre del índice algolia.paginate Número 5 algolia.stallThreshold Número 300 Cuántos milisegundos deben transcurrir antes de que la experiencia de autocompletar se considere detenida. Índice Crear índice Navegue hasta Fuentes de datos \u0026gt; Índices \u0026gt; Crear índice y luego cree su índice, llamémoslo prod.\nAgregar atributos de búsqueda Una vez creado el índice, estamos en la página de índice.\nNavegue hasta Configuración \u0026gt; Atributos buscables, necesitaremos agregar los atributos title y content.\nSubir índice Una vez creado el sitio, el archivo de índice de Algolia se generará y guardará como /algolia/index.json, es decir, http://localhost:1313/algolia/index.json.\nCargar manualmente Puede cargar el archivo de índice manualmente a través del panel de Algolia para realizar pruebas.\nHerramienta CLI Escribí un herramienta CLI para cargar el archivo de índice, se puede integrar fácilmente con sus herramientas de CI y CD.\nAcción de GitHub También escribí un Acciones de GitHub si estás usando GitHub para alojar tu repositorio.\nCree .github/workflows/algolia.yml en la raíz de su sitio con el siguiente contenido.\n1name: Algolia Index 2 3on: 4 workflow_dispatch: 5 push: 6 branches: 7 - \u0026#34;main\u0026#34; 8 9jobs: 10 index: 11 runs-on: ubuntu-latest 12 steps: 13 - name: Checkout 14 uses: actions/checkout@v3 15 - name: Build \u0026amp; upload Algolia index 16 uses: razonyang/hugo-theme-bootstrap-algolia-action@v0.1.0 17 with: 18 algolia-app-id: ${{ secrets.ALGOLIA_APP_ID }} 19 algolia-api-key: ${{ secrets.ALGOLIA_API_KEY }} 20 algolia-index-name: prod Y luego cree los secretos ALGOLIA_APP_ID y ALGOLIA_API_KEY para su repositorio.\nALGOLIA_API_KEY es la clave API admin, no clave API de búsqueda únicamente.\nUna vez creada la acción de GitHub, el archivo de índice se cargará automáticamente en git push.\n","date":"27 de noviembre de 2022","img":"/docs/topics/algolia/featured.png","lang":"es","langName":"Español","largeImg":"/docs/topics/algolia/featured_hu_fdffb880f893b4ae.png","permalink":"/es/docs/topics/algolia/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/topics/algolia/featured_hu_24633db3233eed98.png","tags":[{"title":"Algolia","url":"/es/tags/algolia/"}],"timestamp":1669549992,"title":"Algolia"},{"authors":[],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Una descripción detallada del código corto de iframe.\nUso 1{{\u0026lt; iframe \u0026#34;URL\u0026#34; \u0026gt;}} o mediante parámetros con nombre\n1{{\u0026lt; iframe 2 src=\u0026#34;URL\u0026#34; 3 trigger=manual 4 loadButtonText=\u0026#34;load_video\u0026#34; 5\u0026gt;}} Parámetro Predeterminado Descripción src - La URL del marco flotante. Requerido. trigger auto Configúrelo como manual si desea cargar el iframe manualmente. lazyLoading true loadButtonText load Se admite el texto del botón de carga, i18n. loadInfo - La información se muestra debajo del botón de carga. Se admite la reducción de precios. fullscreen true Mostrar/Ocultar el botón de pantalla completa. Ejemplos Abrir mapa de calles Juego Corre juego Ten en cuenta que el iframe cargará el juego desde otros sitios. ","date":"19 de noviembre de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/iframe/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"IFrame","url":"/es/tags/iframe/"}],"timestamp":1668834048,"title":"Código Corto De IFrame"},{"authors":[],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Una descripción detallada del shortcode del juego.\nUso 1{{\u0026lt; game \u0026#34;GAME_URL\u0026#34; \u0026gt;}} o mediante parámetros con nombre\nParámetro Predeterminado Descripción src - La URL del juego. Requerido. trigger auto Configúralo como manual si quieres cargar el juego manualmente. loadInfo - La información se muestra debajo del botón de carga. Se admite la reducción de precios. 1{{\u0026lt; game 2 src=\u0026#34;GAME_URL\u0026#34; 3 trigger=manual 4 loadInfo=\u0026#34;The Game Information.\u0026#34; 5\u0026gt;}} Ejemplos Carga automática Carga manual Corre juego The Game Information. ","date":"15 de noviembre de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/game/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Game","url":"/es/tags/game/"}],"timestamp":1668518208,"title":"Código Corto Del Juego"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"En este artículo, hablaremos sobre el diseño de la página de destino; puede que le interese si va a personalizar las páginas en modo Markdown.\n¿Qué es? El diseño de la página de destino es solo un contenedor esqueleto, el cuerpo consta de tres partes: barra superior de la aplicación, contenido de la página y pie de página.\nVentajas Redacción de contenidos en Markdown. Códigos cortos reutilizables. ¿Cómo usarlo? Es bastante simple de usar, simplemente especifique type como landing y sidebar como false en la portada de la página, el resto es todo acerca de su contenido.\n1+++ 2type = \u0026#34;landing\u0026#34; 3sidebar = false 4+++ Tomemos la página de inicio como ejemplo, creemos el content/_index.md con el siguiente contenido.\nLa página de inicio DEBE ser content/_index.md, no content/index.md.\n1--- 2title: Home 3type: landing 4--- 5 6{{\u0026lt; text/align-center \u0026gt;}} 7\u0026lt;h1\u0026gt;Hello world.\u0026lt;/h1\u0026gt; 8{{\u0026lt; /text/align-center \u0026gt;}} 9 10\u0026lt;br\u0026gt; 11 12{{\u0026lt; text/align-center \u0026gt;}} 13\u0026lt;h2\u0026gt;The subtitle landing page example.\u0026lt;/h2\u0026gt; 14{{\u0026lt;/* /text/align-center \u0026gt;}} ","date":"15 de septiembre de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/layouts/landing/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Landing Page","url":"/es/tags/landing-page/"}],"timestamp":1663209983,"title":"Diseño De Página De Destino"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/es/categories/widget/"}],"content":"The repository widget shows the commit information about current page, it\u0026rsquo;s useful for users to view or edit the source code.\nRequirements This widget relies on the .GitInfo, so you\u0026rsquo;ll need to either enable it via the --enableGitInfo flag or setting the enableGitInfo as true in config.toml.\n1$ hugo --enableGitInfo 1enableGitInfo = true Site Parameters Name Type Default Description repo Object - repo.url String - Required. The URL of your public repository. GitHub and GitLab are supported. repo.branch String master The branch name. repo.subPath String - The sub path of content. repo.dateFormat String 02/01/2006, 15:04:05 PM The format of commit date. Usage The repository widget is disabled by default, you\u0026rsquo;ll need to include widget via Hooks.\nFor posts layout.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} For docs layout.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} ","date":"9 de septiembre de 2022","img":"/docs/widgets/repository/featured.png","lang":"es","langName":"Español","largeImg":"/docs/widgets/repository/featured_hu_8e5e187c0d9a3e55.png","permalink":"/es/docs/widgets/repository/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/widgets/repository/featured_hu_b0ece6c3195c9919.png","tags":[{"title":"Repository","url":"/es/tags/repository/"},{"title":"GitHub","url":"/es/tags/github/"}],"timestamp":1662728779,"title":"Repository Widget"},{"authors":[{"title":"Wilson E. Alvarez","url":"/es/authors/rubonnek/"}],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"Este artículo explica cómo implementar sitios en Páginas de GitLab usando GitLab CI.\nFlujo de trabajo Cree .gitlab-ci.yml en la raíz de su sitio con el siguiente contenido:\n1image: registry.gitlab.com/pages/hugo/hugo_extended:latest 2 3variables: 4 HUGO_ENV: production 5 6default: 7 before_script: 8 - apk add --update --no-cache git go npm 9 - npm install 10 11test: 12 script: 13 - hugo --gc --minify 14 rules: 15 - if: $CI_COMMIT_REF_NAME != $CI_DEFAULT_BRANCH 16 17pages: 18 script: 19 - hugo --gc --minify 20 artifacts: 21 paths: 22 - public 23 rules: 24 - if: $CI_COMMIT_REF_NAME == $CI_DEFAULT_BRANCH El ejemplo anterior solo implementará la rama predeterminada en GitLab Pages y ejecutará una prueba en el resto de las ramas.\nVer también:\nConfiguración de páginas de GitLab de plantilla inicial。 *Ejemplo ascendente de GitLab Hugo Documentación de variables de GitLab CI/CD ","date":"27 de agosto de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/gitlab-pages/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"GitLab Pages","url":"/es/tags/gitlab-pages/"},{"title":"GitLab CI","url":"/es/tags/gitlab-ci/"}],"timestamp":1661567423,"title":"Implementar en Páginas De GitLab"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"En esta sección, vamos a hablar de los puntos clave de las implementaciones para evitar la mayoría de los problemas durante la implementación.\nHerramientas de construcción Como mencionó Requisitos previos, deberá configurar esas herramientas en su entorno de implementación.\nInstalación de dependencias Usamos NPM para administrar las dependencias del tema, es necesario instalar las dependencias en el entorno de implementación, ya que NO DEBEMOS confirmar la carpeta node_modules.\n1$ npm i npm i es el acceso directo de npm install.\npackage.json y package-lock.json DEBEN confirmarse, npm se basa en el primero, el segundo ahorrará tiempo de instalación.\nSitio de construcción Es hora de construir el sitio después de instalar las dependencias.\n1$ hugo --gc --minify --minify minimiza el HTML final. Puede cambiar el baseURL mediante la bandera -b.\nEl comando generó el sitio y lo guardó en el directorio public de forma predeterminada.\nSitio de implementación Este paso depende de los métodos de implementación que utilice.\nMétodos de implementación Estibador Páginas de GitHub Netlificar Páginas de Cloudflare Páginas de GitLab Encuentre más en Alojamiento e implementación Lectura adicional Actuación ","date":"27 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/overview/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658916025,"title":"Descripción General De La Implementación"},{"authors":[],"categories":[{"title":"Layouts","url":"/es/categories/layouts/"},{"title":"Partials","url":"/es/categories/partials/"}],"content":"Según Orden de búsqueda de diseños de Hugo, es fácil anular los diseños y parciales de Hugo y del tema. Es útil para los usuarios que desean personalizar algunas cosas de diseños o parciales particulares.\nUso Simplemente cree un diseño o un archivo parcial con el mismo nombre de archivo que desea anular en la raíz del sitio.\nAsí trabaja nuestro Manos.\nPor ejemplo, podemos anular la página de inicio parital diseños/index.html creando la nuestra propia en la raíz del sitio.\n1$ echo \u0026#34;MY CUSTOM HOMEPAGE\u0026#34; \u0026gt; layouts/index.html ","date":"27 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/layouts-overriding/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658909137,"title":"Anulación De Diseños"},{"authors":[],"categories":[{"title":"Widgets","url":"/es/categories/widgets/"}],"content":"When the page is too long, the sidebar will disappear with scrolling and the page will not look as neat and beautiful. So this article will introduce how to use sticky widgets to avoid this problem.\nCreate a New Sticky Widget First of all, create a partial under the layouts/parials folder, let\u0026rsquo;s take layouts/partials/custom/sticky-info.html as example.\n1\u0026lt;div class=\u0026#34;row card component position-sticky\u0026#34; style=\u0026#34;top: 84px;\u0026#34;\u0026gt; 2 \u0026lt;div class=\u0026#34;text-center py-3 px-1\u0026#34;\u0026gt; 3 MY STICKY WIDGET 4 \u0026lt;/div\u0026gt; 5\u0026lt;/div\u0026gt; The filename custom/sticky-info can be changed at will, but we recommend using some more specific names to avoid overriding the theme\u0026rsquo;s partials later. Such as custom, mywidgets.\nThen use the layouts/partials/hooks/sidebar-end.html hook to include the sticky partial.\n1{{- partial \u0026#34;custom/sticky-info\u0026#34; . }} The sticky widget should be the last widget of the sidebar, otherwise, strange problems can occur.\nMake an Existing Widget Sticky Each widget will have a unique class name, so that we can apply CSS on a desired widget, here we take the profile widget as an example.\n1.sidebar { 2 .profile { 3 position: sticky !important; 4 top: 84px; 5 order: 5; 6 } 7} We need to specify the order property to make the profile widget become the last widget of sidebar.\n","date":"27 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/topics/sticky-widgets/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Sticky","url":"/es/tags/sticky/"},{"title":"SCSS","url":"/es/tags/scss/"}],"timestamp":1658883283,"title":"Sticky Widgets"},{"authors":[],"categories":[{"title":"Multilingual","url":"/es/categories/multilingual/"}],"content":"HBS admite varios idiomas desde el primer momento, como inglés, chino simplificado, chino tradicional, francés, ruso, etc.\nPuedes agregar tus propias traducciones en: tema-hugo-bootstrap/i18n\nIdiomas admitidos Language Code English en Simplified Chinese zh-hans(Recommended), zh-cn Traditional Chinese zh-hant(Recommended), zh-tw, zh-hk Spanish es Arabic ar German de French fr Indonesian id Japanese ja Polish pl Portuguese pt Russian ru Ukrainian uk Uzbek uz Configuración TOML YAML JSON config/_default/language.toml\n1[ar] 2 languageDirection = \u0026#39;rtl\u0026#39; 3 title = \u0026#39;مدونتي\u0026#39; 4 weight = 3 5[en] 6 languageName = \u0026#39;English\u0026#39; 7 weight = 1 8[zh-hans] 9 languageName = \u0026#39;简体中文\u0026#39; 10 weight = 2 11 [zh-hans.params] 12 description = \u0026#39;一个快速、响应式和功能丰富的 Hugo 博客主题\u0026#39; 13 keywords = \u0026#39;Hugo, Bootstrap, 博客主题\u0026#39; config/_default/language.yaml\n1ar: 2 languageDirection: rtl 3 title: مدونتي 4 weight: 3 5en: 6 languageName: English 7 weight: 1 8zh-hans: 9 languageName: 简体中文 10 params: 11 description: 一个快速、响应式和功能丰富的 Hugo 博客主题 12 keywords: Hugo, Bootstrap, 博客主题 13 weight: 2 config/_default/language.json\n1{ 2 \u0026#34;ar\u0026#34;: { 3 \u0026#34;languageDirection\u0026#34;: \u0026#34;rtl\u0026#34;, 4 \u0026#34;title\u0026#34;: \u0026#34;مدونتي\u0026#34;, 5 \u0026#34;weight\u0026#34;: 3 6 }, 7 \u0026#34;en\u0026#34;: { 8 \u0026#34;languageName\u0026#34;: \u0026#34;English\u0026#34;, 9 \u0026#34;weight\u0026#34;: 1 10 }, 11 \u0026#34;zh-hans\u0026#34;: { 12 \u0026#34;languageName\u0026#34;: \u0026#34;简体中文\u0026#34;, 13 \u0026#34;params\u0026#34;: { 14 \u0026#34;description\u0026#34;: \u0026#34;一个快速、响应式和功能丰富的 Hugo 博客主题\u0026#34;, 15 \u0026#34;keywords\u0026#34;: \u0026#34;Hugo, Bootstrap, 博客主题\u0026#34; 16 }, 17 \u0026#34;weight\u0026#34;: 2 18 } 19} Deberá especificar languageDirection como rtl para idiomas de escritura de derecha a izquierda.\nVéase también Hugo multilingüe.*\nEl parámetro que controla el idioma predeterminado del sitio debe estar ubicado en el archivo de configuración del sitio. Ver defaultContentLanguage en Configuración del sitio.\nLocalización El dateFormat admite localización, puede cambiarlo como :date_full, puede encontrar más diseños en Diseños de formato de fecha/hora.\nTenga en cuenta que zh-cn, zh-tw y zh-hk no son compatibles, ya que el código de idioma no puede coincidir con las configuraciones regionales definidas en Hugo Locales.\nLectura adicional Traduce tu contenido ","date":"27 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/configuration/multilangual/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Translation","url":"/es/tags/translation/"},{"title":"Localization","url":"/es/tags/localization/"}],"timestamp":1658880366,"title":"Modo Multilingüe"},{"authors":[],"categories":[{"title":"PurgeCSS","url":"/es/categories/purgecss/"}],"content":"PurgeCSS es una herramienta increíble que elimina el CSS no utilizado de su sitio. En esta sección, profundizaremos en cómo funciona PurgeCSS y a qué debemos prestar atención.\n¿Cómo funciona? PurgeCSS requiere que se establezca la siguiente configuración.\nTOML YAML JSON config.toml\n1[build] 2 writeStats = true 3[taxonomies] 4 author = \u0026#39;authors\u0026#39; 5 category = \u0026#39;categories\u0026#39; 6 series = \u0026#39;series\u0026#39; 7 tag = \u0026#39;tags\u0026#39; config.yaml\n1build: 2 writeStats: true 3taxonomies: 4 author: authors 5 category: categories 6 series: series 7 tag: tags config.json\n1{ 2 \u0026#34;build\u0026#34;: { 3 \u0026#34;writeStats\u0026#34;: true 4 }, 5 \u0026#34;taxonomies\u0026#34;: { 6 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34;, 7 \u0026#34;category\u0026#34;: \u0026#34;categories\u0026#34;, 8 \u0026#34;series\u0026#34;: \u0026#34;series\u0026#34;, 9 \u0026#34;tag\u0026#34;: \u0026#34;tags\u0026#34; 10 } 11} Le dice a Hugo que calcule las etiquetas, clases e identificadores utilizados y luego genera hugo_stats.json.\n1{ 2 \u0026#34;htmlElements\u0026#34;: { 3 \u0026#34;tags\u0026#34;: [], 4 \u0026#34;classes\u0026#34;: [], 5 \u0026#34;ids\u0026#34;: [] 6} Finalmente, PurgeCSS se basa en este archivo para purgar el CSS no utilizado.\nPurgeCSS solo funciona en el entorno production.\nNO recomendamos anular postcss.config.js y assets/main/config/rtl/postcss.config.js; de lo contrario, se producirán problemas inesperados durante las actualizaciones de la versión.\nLimitaciones El hugo_stats.json solo funciona en plantillas *.html, es decir, todas las clases, etiquetas e identificadores de CSS utilizados en archivos JavaScript aún se eliminarán.\nPero no te preocupes, hay dos formas de solucionar este problema.\nEstadísticas adicionales Simplemente cree un archivo llamado extra_stats.json con la misma forma de hugo_stats.json en la raíz de su sitio y coloque el CSS adicional en él manualmente.\nextra_stats.json DEBE estar comprometido con su repositorio.\nPoner bloque HTML en archivos *.html Un escenario común es renderizar bloques HTML usando JavaScript; si está usando JavaScript para generar un elemento DOM, hugo_stats.json ignorará cualquier CSS usado. Por supuesto, puedes agregarlo a extra_stats.json manualmente, pero hay una mejor manera de hacerlo a través del motor de plantillas.\nEn primer lugar, necesitaremos definir un bloque de plantilla en *.html parciales. 1\u0026lt;div class=\u0026#34;d-none\u0026#34; id=\u0026#34;template-custom-widget-foo\u0026#34;\u0026gt; 2 \u0026lt;div class=\u0026#34;custom-widget-foo\u0026#34;\u0026gt;\u0026lt;/div\u0026gt; 3\u0026lt;/div\u0026gt; 4 5\u0026lt;script type=\u0026#34;text/html\u0026#34; id=\u0026#34;template-custom-widget-bar\u0026#34;\u0026gt; 6 \u0026lt;div class=\u0026#34;custom-widget-bar\u0026#34;\u0026gt; 7 NOTE THAT: ANY CSS INSIDE THE SCRIPT TAG WONT BE INCLUDED INTO THE STATS FILE. 8 \u0026lt;/div\u0026gt; 9\u0026lt;/script\u0026gt; Hugo calculará el CSS usado en hugo_stats.json.\n1$ cat hugo_stats.json | grep custom-widget- 2 \u0026#34;custom-widget-foo\u0026#34;, 3 \u0026#34;template-custom-widget-foo\u0026#34;, 4 \u0026#34;template-custom-widget-bar\u0026#34;, Como puede ver, el CSS(custom-widget-bar) usado dentro de la etiqueta \u0026lt;script\u0026gt; no se incluirá en hugo_stats.json, por lo que debemos usar otras etiquetas HTML con la clase d-none para ajustar su plantilla.\nd-none es una utilidad CSS Bootstrap, igual a display: none.\nY luego renderice la plantilla a través de cualquier motor de plantillas. 1const tmpl = document.getElementById(\u0026#39;template-custom-widget-bar\u0026#39;).innerHTML; 2render(tmpl, data); Pruebas Deberá especificar el entorno production para las pruebas locales a través de hugo server -e production -b http://localhost:1313, ya que PurgeCSS solo funciona en el entorno production.\nA veces, PurgeCSS y PostProcess no funcionan muy bien, por lo que es posible que deba reiniciar Hugo Server de vez en cuando.\n","date":"25 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/purgecss/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658721960,"title":"PurgarCSS"},{"authors":[],"categories":[{"title":"Performance","url":"/es/categories/performance/"}],"content":"En este artículo vamos a hablar sobre cómo mejorar el rendimiento de sus sitios.\nLa forma más sencilla de mejorar el rendimiento es reducir el tamaño del archivo para transferirlo más rápido.\nMedio ambiente El tema se basa en el entorno production para minimizar los activos de JavaScript y CSS, y eliminar el CSS no utilizado.\nEntorno predeterminado Valor hugo production hugo server development En general, no es necesario realizar ningún cambio a menos que planee utilizar hugo server en un entorno production. Puede cambiar el entorno predeterminado con el indicador -e.\nMinificación HTML Debe utilizar hugo --minify para minimizar el HTML final en el entorno de producción.\nCompresión La compresión no es lo mismo que la minificación, comprime archivos con algún algoritmo (como gzip) y luego los transfiere a los clientes, los clientes luego los descomprimen antes de analizar esos archivos. Esta es la configuración del servidor web. Consulte los documentos pertinentes según su propia situación.\nRecursos de imágenes Coloque las imágenes destacadas, de portada o en miniatura debajo de la carpeta de la página siempre que sea posible, para que las imágenes sean tratadas como recursos de la página que el tema pueda procesar. HBS lo recortará en varios tamaños más pequeños para adaptarse a diferentes dispositivos, con el fin de ahorrar ancho de banda a los usuarios y mejorar el rendimiento y la experiencia del usuario.\n1├── featured-sample.webp 2├── index.md 3├── index.zh-hans.md 4└── index.zh-hant.md Variables SCSS Utilice variables SCSS cuando sea posible; consulte también Variables SCSS.\n","date":"23 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/performance/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Minify","url":"/es/tags/minify/"},{"title":"Gzip","url":"/es/tags/gzip/"}],"timestamp":1658572248,"title":"Actuación"},{"authors":[],"categories":[{"title":"Events","url":"/es/categories/events/"}],"content":"En este artículo se enumeran algunos eventos personalizados emitidos por el tema; puede detectar esos eventos a través de detectores de eventos.\nEvento de modo de color HBS emitirá un evento personalizado llamado hbs:mode cuando se cambie el modo de color; es útil para ajustar el estilo de su widget al modo de color del tema. Los motores integrados de comentarios de Utterances y Giscus dependen de este evento para ajustar su tema a claro u oscuro.\n1document.addEventListener(\u0026#39;hbs:mode\u0026#39;, (e: CustomEvent) =\u0026gt; { 2 console.log(\u0026#39;mode changed: \u0026#39;, e.detail.mode); 3}); ","date":"23 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/events/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658568839,"title":"Eventos"},{"authors":[],"categories":[{"title":"SCSS","url":"/es/categories/scss/"}],"content":"Gracias a assets/main/scss/_variables.scss, tenemos la capacidad de cambiar las variables SCSS predeterminadas del tema y Bootstrap.\n¿Por qué variables SCSS? Aunque podemos anular el CSS a través de assets/main/scss/_custom.scss, esto eventualmente aumentará el tamaño del paquete de CSS; sin embargo, la variable SCSS no lo hace en la mayoría de los casos.\nPor ejemplo, hay una animación predeterminada para el logotipo al pasar el mouse.\n1.top-app-bar .logo:hover { 2 transform: rotate(-5deg) scale(1.1); 3} Puede desactivarlo mediante SCSS personalizado.\n1.top-app-bar { 2 .logo { 3 \u0026amp;:hover { 4 transform: none; 5 } 6 } 7} Pero el estilo anterior que no necesitamos todavía está presente en el paquete CSS, ya que simplemente lo anulamos con el SCSS personalizado.\n1.top-app-bar .logo:hover { 2 transform: none; 3} 4 5.top-app-bar .logo:hover { 6 transform: rotate(-5deg) scale(1.1); 7} Y las variables SCSS no generarán estilos no utilizados en el paquete CSS.\n1$logo-animation: false; Un tamaño de paquete CSS más pequeño significa un mejor rendimiento, por lo que recomendamos utilizar variables SCSS cuando sea posible.\nVariables SCSS de arranque Puede encontrar las variables SCSS integradas de Bootstrap en el código fuente y documentaciones oficiales.\nVariables SCSS del tema Paletas Palette Variable Blue $palette-blue Blue Gray $palette-blue-gray Brown $palette-brown Cyan $palette-cyan Green $palette-green Indigo $palette-indigo Orange $palette-orange Pink $palette-pink Purple $palette-purple Red $palette-red Teal $palette-teal Yello $palette-yellow Opciones Variable Default Value Description $code-select true Select \u0026lt;code\u0026gt; content on click, except code block. $logo-animation true Enable/Disable the default animation for logo. $table-hover true Table hoverable. $table-bordered true Bordered table. ","date":"23 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/scss-variables/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"SCSS Variables","url":"/es/tags/scss-variables/"}],"timestamp":1658568208,"title":"Variables SCSS"},{"authors":[],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"En este artículo, exploraremos algunos códigos cortos para texto, como alineación, transformación y selección.\nTransformación de texto texto en minúsculas. TEXTO EN MAYÚSCULAS. Texto en mayúscula. Alineación de texto Alinear el texto al inicio. Alinear el texto al centro. Alinear el texto hasta el final. Selección de texto Este párrafo quedará completamente seleccionado cuando el usuario haga clic en él. Este párrafo no será seleccionable cuando el usuario haga clic en él. ","date":"15 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/text/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Text","url":"/es/tags/text/"},{"title":"Text Alignment","url":"/es/tags/text-alignment/"},{"title":"Text Transform","url":"/es/tags/text-transform/"},{"title":"Text Selection","url":"/es/tags/text-selection/"}],"timestamp":1657818043,"title":"Códigos Cortos De Texto"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"Este artículo detallará cómo crear una imagen de Docker.\nPrincipio Utilice Hugo para crear el sitio y generar archivos estáticos. Utilice Nginx como servidor para manejar solicitudes. Archivo Docker Cree un Dockerfile en la raíz del sitio.\n1############### 2# Build Stage # 3############### 4FROM razonyang/hugo as builder 5 6WORKDIR /src 7COPY . /src 8 9ARG HUGO_ENV=production 10ENV HUGO_ENV=${HUGO_ENV} 11 12# Base URL 13ARG HUGO_BASEURL=/ 14ENV HUGO_BASEURL=${HUGO_BASEURL} 15 16# Module Proxy 17ARG HUGO_MODULE_PROXY= 18ENV HUGO_MODULE_PROXY=${HUGO_MODULE_PROXY} 19 20# NPM mirrors, such as https://registry.npmmirror.com 21ARG NPM_CONFIG_REGISTRY= 22ENV NPM_CONFIG_REGISTRY=${NPM_CONFIG_REGISTRY} 23 24# Install dependencies 25RUN npm install 26RUN npm install -g @fullhuman/postcss-purgecss rtlcss 27 28# Build site 29RUN hugo --minify --gc --enableGitInfo 30 31# Set the fallback 404 page if defaultContentLanguageInSubdir is enabled, please replace the `en` with your default language code. 32# RUN cp ./public/en/404.html ./public/404.html 33 34############### 35# Final Stage # 36############### 37FROM nginx 38COPY --from=builder /src/public /app 39COPY deploy/nginx/default.conf /etc/nginx/conf.d/default.conf Hay dos etapas para la construcción, una etapa de construcción y una etapa de lanzamiento. La etapa de lanzamiento contiene solo los archivos estáticos generados, manteniendo el tamaño de la imagen de Docker lo más pequeño posible. Si tiene defaultContentLanguageInSubdir habilitado, descomente y modifíquelo a pedido. El parámetro HUGO_BASEURL se usa para especificar el baseURL del sitio durante la compilación y generalmente se usa cuando baseURL es diferente de la configuración, por lo que puede eliminarlo usted mismo si no lo necesita. HUGO_MODULE_PROXY y NPM_CONFIG_REGISTRY son parámetros de compilación opcionales que se pueden eliminar si no son necesarios. Nginx Cree un deploy/nginx/default.conf en la raíz del sitio:\n1server { 2 listen 80; 3 listen [::]:80; 4 server_name localhost; 5 6 root /app; 7 8 location / { 9 index index.html index.htm; 10 } 11 12 location ~* ^/([^/]+) { 13 index index.html index.htm; 14 error_page 404 = @error; 15 } 16 17 error_page 404 /404.html; 18 location @error { 19 try_files /$1/404.html /404.html =404; 20 } 21} Construir 1$ docker build -t mysite \\ 2 --build-arg HUGO_BASEURL=https://example.com \\ 3 . mysite: el nombre de la imagen. HUGO_BASEURL: el baseURL. Para los usuarios ubicados en China continental, deben especificar HUGO_MODULE_PROXY y NPM_CONFIG_REGISTRY para crear la imagen de manera exitosa y rápida:\n1$ docker build -t mysite \\ 2 --build-arg HUGO_BASEURL=https://example.com \\ 3 --build-arg HUGO_MODULE_PROXY=https://goproxy.cn \\ 4 --build-arg NPM_CONFIG_REGISTRY=https://registry.npmmirror.com \\ 5 . Implementación Hay muchas formas de implementar imágenes de Docker, como docker run, k8s, etc. Este artículo solo explicará docker run.\nCorrer 1$ docker run \\ 2 -p 2333:80 \\ 3 --name mysite \\ 4 --restart=always \\ 5 mysite Para pruebas locales, debe cambiar el parámetro baseURL o el parámetro de compilación HUGO_BASEURL, p. http://localhost:2333.\nDetener 1$ docker stop mysite Comenzar 1$ docker start mysite Eliminar 1$ docker rm mysite ","date":"13 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/docker/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Docker","url":"/es/tags/docker/"},{"title":"Nginx","url":"/es/tags/nginx/"}],"timestamp":1657679429,"title":"Construyendo Una Imagen De Docker"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"Este artículo explica cómo implementar sitios en Páginas de GitHub usando GitHub Actions.\nFlujo de trabajo Cree .github/workflows/gh-pages.yml en la raíz del sitio.\n1name: GitHub Pages 2on: 3 push: 4 branches: 5 - main 6permissions: 7 contents: write 8jobs: 9 build-and-deploy: 10 concurrency: ci-${{ github.ref }} 11 runs-on: ubuntu-latest 12 steps: 13 - name: Checkout 🛎️ 14 uses: actions/checkout@v3 15 with: 16 submodules: true 17 fetch-depth: 0 18 19 - name: Setup Node 20 uses: actions/setup-node@v3 21 with: 22 node-version: \u0026#39;16\u0026#39; 23 24 - name: Cache dependencies 25 uses: actions/cache@v2 26 with: 27 path: ~/.npm 28 key: ${{ runner.os }}-node-${{ hashFiles(\u0026#39;**/package-lock.json\u0026#39;) }} 29 restore-keys: | 30 ${{ runner.os }}-node- 31 32 - name: Install dependencies 33 run: npm install 34 35 - name: Setup Hugo 36 uses: peaceiris/actions-hugo@v2 37 with: 38 hugo-version: \u0026#39;latest\u0026#39; 39 extended: true 40 41 - name: Build 42 run: hugo --minify --gc --enableGitInfo 43 44 - name: Deploy 🚀 45 uses: peaceiris/actions-gh-pages@v3 46 with: 47 github_token: ${{ secrets.GITHUB_TOKEN }} 48 publish_dir: ./public Ver también Flujo de trabajo de páginas de GitHub de plantilla inicial。\n","date":"13 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/github-pages/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"GitHub Pages","url":"/es/tags/github-pages/"},{"title":"GitHub Actions","url":"/es/tags/github-actions/"}],"timestamp":1657679423,"title":"Implementar en Páginas De GitHub"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"Este artículo le muestra cómo implementar su sitio en Páginas de Cloudflare.\nCreando un proyecto Comenzaremos creando un proyecto Git y completando la información adecuada.\nComando de compilación 1npm i \u0026amp;\u0026amp; hugo --gc --minify --enableGitInfo -b https://hbs-skeleton.pages.dev npm i es un acceso directo a npm install, que instala las dependencias utilizadas durante la construcción del sitio. -b https://hbs-skeleton.pages.dev especifica baseURL, reemplácelo usted mismo. También puede guardarlo en un archivo de configuración en lugar de especificarlo en el comando de compilación. Variables de entorno Nombre Valor HUGO_VERSION 0.147.9 NODE_VERSION 16 Página 404 Cloudflare es lo suficientemente inteligente como para utilizar las páginas 404 que mejor coinciden, incluso para sitios multilingües, y funciona sin configuraciones adicionales.\n","date":"12 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/cloudflare-pages/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Cloudflare Pages","url":"/es/tags/cloudflare-pages/"}],"timestamp":1657627584,"title":"Implementar en Páginas De Cloudflare"},{"authors":[],"categories":[{"title":"Deployment","url":"/es/categories/deployment/"}],"content":"Este artículo muestra cómo implementar su sitio en Netlificar.\nConfiguración de Netlify Cree un netlify.toml en la raíz del sitio:\n1[build] 2 publish = \u0026#34;public\u0026#34; 3 4[build.environment] 5 NODE_VERSION = \u0026#34;17.6.0\u0026#34; 6 HUGO_VERSION = \u0026#34;0.147.9\u0026#34; 7 HUGO_ENABLEGITINFO = \u0026#34;true\u0026#34; 8 GO_VERSION = \u0026#34;1.17.7\u0026#34; 9 10[context.production] 11 command = \u0026#34;npm install \u0026amp;\u0026amp; hugo --minify\u0026#34; 12 13[context.production.environment] 14 HUGO_ENV = \u0026#34;production\u0026#34; 15 16[[headers]] 17 for = \u0026#34;/*\u0026#34; 18 [headers.values] 19 Referrer-Policy = \u0026#34;strict-origin-when-cross-origin\u0026#34; 20 X-Content-Type-Options = \u0026#34;nosniff\u0026#34; 21 X-Frame-Options = \u0026#34;deny\u0026#34; 22 X-XSS-Protection = \u0026#34;1; mode=block\u0026#34; 23 24[[redirects]] 25 from = \u0026#34;/:lang/*\u0026#34; 26 to = \u0026#34;/:lang/404.html\u0026#34; 27 status = 404 28 29[[redirects]] 30 from = \u0026#34;/*\u0026#34; 31 to = \u0026#34;/en/404.html\u0026#34; # Replace the \u0026#34;en\u0026#34; to your default language code if \u0026#34;defaultContentLanguageInSubdir\u0026#34; is enabled, otherwise use \u0026#34;/404.html\u0026#34; instead. 32 status = 404 Véase también Configuración de Netlify de plantilla inicial.\n","date":"12 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/deployment/netlify/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/es/tags/netlify/"}],"timestamp":1657606849,"title":"Implementar en Netlify"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Los usuarios que han utilizado el botón bloquear copia no son ajenos al Snackbar, que informa al usuario de los resultados de la ejecución de la aplicación. Este artículo dará un ejemplo de cómo utilizar Snackbar para satisfacer la necesidad de interacción personalizada del usuario.\n##API\nFunción Descripción show(body: String, duration: number = 2000) body: el cuerpo del mensaje, duration: la duración del mensaje, en milisegundos. Exportar Gracias a assets/main/js/custom.ts, podemos personalizar el JavaScript, aquí exportamos todo el Snackbar como una variable global:\n1import Snackbar from \u0026#39;js/snackbar\u0026#39;; 2 3// Show a message via JavaScript. 4Snackbar.show(\u0026#39;a message with 3s duration from pure JavaScript\u0026#39;, 3000) 5 6// Export the Snackbar as a global variable, so that you can send a message from a HTML. 7// Such as: \u0026lt;button onclick=\u0026#34;Snackbar.show(\u0026#39;message from a button\u0026#39;)\u0026#34;\u0026gt;Snackbar\u0026lt;/button\u0026gt;. 8const _global = (window || global ) as any 9_global.Snackbar = Snackbar Uso Luego podemos llamarlo en HTML o JavaScript:\n1\u0026lt;button onclick=\u0026#34;Snackbar.show(\u0026#39;message from a button\u0026#39;)\u0026#34;\u0026gt;Snackbar\u0026lt;/button\u0026gt; Consulte Manos para saber cómo inyectar HTML personalizado.\n","date":"2 de julio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/snackbar/","series":[{"title":"Documentation","url":"/es/series/documentation/"}],"smallImg":"","tags":[{"title":"Snackbar","url":"/es/tags/snackbar/"},{"title":"HTML","url":"/es/tags/html/"},{"title":"JavaScript","url":"/es/tags/javascript/"}],"timestamp":1656767677,"title":"Barra De Snacks"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Este artículo explica cómo actualizar el tema correctamente.\nVersiones Antes de actualizar, es necesario introducir qué es una versión. Además de las versiones estables relativas enumeradas en Lanzamientos, puede usar una rama como master, develop, o incluso elegir un determinado commit.\nEste artículo utilizará el marcador de posición [version] para representar la versión, simplemente reemplácelo con la versión a la que desea actualizar.\nActualizar Elija el paso de actualización según el método de instalación: Submódulo Git y Módulo Hugo.\nTenga en cuenta que no importa qué método de instalación utilice, siempre terminará necesitando extraer y actualizar las dependencias a través de hugo mod npm pack y npm update.\nDependencias adicionales Si tiene la intención de agregar dependencias adicionales, debe definirlas en package.hugo.json en lugar de package.json. Esto se debe a que hugo mod npm pack siempre anulará package.json, que fusiona package.hugo.json del tema y package.hugo.json de su sitio.\nSubmódulo de Git 1$ cd themes/hugo-theme-bootstrap 2$ git fetch 3$ git checkout [version] 4$ cd ../../ 5$ hugo mod npm pack 6$ npm update 7$ git add themes/hugo-theme-bootstrap package.hugo.json package.json package-lock.json 8$ git commit -m \u0026#39;Bump theme to [version]\u0026#39; git fetch extrae la última rama y la información de etiquetas del repositorio de temas. git checkout [version] cambia a la versión [version]. hugo mod npm pack y npm update para extraer y actualizar las últimas dependencias del tema. Módulo Hugo 1$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version] 2$ hugo mod tidy 3$ hugo mod npm pack 4$ npm update 5$ git add go.mod go.sum package.hugo.json package.json package-lock.json 6$ git commit -m \u0026#39;Bump theme to [version]\u0026#39; hugo mod tidy limpia cualquier dependencia redundante. hugo mod npm pack y npm update extraen y actualizan las últimas dependencias del tema. ","date":"25 de junio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/upgradation/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1656166502,"title":"Actualización"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Migration","url":"/es/categories/migration/"}],"content":"Realice un seguimiento y revise los cambios en la documentación y los archivos fuente del tema para ayudarle a migrar de v0.* a v1.\nSi no está seguro de cómo actualizar, consulte la guía Actualización.\n##v1.0\nEl diseño de interfaz de usuario anterior está congelado en la rama v0 que solo acepta correcciones de errores. Puedes seguir usando el diseño de interfaz de usuario anterior con esa rama.\nDependencias Bootstrap pasó de v5.1 a v5.2. interfaz de usuario Se eliminó el panel de configuración de la barra superior de aplicaciones. Se agregaron los enlaces sociales en la barra superior de la aplicación. Se colocó el interruptor de navegación de Documentos en la barra superior de aplicaciones en una pantalla pequeña. Diseños Se eliminó layouts/_default/archive.html, reemplace layout = archive con layout = archives al frente. Renombrado layouts/partials/docs/catalog.html a layouts/partials/docs/nav.html. SCSS $variable-prefix en desuso, utilice $prefix en su lugar. Utilice variables CSS integradas en Bootstrap en lugar de variables CSS definidas por temas. Documentos BREAKING CHANGE usa navWeight en lugar de weight para ordenar páginas en la navegación de documentos. Códigos cortos Código corto de alerta BREAKING CHANGE cambia la sintaxis de alert, ver también Sintaxis de código corto de alerta. ","date":"20 de junio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/migration/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1655718391,"title":"Migrando a V1"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"El shortcode code-toggle genera bloques de código de varios formatos de acuerdo con el código de configuración de cualquier formato compatible.\nFormatos JSON, TOML y YAML son compatibles.\nUso 1{{\u0026lt; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Con un nombre de archivo:\n1{{\u0026lt; filename=\u0026#34;config\u0026#34; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Ejemplo 1{{\u0026lt; code-toggle filename=\u0026#34;params\u0026#34; \u0026gt;}} 2{ 3 \u0026#34;logo\u0026#34;: \u0026#34;/images/logo.png\u0026#34;, 4 \u0026#34;customCSS\u0026#34;: [\u0026#34;foo.css\u0026#34;, \u0026#34;bar.css\u0026#34;], 5 \u0026#34;codeBlock\u0026#34;: { 6 \u0026#34;maxLines\u0026#34;: 10 7 } 8} 9{{\u0026lt;/ code-toggle \u0026gt;}} TOML YAML JSON params.toml\n1customCSS = [\u0026#39;foo.css\u0026#39;, \u0026#39;bar.css\u0026#39;] 2logotipo = \u0026#39;/imagenes/logotipo.png\u0026#39; 3[\u0026#39;bloque de código\u0026#39;] 4 maxLines = 10 params.yaml\n1bloque de código: 2 maxLines: 10 3customCSS: 4- foo.css 5- bar.css 6logotipo: /imagenes/logotipo.png params.json\n1{ 2 \u0026#34;bloque de código\u0026#34;: { 3 \u0026#34;maxLines\u0026#34;: 10 4 }, 5 \u0026#34;customCSS\u0026#34;: [ 6 \u0026#34;foo.css\u0026#34;, 7 \u0026#34;bar.css\u0026#34; 8 ], 9 \u0026#34;logotipo\u0026#34;: \u0026#34;/imagenes/logotipo.png\u0026#34; 10} ","date":"13 de junio de 2022","img":"/docs/shortcodes/code-toggle/featured.png","lang":"es","langName":"Español","largeImg":"/docs/shortcodes/code-toggle/featured_hu_6ff21a143d433045.png","permalink":"/es/docs/shortcodes/code-toggle/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/shortcodes/code-toggle/featured_hu_e04768398376e8c4.png","tags":[{"title":"JSON","url":"/es/tags/json/"},{"title":"YAML","url":"/es/tags/yaml/"},{"title":"TOML","url":"/es/tags/toml/"}],"timestamp":1655110468,"title":"Alternar Código"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Introduction","url":"/es/categories/introduction/"}],"content":" Metas Rendimiento Experiencia de usuario amigable SEO Características pipas hugo: se utiliza para generar activos CSS y JS. PurgeCSS: elimina el CSS no utilizado. Flexibles y configurables. Experiencia de usuario rápida y buena: la puntuación de Estadísticas de PageSpeed ​​de Google es superior a 95. Soporte RTL: Sitio de demostración árabe. Construido sobre Arranque 5. Iconos de FontAwesome. Responsivo. PWA, también conocidas como aplicaciones web progresivas. Varias paletas: blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow. Un Diseño de documentos para publicar documentación de proyectos, notas, jardines digitales, zettelkastens, etc. Modo claro/oscuro. Cambiador de tamaño de fuente. Multilingüe (I18N). Búsqueda local. Búsqueda de documentos. Fijar publicaciones. Menú de pie de página. Panel de bloque de código: copie el código, número de línea, ajuste de línea y expanda. -Alternar código Pan rallado. Archivo. Visor de imágenes. Procesamiento de imágenes: cambiar el tamaño y alinear imágenes. Carga diferida de recursos: image y iframe. Resaltado de sintaxis. Widget de recompensa, también conocido como Buy Me a Coffee: se admite cualquier plataforma que admita códigos QR. Tabla de contenido. Comentarios: Disqus, Utterances, Giscus y Staticman se pueden usar de forma inmediata, también se pueden integrar con otros servicios de comentarios. Activos personalizados: CSS y JS personalizados. Manos: brinda la posibilidad de agregar código personalizado en la página. Enlaces sociales. Varios códigos cortos. Tarjetas de Twitter y Open Graph. Licencia Creative Commons. Formulario de contacto. Numerizar encabezados automáticamente. ","date":"13 de junio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/introduction/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Features","url":"/es/tags/features/"}],"timestamp":1655109129,"title":"Introducción"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Asegúrese de cumplir con los requisitos previos antes de instalar el tema.\nConfiguración HBS requiere que se establezcan las siguientes configuraciones.\nTOML YAML JSON config.toml\n1[build] 2 writeStats = true 3[taxonomies] 4 author = \u0026#39;authors\u0026#39; 5 category = \u0026#39;categories\u0026#39; 6 series = \u0026#39;series\u0026#39; 7 tag = \u0026#39;tags\u0026#39; config.yaml\n1build: 2 writeStats: true 3taxonomies: 4 author: authors 5 category: categories 6 series: series 7 tag: tags config.json\n1{ 2 \u0026#34;build\u0026#34;: { 3 \u0026#34;writeStats\u0026#34;: true 4 }, 5 \u0026#34;taxonomies\u0026#34;: { 6 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34;, 7 \u0026#34;category\u0026#34;: \u0026#34;categories\u0026#34;, 8 \u0026#34;series\u0026#34;: \u0026#34;series\u0026#34;, 9 \u0026#34;tag\u0026#34;: \u0026#34;tags\u0026#34; 10 } 11} Herramientas de construcción Tool Version Description Git Version Control Systems Hugo extended version 0.97.0 or above. Node.js and NPM NodeJS 16 or above used for installing CSS and JS dependencies, and building the assets. Go 1.12 or above required only when installed as a Hugo Module. Recomendamos utilizar la última versión de esas herramientas.\n","date":"13 de junio de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/prerequisites/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Prerequisites","url":"/es/tags/prerequisites/"}],"timestamp":1655109129,"title":"Requisitos Previos"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Este artículo muestra cómo utilizar el código corto gallery.\nUso 1{{\u0026lt; gallery images=\u0026#34;images/foo.png,images/bar.png\u0026#34; \u0026gt;}} ","date":"25 de marzo de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/gallery/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Gallery","url":"/es/tags/gallery/"}],"timestamp":1648166400,"title":"Código Corto De La Galería"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Troubleshooting","url":"/es/categories/troubleshooting/"}],"content":"Este artículo enumera algunos problemas comunes para que pueda resolverlos fácilmente.\nCSS renderizado incorrectamente El problema probablemente se debe a postcss, HBS necesita configurar la siguiente configuración, postcss confía en el archivo hugo_stats.json para purgar el CSS no utilizado.\n1[build] 2 writeStats = true js.Build: No se pudieron resolver las dependencias 1Start building sites … 2hugo v0.94.0-63B23660+extended linux/amd64 BuildDate=2022-03-10T09:46:36Z VendorInfo=gohugoio 3ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 4ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 5ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 6ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 7ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 8ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-solid-svg-icons\u0026#34; 9ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-regular-svg-icons\u0026#34; 10ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;@fortawesome/free-brands-svg-icons\u0026#34; 11ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-routing\u0026#34; 12ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-strategies\u0026#34; 13ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-cacheable-response\u0026#34; 14ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-expiration\u0026#34; 15ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;workbox-precaching\u0026#34; 16ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:21\u0026#34;: Could not resolve \u0026#34;mustache\u0026#34; 17ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:17\u0026#34;: Could not resolve \u0026#34;mark.js/dist/mark.js\u0026#34; 18ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 19ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 20ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 21ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 22ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 23ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 24ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 25ERROR 2022/03/19 14:03:50 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 26ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 27ERROR 2022/03/19 14:03:50 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 28ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/offcanvas\u0026#34; 29ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/modal\u0026#34; 30ERROR 2022/03/19 14:03:51 js.Build failed: Could not resolve \u0026#34;bootstrap/js/src/tab\u0026#34; 31ERROR 2022/03/19 14:03:51 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/collapse/collapse.ts:1:38\u0026#34;: Could not resolve \u0026#34;bootstrap/js/src/collapse\u0026#34; 32ERROR 2022/03/19 14:03:51 js.Build failed: \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/js/toc/index.ts:1:27\u0026#34;: Could not resolve \u0026#34;bootstrap/js/dist/offcanvas\u0026#34; 33ERROR 2022/03/19 14:03:51 TOCSS: failed to transform \u0026#34;viewer/scss/index.scss\u0026#34; (text/x-scss): SCSS processing failed: file \u0026#34;stdin\u0026#34;, line 1, col 1: File to import not found or unreadable: viewerjs/dist/viewer. 34ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;main/js/bundle.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;bootstrap/js/src/dropdown\u0026#34; 35ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;icons/index.js\u0026#34; (application/javascript): Could not resolve \u0026#34;@fortawesome/fontawesome-svg-core\u0026#34; 36ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;service-worker/bundle.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;workbox-core\u0026#34; 37ERROR 2022/03/19 14:03:51 JSBUILD: failed to transform \u0026#34;viewer/js/index.ts\u0026#34; (application/typescript): Could not resolve \u0026#34;viewerjs\u0026#34; 38Error: Error building site: JSBUILD: failed to transform \u0026#34;search/index.ts\u0026#34; (application/typescript): \u0026#34;/home/razonyang/Projects/razonyang/hugo-theme-bootstrap/assets/search/search.ts:1:17\u0026#34;: Could not resolve \u0026#34;fuse.js\u0026#34; Se debe a la falta de dependencias de CSS y JS:\n1$ hugo mod npm pack 2$ npm install 3$ hugo server ","date":"19 de marzo de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/troubleshooting/","series":[],"smallImg":"","tags":[],"timestamp":1647668801,"title":"Solución De Problemas"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Este artículo se refiere al método de instalación moderno y actualizado para instalar el tema localmente como módulo Hugo.\nProxy (opcional) Si se encuentra en China continental sin VPN, la descarga del módulo Hugo puede fallar.\nHay dos servidores proxy para esto: GOPROXY.CN y GOPROXY.IO.\n1$ export HUGO_MODULE_PROXY=https://goproxy.cn Tenga en cuenta que Hugo no respeta la var env GOPROXY, utilice HUGO_MODULE_PROXY en su lugar.\nTambién puede configurar module.proxy en lugar de usar env var.\nTOML YAML JSON config.toml\n1[\u0026#39;módulo\u0026#39;] 2 proxy = \u0026#39;https://goproxy.cn\u0026#39; config.yaml\n1módulo: 2 proxy: https://goproxy.cn config.json\n1{ 2 \u0026#34;módulo\u0026#34;: { 3 \u0026#34;proxy\u0026#34;: \u0026#34;https://goproxy.cn\u0026#34; 4 } 5} Instalar un nuevo sitio desde cero Utilice plantilla inicial para su nuevo sitio.\nInstalar en un sitio existente Convierta su sitio existente en un módulo Hugo 1$ cd my-blog 2$ hugo mod init github.com/me/my-blog Declarar el módulo hugo-theme-bootstrap como una dependencia del sitio 1$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version] El repositorio `@@P0@@, branches or even commits.\nReplace [versión] with master for getting latest changes.\nCopy example site content into your site Clone the hugo-theme-bootstrap-skeleton en un directorio temporal: 1$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton Copie la configuración y el contenido del sitio de ejemplo en su sitio: 1$ mkdir config 2$ cp -a /tmp/hbs-skeleton/config/* ./config 3$ cp -r /tmp/hbs-skeleton/content/* ./content 4$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes 5$ cp -r /tmp/hbs-skeleton/static/* ./static 6$ cp -r /tmp/hbs-skeleton/assets/* ./assets Elimina nuevamente el repositorio de tu directorio temporal: 1$ rm -rf /tmp/hbs-skeleton/ Incorporar dependencias a través de npm Utilice node package manager npm para generar dependencias para este tema: 1$ hugo mod npm pack 2$ npm install Vista previa de su sitio Inicie el servidor web integrado de hugo y luego navegue hasta http://localhost:1313/.\n1$ hugo server ","date":"26 de febrero de 2022","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/installation/hugo-module/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/es/tags/installation/"},{"title":"Upgrade","url":"/es/tags/upgrade/"},{"title":"Hugo Module","url":"/es/tags/hugo-module/"}],"timestamp":1645888239,"title":"Instalar a Través Del Módulo Hugo"},{"authors":[{"title":"Andreas Deininger","url":"/es/authors/andreas-deininger/"},{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Layouts","url":"/es/categories/layouts/"}],"content":"En este artículo, exploraremos el diseño docs, que se puede utilizar para escribir documentación del proyecto, notas personales y más.\nSi va a utilizar el diseño docs en otras secciones(notes), eche un vistazo a la página Contenido.\nDiseño El diseño docs consta de tres secciones, de principio a fin: barra de navegación del documento, contenido del documento y barra lateral.\nEstructura de contenido 1$ tree content/docs 2├── _index.md 3├── installation 4│ ├── _index.md 5│ ├── linux 6│ │ ├── _index.md 7│ │ ├── archlinux 8│ │ │ └── index.md 9│ │ └── ubuntu 10│ │ └── index.md 11│ └── windows 12│ └── index.md 13└── introduction 14 └── index.md Como se muestra en la figura, este ejemplo muestra cómo organizar una navegación de documentos de varios niveles.\nQue contenga _index.md se convertirá en una Sección. Que contenga index.md se convertirá en una página. Navegación Título Generalmente, se usará title para mostrar en la barra de navegación, pero a veces el título es demasiado largo para empeorar las cosas. En este momento, podemos modificar el texto del enlace que se muestra en la navegación a través de linkTitle.\nTOML YAML JSON 1linkTitle = \u0026#39;Windows\u0026#39; 2title = \u0026#39;Instalar en Windows\u0026#39; 1linkTitle: Windows 2title: Instalar en Windows 1{ 2 \u0026#34;linkTitle\u0026#34;: \u0026#34;Windows\u0026#34;, 3 \u0026#34;title\u0026#34;: \u0026#34;Instalar en Windows\u0026#34; 4} Icono Además, proporcionamos un parámetro llamado linkTitleIcon para configurar el icono en el lado izquierdo del título.\nTOML YAML JSON 1linkTitleIcon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-columns fa-fw\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 1linkTitleIcon: \u0026lt;i class=\u0026#34;fas fa-columns fa-fw\u0026#34;\u0026gt;\u0026lt;/i\u0026gt; 1{ 2 \u0026#34;linkTitleIcon\u0026#34;: \u0026#34;\\u003ci class=\\\u0026#34;fas fa-columns fa-fw\\\u0026#34;\\u003e\\u003c/i\\u003e\u0026#34; 3} Peso Clasificamos los documentos según el parámetro navWeight, el peso superior tiene mayor prioridad. Para los documentos sin \u0026rsquo;navWeight\u0026rsquo; especificado, se ordenan alfabéticamente por title.\nTOML YAML JSON 1navWeight = 1000 1navWeight: 1000 1{ 2 \u0026#34;navWeight\u0026#34;: 1000 3} Enlaces externos A veces necesitamos vincular el artículo a un sitio externo. En este momento, se puede utilizar redirect y luego se redireccionará automáticamente al enlace externo especificado.\nTOML YAML JSON 1redirect = \u0026#39;https://github.com/razonyang/hugo-theme-bootstrap-skeleton\u0026#39; 1redirect: https://github.com/razonyang/hugo-theme-bootstrap-skeleton 1{ 2 \u0026#34;redirect\u0026#34;: \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap-skeleton\u0026#34; 3} Barra lateral Aparatos De forma predeterminada, la barra lateral solo contiene la tabla de contenido, pero puedes agregar widgets a través de gancho.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} 2{{- partial \u0026#34;sidebar/recent-posts\u0026#34; . }} ","date":"12 de enero de 2022","img":"/docs/layouts/docs/featured.png","lang":"es","langName":"Español","largeImg":"/docs/layouts/docs/featured_hu_ec4c91b03483f271.png","permalink":"/es/docs/layouts/docs/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/layouts/docs/featured_hu_947b7abb991171d8.png","tags":[],"timestamp":1642013794,"title":"Diseño De Documentos"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Menu","url":"/es/categories/menu/"}],"content":"Predefinimos dos tipos de menús: main y footer, representan los menús de la barra superior de aplicaciones y los menús de pie de página, respectivamente. Este artículo presentará brevemente cómo utilizar los menús.\nPropiedades de entrada de menú Propiedad Tipo Descripción name Cadena El nombre del menú. identifier Cadena El ID del menú. weight Número El peso del menú que se utilizó para ordenar en orden ascendente. parent Cadena El identifier de la entrada del menú principal. url Cadena La URL del menú. pre Cadena La cadena inicial antes del nombre del menú. post Cadena La cadena final después del nombre del menú. params Objeto Parámetros del menú. params.divider Booleano true significa divisor. params.icon Cadena El icono HTML. params.description Cadena La descripción solo para los menús desplegables de la barra superior de aplicaciones. Véase también Propiedades de entrada de menú.\nUso Configuración El archivo de configuración del menú se encuentra en config/_default/menu.toml de forma predeterminada.\nTomemos el menú main como ejemplo:\n1[[main]] 2 identifier = \u0026#34;home\u0026#34; 3 name = \u0026#34;Home\u0026#34; 4 weight = 1 5 url = \u0026#34;https://vandenboom.online/\u0026#34; 6 [main.params] 7 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-home\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 8[[main]] 9 identifier = \u0026#34;blog\u0026#34; 10 name = \u0026#34;Blog\u0026#34; 11 weight = 2 12 [main.params] 13 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-blog\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 14[[main]] 15 name = \u0026#34;Support\u0026#34; 16 identifier = \u0026#34;support\u0026#34; 17 weight = 40 18 [main.params] 19 description = \u0026#39;The HBS Support Community\u0026#39; 20 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-info-circle\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 21[[main]] 22 name = \u0026#34;Repository\u0026#34; 23 identifier = \u0026#34;repository\u0026#34; 24 parent = \u0026#34;support\u0026#34; 25 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap\u0026#34; 26 weight = 1 27 [main.params] 28 icon = \u0026#39;\u0026lt;i class=\u0026#34;fab fa-fw fa-github text-primary\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 29[[main]] 30 name = \u0026#34;Discussions\u0026#34; 31 identifier = \u0026#34;discussions\u0026#34; 32 parent = \u0026#34;support\u0026#34; 33 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/discussions/new\u0026#34; 34 weight = 2 35 [main.params] 36 description = \u0026#34;Ask and discuss questions with others.\u0026#34; 37 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-comments text-success\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 38[[main]] 39 name = \u0026#34;Features Request\u0026#34; 40 identifier = \u0026#34;feature-request\u0026#34; 41 parent = \u0026#34;support\u0026#34; 42 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/issues/new?template=feature_request.yml\u0026#34; 43 weight = 3 44 [main.params] 45 description = \u0026#34;Suggest new or updated features.\u0026#34; 46 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-lightbulb text-warning\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 47[[main]] 48 name = \u0026#34;Bug Report\u0026#34; 49 identifier = \u0026#34;bug-report\u0026#34; 50 parent = \u0026#34;support\u0026#34; 51 url = \u0026#34;https://github.com/razonyang/hugo-theme-bootstrap/issues/new?template=bug_report.yml\u0026#34; 52 weight = 3 53 [main.params] 54 description = \u0026#34;Tell us about a bug or issue.\u0026#34; 55 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-bug text-danger\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 56[[main]] 57 parent = \u0026#34;support\u0026#34; 58 weight = 4 59 [main.params] 60 divider = true Consulte Iconos para importar íconos y configurar el color del ícono.\nAsunto frontal También podemos configurar el menú a través del inicio de la página.\n1[menu.main] 2 parent = \u0026#34;support\u0026#34; 3 weight = 6 4[menu.footer] 5 parent = \u0026#34;support\u0026#34; 6 weight = 6 7 [menu.footer.params] 8 icon = \u0026#39;\u0026lt;i class=\u0026#34;fas fa-fw fa-question-circle\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; El fragmento de código agrega la página al menú main y footer.\nNo es necesario especificar los parámetros url y name.\n","date":"16 de diciembre de 2021","img":"/docs/configuration/menu/featured.png","lang":"es","langName":"Español","largeImg":"/docs/configuration/menu/featured_hu_b8ce76cf729f474.png","permalink":"/es/docs/configuration/menu/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/configuration/menu/featured_hu_f77029d9e49e0c3a.png","tags":[{"title":"Main Menu","url":"/es/tags/main-menu/"},{"title":"Footer Menu","url":"/es/tags/footer-menu/"}],"timestamp":1639646720,"title":"Menú"},{"authors":[],"categories":[],"content":"La plantilla inicial para novatos.\n","date":"16 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/installation/starter-template/","series":[],"smallImg":"","tags":[],"timestamp":1639646720,"title":"Plantilla De Inicio"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"FAQ","url":"/es/categories/faq/"}],"content":"La página Preguntas frecuentes es una colección de preguntas frecuentes.\nRequisitos previos Necesitamos crear una página llamada faq/index.md en el directorio content.\n1+++ 2title = \u0026#34;Frequently Asked Questions\u0026#34; 3layout = \u0026#34;faq\u0026#34; 4+++ Datos Los datos se almacenan en el directorio data, la estructura del directorio es la siguiente:\n1data 2 /en 3 /faq 4 foo.json 5 bar.json 6 /zh-cn 7 /faq 8 foo.json 9 bar.json Como puedes ver, clasificamos las preguntas según su idioma. Y cada archivo representa un grupo de preguntas, que tiene el mismo formato de la siguiente manera:\n1{ 2 \u0026#34;title\u0026#34;: \u0026#34;The group title\u0026#34;, 3 \u0026#34;weight\u0026#34;: 1, 4 \u0026#34;questions\u0026#34;: [ 5 { 6 \u0026#34;question\u0026#34;: \u0026#34;The question\u0026#34;, 7 \u0026#34;answer\u0026#34;: \u0026#34;The answer\u0026#34; 8 } 9 ] 10} El parámetro weight se utiliza para ordenar los grupos en orden ascendente. ","date":"7 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/layouts/faq/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638884803,"title":"Diseño De Preguntas Frecuentes"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":" Secciones principales El parámetro mainSections se utiliza para filtrar páginas; el valor predeterminado es [\u0026quot;posts\u0026quot;, \u0026quot;docs\u0026quot;].\n1mainSections = [\u0026#34;blog\u0026#34;, \u0026#34;posts\u0026#34;, \u0026#34;docs\u0026#34;, \u0026#34;notes\u0026#34;] Asunto frontal Front Matter es el lugar donde colocamos los metadatos y parámetros de la página, como el título, la fecha, etc.\nFormatos Hugo admite tres formatos de portada: YAML, TOML y JSON.\nTOML: identificado abriendo y cerrando +++. YAML: identificado abriendo y cerrando ---. JSON: un único objeto JSON rodeado por { y }, seguido de una nueva línea. Tomemos TOML como ejemplo:\n1+++ 2title = \u0026#39;Hello world!\u0026#39; 3+++ Véase también Parámetros de página y Materia frontal de Hugo.\nTipos de contenido Es posible que desee utilizar el diseño docs en otras secciones en lugar de /docs, como /notes. Es fácil hacerlo configurando type = \u0026quot;docs\u0026quot; en la portada.\nArquetipos También podemos crear un arquetipo para notes, dejemos que Hugo se encargue del type.\n1$ cp themes/hugo-theme-bootstrap/archetypes/default.md archetypes/notes.md Y el anexo type = \u0026quot;docs\u0026quot; en la portada de archetypes/notes.md. Ahora, hugo new notes/blah-blah-blah copiará el contenido de archetypes/notes.md a tus nuevas notas.\nDe manera similar, también puedes personalizar los arquetipos para posts, docs, etc.\nEscribe nuevos artículos Supongamos que el idioma predeterminado es en.\n1$ hugo new posts/new-post/index.md El comando anterior crea una nueva publicación escrita en inglés. Del mismo modo, podemos crear un post escrito en chino simplificado:\n1$ hugo new posts/new-post/index.zh-cn.md Recuerde que las publicaciones creadas generalmente se encuentran en estado de borrador. Deberá especificar el parámetro -D del comando hugo server para obtener una vista previa. De manera similar, debe cambiar el parámetro draft a false o eliminar el parámetro draft si desea publicar el artículo.\nOrden de selección de resúmenes Si description no está vacío, entonces se usará; para usar resúmenes todo el tiempo, debe configurar post.excerpt como cadena vacía explícitamente. División manual mediante \u0026lt;!\u0026ndash;more\u0026ndash;\u0026gt;. Si summary en la portada no está vacío, entonces se seleccionará summary. El texto del contenido será cortado por post.excerptMaxLength y formateado en texto plano o HTML cuando post.plainifyExcerpt = true. 1[post] 2 # excerptMaxLength = 120 3 # copyright = false # Whether to display copyright section on each post. 4 # plainifyExcerpt = false # Format excerpt in HTML if false. Orden de selección de imágenes destacadas Se prefiere el images en el tema inicial. Recursos de imágenes de página que coincidan con el patrón *feature*. Como posts/my-page/feature.png, posts/my-page/featured-sample.jpg. La imagen destacada no aparece encima del contenido de forma predeterminada; deberá activar esta función mediante el siguiente parámetro.\nTOML YAML JSON config/_default/params.toml\n1[post] 2 featuredImage = true config/_default/params.yaml\n1post: 2 featuredImage: true config/_default/params.json\n1{ 2 \u0026#34;post\u0026#34;: { 3 \u0026#34;featuredImage\u0026#34;: true 4 } 5} Orden de selección de miniaturas Se prefiere el images en el tema inicial. Recursos de imágenes de página que coincidan con los patrones del nombre de archivo: *feature*, *cover* y *thumbnail*. Como posts/my-page/feature.png, posts/my-page/thumnail.jpg. Los recursos de imágenes de la página cambiarán de tamaño a varias versiones más pequeñas para adaptarse a los dispositivos de los usuarios para ahorrar ancho de banda.\nFijar publicaciones Puede fijar publicaciones en la página de inicio configurando pinned como true en la portada.\n1+++ 2title = \u0026#34;Pinned Post\u0026#34; 3pinned = true 4pinnedWeight = 100 5+++ Si hay varias publicaciones fijadas, se ordenan por pinnedWeight en orden descendente.\n1pinnedPost = false # Disable pinned posts globally. 2pinnedPostCount = 2 # The number of pinned posts shown on home page. Carrusel Mostrando publicaciones en carrusel.\n1+++ 2carousel = true 3+++ Autores HBS apoya la taxonomía de los autores. En primer lugar, deberá habilitarlo estableciendo la siguiente configuración.\nTOML YAML JSON config.toml\n1[taxonomies] 2 author = \u0026#39;authors\u0026#39; config.yaml\n1taxonomies: 2 author: authors config.json\n1{ 2 \u0026#34;taxonomies\u0026#34;: { 3 \u0026#34;author\u0026#34;: \u0026#34;authors\u0026#34; 4 } 5} Y luego define el authors en tus publicaciones.\n1+++ 2authors = [ 3 \u0026#34;Foo\u0026#34;, 4 \u0026#34;Bar\u0026#34; 5] 6+++ Ahora, los autores estarán presentes en las meta taxonomías y en la barra lateral de la publicación.\nFinalmente, es posible que necesitemos presentar al autor con más detalle. Tome Foo como ejemplo, simplemente cree una página con el siguiente contenido y guárdela como /content/authors/foo/index.md.\n1--- 2title: Razon Yang 3description: Gopher, PHPer, Full Stack Engineer. 4social: 5 github: razonyang 6 twitter: razonyang 7--- title: el nombre para mostrar del autor. description: La introducción. social: Enlaces sociales. La imagen del autor debe colocarse en la misma carpeta con el patrón avatar*, como /content/authors/foo/avatar.png. Si no hay avatar, social.email se utilizará para generar el avatar de Gravatar.\nA continuación Ajustar configuración Menú Mira y siente ","date":"4 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/content/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Authoring","url":"/es/tags/authoring/"},{"title":"Articles","url":"/es/tags/articles/"}],"timestamp":1638585819,"title":"Agregar Contenido"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Este artículo se refiere al método de instalación tradicional de clonar el tema localmente como submódulo Git. Si bien este método de instalación todavía se usa ampliamente, recomendamos instalar el tema como Módulo Hugo.\nCrear un nuevo sitio desde cero 1$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton myblog 2$ cd myblog 3$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap 4$ sed -i \u0026#34;s/theme:.*/theme: hugo-theme-bootstrap/g\u0026#34; config/_default/config.yaml 5$ rm go.mod go.sum 6$ hugo mod npm pack 7$ npm install 8$ hugo server Si estás usando Windows, usa xcopy .\\themes\\hugo-theme-bootstrap\\exampleSite /E en su lugar.\nsed reemplaza theme: github.com/razonyang/hugo-theme-bootstrap con theme: hugo-theme-bootstrap.\nInstalar en un sitio existente 1$ cd myblog 2$ git submodule add https://github.com/razonyang/hugo-theme-bootstrap themes/hugo-theme-bootstrap 3$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton 4$ mkdir config 5$ cp -a /tmp/hbs-skeleton/config/* ./config 6$ cp -r /tmp/hbs-skeleton/content/* ./content 7$ cp -r /tmp/hbs-skeleton/archetypes/* ./archetypes 8$ cp -r /tmp/hbs-skeleton/static/* ./static 9$ cp -r /tmp/hbs-skeleton/assets/* ./assets 10$ sed -i \u0026#34;s/theme:.*/theme: hugo-theme-bootstrap/g\u0026#34; config/_default/config.yaml 11$ hugo mod npm pack 12$ npm install 13$ hugo server Si está haciendo un clon nuevo, necesitará actualizar su submódulo a través de git submodule update --init --recursive o clonarlo con el submódulo git clone --recursive \u0026lt;repo\u0026gt;.\n","date":"4 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/getting-started/installation/git-submodule/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/es/tags/installation/"},{"title":"Upgrade","url":"/es/tags/upgrade/"},{"title":"Git Submodule","url":"/es/tags/git-submodule/"}],"timestamp":1638585819,"title":"Instalar a Través Del Submódulo Git"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Image Viewer","url":"/es/categories/image-viewer/"}],"content":"El visor de imágenes es una galería de imágenes que se mostrará cuando haga clic en una imagen que no se puede vincular.\nTambién proporciona muchas herramientas, como acercar, alejar y rotar.\nEl avatar del autor fue filtrado por defecto.\nParámetros del sitio El Visor de imágenes estaba activado de forma predeterminada, puede desactivarlo configurando el parámetro viewer como false.\nOpciones Puede modificar las opciones creando assets/viewer/js/options.ts.\n1const options = { 2 className: \u0026#34;image-viewer\u0026#34;, 3 // ... 4}; 5export default options; Las opciones disponibles se enumeran en Opciones de Viewer.js.\n","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/image-viewer/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638535610,"title":"Visor De Imágenes"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"De forma predeterminada, un sitio que utiliza este tema tiene las fuentes, los colores y la apariencia general predeterminados. Sin embargo, el esquema predeterminado no puede satisfacer a todos, pero no se preocupe, puede anular fácilmente los valores predeterminados del tema, como los colores de la paleta, las fuentes y el resaltado de sintaxis.\nfavicons HBS genera iconos en varios tamaños según el archivo assets/favicon.webp (mayor prioridad) o assets/favicon.png. Simplemente guarde su propia imagen de favicon con la misma ruta para anular los valores predeterminados.\nTambién deberás anular el icono de máscara assets/safari-pinned-tab.svg.\nLos íconos estáticos static/images/icons/icon-{size}.png tienen mayor prioridad para compatibilidad con versiones anteriores.\nTamaños personalizados Puede cambiar los tamaños que desee a través del archivo params.\nTOML YAML JSON 1[favicon] 2 [[favicon.sizes]] 3 size = \u0026#39;16x16\u0026#39; 4 [[favicon.sizes]] 5 size = \u0026#39;32x32\u0026#39; 6 [[favicon.sizes]] 7 size = \u0026#39;150x150\u0026#39; 8 [[favicon.sizes]] 9 rel = \u0026#39;apple-touch-icon\u0026#39; 10 size = \u0026#39;180x180\u0026#39; 11 [[favicon.sizes]] 12 size = \u0026#39;192x192\u0026#39; 1favicon: 2 sizes: 3 - size: 16x16 4 - size: 32x32 5 - size: 150x150 6 - rel: apple-touch-icon 7 size: 180x180 8 - size: 192x192 1{ 2 \u0026#34;favicon\u0026#34;: { 3 \u0026#34;sizes\u0026#34;: [ 4 { 5 \u0026#34;size\u0026#34;: \u0026#34;16x16\u0026#34; 6 }, 7 { 8 \u0026#34;size\u0026#34;: \u0026#34;32x32\u0026#34; 9 }, 10 { 11 \u0026#34;size\u0026#34;: \u0026#34;150x150\u0026#34; 12 }, 13 { 14 \u0026#34;rel\u0026#34;: \u0026#34;apple-touch-icon\u0026#34;, 15 \u0026#34;size\u0026#34;: \u0026#34;180x180\u0026#34; 16 }, 17 { 18 \u0026#34;size\u0026#34;: \u0026#34;192x192\u0026#34; 19 } 20 ] 21 } 22} Imagen de fondo 1# Use the same image on light and dark modes. 2backgroundImage = [\u0026#39;/images/bg.png\u0026#39;] 3 4# Use different images on light and dark modes. 5backgroundImage = [\u0026#39;/images/bg-light.png\u0026#39;, \u0026#39;/images/bg-dark.png\u0026#39;] Paletas HBS proporciona una gran cantidad de paletas: blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow.\nPaletas disponibles El selector de paleta en el panel de configuración se basa en el parámetro palettes.\n1palettes = [\u0026#34;blue\u0026#34;, \u0026#34;blue-gray\u0026#34;, \u0026#34;indigo\u0026#34;] También puede desactivar el selector de paleta configurando el parámetro palettes en una matriz vacía [].\nPaleta predeterminada 1palette = \u0026#34;indigo\u0026#34; Deberá borrar el caché del navegador después de modificar la paleta predeterminada.\nAnular color de paleta 1$palette-blue: darkblue; Después de modificar las variables SCSS en assets/main/scss/_variables.scss, el color de la paleta blue se cambiará a darkblue. Consulte Variables SCSS para obtener más detalles.\nFuentes Familia de fuentes No especificamos ninguna fuente, por lo que system-ui se utilizará en la mayoría de los navegadores.\nPuede utilizar otras fuentes web fácilmente, como Fuentes de Google. Tomemos como ejemplo la fuente Roboto.\nEn primer lugar, importamos la fuente y luego anulamos la variable body-font-family en assets/main/scss/_custom.scss:\n1@import url(\u0026#39;https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap\u0026#39;); 2:root { 3 --#{$prefix}body-font-family: \u0026#39;Roboto\u0026#39;, sans-serif; 4} Resaltado de sintaxis El tema requiere que los siguientes parámetros de marcado se establezcan en valores específicos.\nlineNos: true lineNumbersInTable: false noClasses: false Véase también Configurar resaltado.\nEstilo 1$ hugo gen chromastyles --style=solarized-dark \u0026gt; assets/main/scss/_highlight.scss Véase también Todos los estilos compatibles.\nIconos HBS utiliza un conjunto de íconos FuenteAwesome v5 personalizado que contiene solo los íconos utilizados por el tema para reducir el tamaño del archivo de íconos.\nAgregar iconos Teniendo en cuenta la necesidad de íconos definidos por el usuario, HBS proporciona una función de íconos personalizados, simplemente cree el archivo assets/icons/custom.js en la raíz del sitio e importe los íconos deseados.\n1// import { faClock } from \u0026#39;@fortawesome/free-solid-svg-icons\u0026#39;; 2// import { faAddressBook } from \u0026#39;@fortawesome/free-regular-svg-icons\u0026#39;; 3// import { faAmazon, faGoogle } from \u0026#39;@fortawesome/free-brands-svg-icons\u0026#39;; 4 5const icons = [ 6 // faClock, 7 // faAddressBook, 8 // faAmazon, faGoogle, 9]; 10export default icons; Para que esto funcione, es necesario descomentar, es decir, eliminar el prefijo //.\nLiteralmente, @fortawesome/free-solid-svg-icons, @fortawesome/free-regular-svg-icons y @fortawesome/free-brands-svg-icons representan íconos sólidos, regulares y de marca, respectivamente.\nVariables JS Las variables JS se nombran usando camelCase, y sus nombres de clase correspondientes están en minúsculas y separados entre sí por una línea horizontal.\nClase Variables JS fa-clock faClock fa-address-book faAddressBook fa-amazon faAmazon fa-google faGoogle Uso Dependiendo del tipo de icono, sus prefijos de clase también son diferentes, la relación correspondiente es la siguiente:\nAmable Prefijo de clase Sólido fas Regular far Marca fab Toma como ejemplo los íconos previamente importados:\nHTML \u0026lt;i class=\u0026quot;fas fa-clock\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-address-book\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fab fa-amazon\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fab fa-google\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; Si el icono no se muestra correctamente, verifique que el prefijo sea correcto.\nColor del icono Puede especificar las utilidades CSS de color o el atributo style para configurar el color del icono.\nHTML \u0026lt;i class=\u0026quot;fas fa-clock text-success\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;fas fa-clock text-danger\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-clock\u0026quot; style=\u0026quot;color: blue\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; \u0026lt;i class=\u0026quot;far fa-clock\u0026quot; style=\u0026quot;color: pink\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; Cuando lo use en configuraciones, portadas, etc., deberá citar/escapar el código; de lo contrario, el análisis de YAML/TOML/JSON puede fallar. Por ejemplo,\n1--- 2menu: 3 main: 4 params: 5 icon: \u0026#39;\u0026lt;i class=\u0026#34;far fa-clock\u0026#34; style=\u0026#34;color: blue\u0026#34;\u0026gt;\u0026lt;/i\u0026gt;\u0026#39; 6--- ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/look-and-feel/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Color","url":"/es/tags/color/"},{"title":"Palette","url":"/es/tags/palette/"},{"title":"Fonts","url":"/es/tags/fonts/"},{"title":"Syntax Highlighting","url":"/es/tags/syntax-highlighting/"},{"title":"Icons","url":"/es/tags/icons/"}],"timestamp":1638531777,"title":"Mira Y Siente"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"PWA","url":"/es/categories/pwa/"}],"content":"Las PWA(Aplicaciones web progresivas) son aplicaciones web desarrolladas utilizando una serie de tecnologías específicas y patrones estándar que les permiten aprovechar las funciones de las aplicaciones web y nativas.\nHBS proporciona algunas funciones básicas, como instalación del sitio en la pantalla de inicio, archivos de caché previo y disponibilidad sin conexión.\nParámetros del sitio En primer lugar, debemos especificar el parámetro pwa, incluso si está vacío.\nNombre Tipo Predeterminado Descripción pwa Objeto - pwa.manifest Objeto - Manifiesto de la aplicación web pwa.manifest.name Cadena - Título predeterminado del sitio pwa.manifest.short_name Cadena - Nombre corto de su sitio. pwa.manifest.display Cadena standalone pwa.manifest.description Cadena - Predeterminado a la descripción del sitio. pwa.manifest.theme_color Cadena - pwa.manifest.background_color Cadena - pwa.manifest.icons Matriz - pwa.manifest.icons.sizes Cadena - Tamaños de los iconos, es decir, \u0026ldquo;96x96\u0026rdquo; pwa.manifest.icons.src Cadena - URL del icono pwa.precache Objeto - Activos de caché previa pwa.precache.fonts Matriz - fuentes precaché pwa.precache.images Matriz - Imágenes de precaché pwa.precache.pages Matriz - páginas de caché previa pwa.precache.scripts Matriz - Scripts de caché previa pwa.precache.styles Matriz - Estilos de caché previa Manifiesto El manifest.json se generará automáticamente.\nSin conexión Página sin conexión La página offline se mostrará en el caso de solicitar una nueva página sin red.\nNecesitamos crear una página fuera de línea llamada offline/_index.md en el directorio content con el siguiente contenido.\n1+++ 2title = \u0026#39;Offline\u0026#39; 3+++ Imagen sin conexión Al igual que la página sin conexión, hay una imagen sin conexión para solicitar imágenes sin red. HBS proporciona una imagen sin conexión integrada con el nombre de archivo assets/images/offline.png. Puede anularlo creando su propia imagen sin conexión con el mismo nombre de archivo en la raíz de su sitio.\nPrecaché TOML YAML JSON params.toml\n1[pwa] 2 [pwa.precache] 3 fonts = [\u0026#39;/assets/katex/fonts/KaTeX_Math-Italic.woff2\u0026#39;] 4 images = [\u0026#39;/images/logo.webp\u0026#39;, \u0026#39;/images/Martijn_001.jpeg\u0026#39;] 5 pages = [\u0026#39;/\u0026#39;] 6 scripts = [\u0026#39;/assets/js/foo.js\u0026#39;] 7 styles = [\u0026#39;https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap\u0026#39;] params.yaml\n1pwa: 2 precache: 3 fonts: 4 - /assets/katex/fonts/KaTeX_Math-Italic.woff2 5 images: 6 - /images/logo.webp 7 - /images/Martijn_001.jpeg 8 pages: 9 - / 10 scripts: 11 - /assets/js/foo.js 12 styles: 13 - https://fonts.googleapis.com/css2?family=Roboto\u0026amp;display=swap params.json\n1{ 2 \u0026#34;pwa\u0026#34;: { 3 \u0026#34;precache\u0026#34;: { 4 \u0026#34;fonts\u0026#34;: [ 5 \u0026#34;/assets/katex/fonts/KaTeX_Math-Italic.woff2\u0026#34; 6 ], 7 \u0026#34;images\u0026#34;: [ 8 \u0026#34;/images/logo.webp\u0026#34;, 9 \u0026#34;/images/Martijn_001.jpeg\u0026#34; 10 ], 11 \u0026#34;pages\u0026#34;: [ 12 \u0026#34;/\u0026#34; 13 ], 14 \u0026#34;scripts\u0026#34;: [ 15 \u0026#34;/assets/js/foo.js\u0026#34; 16 ], 17 \u0026#34;styles\u0026#34;: [ 18 \u0026#34;https://fonts.googleapis.com/css2?family=Roboto\\u0026display=swap\u0026#34; 19 ] 20 } 21 } 22} ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/pwa/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Manifest","url":"/es/tags/manifest/"},{"title":"Offline","url":"/es/tags/offline/"},{"title":"Precache","url":"/es/tags/precache/"}],"timestamp":1638531541,"title":"Aplicación Web Progresiva"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Archive","url":"/es/categories/archive/"}],"content":"La página de archivo es una colección de publicaciones agrupadas por año.\nRequisitos previos Las páginas no se crean automáticamente, primero debemos crear secciones de archivos:\n1$ tree content/archives 2├── 2021 3│ ├── _index.md 4├── 2022 5│ ├── _index.md 6├── _index.md El contenido de esos archivos solo contiene un parámetro title.\nParámetros del sitio Nombre Tipo Predeterminado Descripción archive Objeto - Archivo. archive.dateFormat Cadena Jan 2 Formato de fecha de archivo. archive.monthFormat Cadena January Formato del mes de archivo, p. 1, 01, Jan y January. archive.basePath Cadena /archives ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/layouts/archives/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Diseño De Archivo"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Search","url":"/es/categories/search/"}],"content":"Puede resultar difícil para los lectores recuperar un artículo si hay muchos artículos en su sitio, por lo que agregamos la función de búsqueda.\nRequisitos previos Todo lo que necesita hacer es crear una página llamada search/_index.md en el directorio content.\n1+++ 2title = \u0026#34;Search\u0026#34; 3+++ Parámetros del sitio Nombre Tipo Predeterminado Descripción search Objeto - Configuración de búsqueda. search.paginate Entero 10 Paginación. search.indexPaginate Entero 1000 Paginación de archivos de índice. search.indexPreload Booleano true Si se deben precargar los índices de búsqueda. search.maxResults Número 100 El número máximo de resultados de búsqueda. search.resultContentCharactersCount Entero 240 El número máximo de caracteres del contenido del resultado para mostrar. search.shortcut Matriz [\u0026quot;/\u0026quot;] El acceso directo de búsqueda, es decir, [\u0026quot;Control\u0026quot;, \u0026quot;/\u0026quot;], deshabilítelo mediante una matriz vacía []. search.fuse Objeto - Opciones de Fuse.js. search.fuse.ignoreLocation Booleano true search.fuse.location Entero - search.fuse.isCaseSensitive Booleano - search.fuse.minMatchCharLength Entero - search.fuse.threshold Doble - search.fuse.distance Entero - search.fuse.useExtendedSearch Booleano - ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/layouts/search/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Diseño De Búsqueda"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/es/categories/widget/"}],"content":"The author widget is located in the sidebar, in order to introduce yourself briefly.\nSite Parameters config/_default/author.toml is deprecated, please use params.author instead.\n1// params.toml 2[author] 3name = \u0026#34;Foobar\u0026#34; 4[author.params] 5[author.social] Name Type Default Description author Object - Author profile shown in sidebar. author.name String - Name. author.avatar String /images/Martijn_001.jpeg Avatar. author.bio Object - Bio. author.company String - Company. author.location String - Location. author.about String - The external about page. The internal about page will be used if not set. author.params Object - author.params.layout String - Optional values: compact. author.social Object - Social Links. ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/widgets/author/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501019,"title":"Author Widget"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/es/categories/widget/"}],"content":"The reward widget, AKA buy me a coffee widget, gives the readers a way to support a creator through the use of donations or tips.\nHowever, it limited to the QR code image, please take a look at the funding widget.\nSite Parameters The reward is a key value pair that mapping from platform to their QR Code image, therefore, any platform that supports QR code is supported.\nName Type Default Description reward Object - reward.alipay String - Alipay QR Code Image. reward.wechat String - Wechat QR Code Image. Page Parameter Name Type Default Description reward Boolean true Turn on/off reward widget. ","date":"3 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/widgets/reward/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/es/tags/buy-me-a-coffee/"}],"timestamp":1638501019,"title":"Reward Widget"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Social Links","url":"/es/categories/social-links/"}],"content":"The social parameter is a set of key value pairs of social links that mapping from platform to their user identifier. It supports many popular social platforms, such as Twitter, Facebook, Reddit, GitHub. This article lists all supported platforms and how to use them.\nUsage There are three places you can put social links to: top app bar, Author Widget and footer.\nTop App Bar TOML YAML JSON params.toml\n1[topAppBar] 2 [topAppBar.social] 3 github = \u0026#39;foobar\u0026#39; params.yaml\n1topAppBar: 2 social: 3 github: foobar params.json\n1{ 2 \u0026#34;topAppBar\u0026#34;: { 3 \u0026#34;social\u0026#34;: { 4 \u0026#34;github\u0026#34;: \u0026#34;foobar\u0026#34; 5 } 6 } 7} Author Widget Set up social links by editing a file config/_default/params.toml with the following content:\n1[author.social] 2 email = \u0026#34;user@domain.tld\u0026#34; 3 github = \u0026#34;githubusername\u0026#34; Footer Set up social links by putting the following content in config/_default/params.toml.\n1[social] 2email = \u0026#34;user@domain.tld\u0026#34; 3github = \u0026#34;githubusername\u0026#34; Platforms The value can be changed to a full URL if necessary.\nPlatform User Identifier email Email Address facebook Facebook Username facebookgroup Facebook Group Name github GitHub Username gitlab GitLab Username instagram Instagram Username itchio itch.io Username linkedin LinkedIn Username quora Quora Username stackoverflow Stack Overflow User ID tumblr Tumblr Username twitter Twitter Username weibo Weibo Username zhihu Zhihu Username reddit Reddit Username telegram Telegram Username qq QQ Number dockerhub Docker Hub Username bitbucket Bitbucket Workspace ID kaggle Kaggle Username medium Medium Username or custom domain(e.g. https://razonyang.com) lastfm Last.fm Username bibibili BiliBili User ID youtube Youtube Channel ID discord Discord Invite Code discourse Forum URL tiktok TikTok Username pinterest Pinterest Username mastodon Mastodon Username liberapay Liberapay Username paypal Paypal Username patreon Patreon Username tipeee Tipeee Username rss Empty string for disabling the RSS link website Website URL ","date":"2 de diciembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/widgets/social-links/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638433665,"title":"Social Links"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Contact Form","url":"/es/categories/contact-form/"}],"content":"Podemos poner nuestra dirección de correo electrónico en enlaces sociales para que los lectores puedan contactarnos. Desafortunadamente, los correos electrónicos serán más o menos tratados como spam e incluso filtrados. Por lo tanto, traemos una función llamada formulario de contacto.\nRequisitos previos Necesitamos crear una página de contacto llamada contact/index.md en el directorio content, para que podamos acceder al formulario de contacto.\n1+++ 2title = \u0026#34;Contact Us\u0026#34; 3layout = \u0026#34;contact\u0026#34; 4+++ Una vez creado, el enlace aparecerá en el widget de perfil.\nParámetros Nombre Tipo Predeterminado Descripción contact Objeto - contact.endpoint Cadena - Véase también backends. contact.file Booleano false Activar/Desactivar la carga de archivos. contact.fileField Cadena - El nombre del campo del archivo. contact.reCaptcha Objeto - reCAPTCHA de Google contact.reCaptcha.siteKey Cadena - Servidores Está diseñado para ser compatible con la mayoría de los servidores, como Formulario de netlificación, Obtener formulario, Formas y Fabform.io. También funciona con la alternativa autohospedada Formailer.\nNetlificar Formulario de netlificación se admiten de fábrica, por lo tanto, no es necesario especificar el parámetro contact.endpoint.\nEl sitio de demostración utiliza Getform en lugar del formulario Netlify, porque Netlify actualizará su nivel de formulario automáticamente si excede el límite del plan actual, lo que generará gastos adicionales.\nAsegúrese de que el parámetro contact.endpoint esté vacío si desea utilizar el formulario Netlify.\nFormailer Formailer se admite con gancho del formulario de contacto para inyectar una entrada faltante en el formulario.\nVéase también Ejemplo de funciones de Google Cloud aguas arriba.\nOtros Tomemos Obtener formulario como ejemplo:\n1[contact] 2 endpoint = \u0026#34;YOUR_ENDPOINT\u0026#34; reCAPTCHA Además de configurar el parámetro contact.reCaptcha.siteKey, debe realizar pasos adicionales según el backend:\nNetlificar Obtener formulario ","date":"30 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/layouts/contact/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/es/tags/netlify/"},{"title":"Getform","url":"/es/tags/getform/"}],"timestamp":1638287760,"title":"Formulario De Contacto"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Assets","url":"/es/categories/assets/"}],"content":"Como tema personalizable, brinda la capacidad de personalizar activos, ya sea personalizando CSS y JS o introduciendo CSS y JS de terceros.\nActivos internos Simplemente cree y edite los archivos assets/main/scss/_variables.scss, assets/main/scss/_custom.scss y assets/main/js/custom.ts.\nEstos archivos se agruparán en uno para reducir las solicitudes HTTP.\nActivos externos Cualquier recurso CSS y JS externo se puede importar mediante los parámetros customCSS y customJS.\n1customCSS = [ 2 \u0026#34;external-foo.css\u0026#34;, 3 \u0026#34;external-bar.css\u0026#34; 4] 5 6customJS = [ 7 \u0026#34;external-foo.js\u0026#34;, 8 \u0026#34;external-bar.js\u0026#34; 9] ","date":"28 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/custom-assets/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"CSS","url":"/es/tags/css/"},{"title":"JS","url":"/es/tags/js/"}],"timestamp":1638086449,"title":"Activos Personalizados"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Comments","url":"/es/categories/comments/"},{"title":"Widget","url":"/es/categories/widget/"}],"content":"Disqus, Utterances and Giscus comments widgets are supported out of box. This article shows how to configure them and even customize your own comment widgets.\nDisqus Disqus comments widget is supported by Hugo.\n1disqusShortname = \u0026#34;yourdiscussshortname\u0026#34; Please keep in mind that disqusShortname is a site\u0026rsquo;s configuration, not a parameter. Put it in the params won\u0026rsquo;t work.\nUtterances Utterances is a lightweight comments widget built on GitHub issues.\n1[utterances] 2 repo = \u0026#34;user/repo\u0026#34; 3 #issueTerm = \u0026#34;pathname\u0026#34; # pathname, url, title, og:title. 4 #label = \u0026#34;comment\u0026#34; # Optional. 5 #theme = \u0026#34;\u0026#34; Unlike Disqus, Utterances is a parameter. You should put it in the params.\nParameters Name Type Default Description utterances.repo String - GitHub repository. utterances.issueTerm String pathname The mapping between blog posts and GitHub issues: pathname utterances.label String - The label that will be assigned to issues created by Utterances. utterances.theme String - github-light and github-dark will be used in light and dark mode respectively if not set. Optional values: github-light, github-dark, preferred-color-scheme, github-dark-orange, icy-dark, dark-blue and photon-dark. Troubleshooting Make sure the repo is public, otherwise your readers will not be able to view the issues/comments. Make sure the utterances app is installed on the repo, otherwise users will not be able to post comments. If your repo is a fork, navigate to its settings tab and confirm the issues feature is turned on. Giscus Giscus is a lightweight comments widget built on GitHub discussions.\n1[giscus] 2 repo = \u0026#34;user/repo\u0026#34; 3 repoId = \u0026#34;\u0026#34; 4 category = \u0026#34;\u0026#34; 5 categoryId = \u0026#34;\u0026#34; Parameters Name Type Default Description giscus.repo String - GitHub repository. Required. giscus.repoId String - GitHub repository ID. Required. giscus.category String - Discussions category. Required. giscus.categoryId String - Discussions category ID. Required. giscus.theme String - Left it empty if you want to follow the theme mode. giscus.mapping String pathname The mapping between blog posts and GitHub discussions: pathname, url, title and og:title. giscus.inputPosition String top The input position: top or bottom. giscus.reactions Boolean true Turn on/off the reactions. giscus.metadata Boolean false Emit discussion metadata. giscus.lang String - Specify language, default to site language. giscus.lazyLoading Boolean true Enable lazy loading. Staticman Staticman is also supported out of box, but it may be too complex to set it up.\nAdvantages The comments files are stored inside your repository, that is, the comments are rendered during the site build. It maybe useful for SEO, since it doesn\u0026rsquo;t rely JS to load data dynamically, it\u0026rsquo;s truly static. Handling spam: approve or reject comment via Git provider pull request, Google reCaptcha. Native theme style. Disadvantages The user information are untrusted, such as email. User unable to delete their comments directly, it\u0026rsquo;s able to do that via Pull Request. Preparations Staticman instance Firstly, we should set up a Staticman instance for handling comments requests.\nSelf-Hosted Staticman instance Please see https://staticman.net/docs/getting-started.html#step-2-deploy-staticman for details.\nPublic Staticman instance I set up a public staticman instance for testing, it should works with GitHub repositories only.\nYou\u0026rsquo;ll need to install the GitHub App for your repo, so that the instance has access to write comments files to your repo.\nEndpoint: https://hbs-staticman.herokuapp.com Staticman Configuration Secondary, we need to create the staticman.yml under your site/repository root, so that Staticman instance can read the configuration and process comments requests.\nThe filename, path are fixed, please DO NOT modify those parameters.\nThe allowedFields MUST include name, email, message, reply_to, root_id fields.\n1# Name of the property. You can have multiple properties with completely 2# different config blocks for different sections of your site. 3# For example, you can have one property to handle comment submission and 4# another one to handle posts. 5comments: 6 # (*) REQUIRED 7 # 8 # Names of the fields the form is allowed to submit. If a field that is 9 # not here is part of the request, an error will be thrown. 10 allowedFields: [\u0026#34;name\u0026#34;, \u0026#34;email\u0026#34;, \u0026#34;url\u0026#34;, \u0026#34;message\u0026#34;, \u0026#34;reply_to\u0026#34;, \u0026#34;root_id\u0026#34;] 11 12 # (*) REQUIRED 13 # 14 # Name of the branch being used. Must match the one sent in the URL of the 15 # request. 16 branch: \u0026#34;main\u0026#34; 17 18 # Text to use as the commit message or pull request title. Accepts placeholders. 19 commitMessage: \u0026#34;Add Staticman comment\u0026#34; 20 21 # (*) REQUIRED 22 # 23 # Destination path (filename) for the data files. Accepts placeholders. 24 filename: \u0026#34;{@id}\u0026#34; # DO NOT MODIFY 25 26 # The format of the generated data files. Accepted values are \u0026#34;json\u0026#34;, \u0026#34;yaml\u0026#34; 27 # or \u0026#34;frontmatter\u0026#34; 28 format: \u0026#34;yaml\u0026#34; 29 30 # List of fields to be populated automatically by Staticman and included in 31 # the data file. Keys are the name of the field. The value can be an object 32 # with a `type` property, which configures the generated field, or any value 33 # to be used directly (e.g. a string, number or array) 34 generatedFields: 35 date: 36 type: date 37 options: 38 format: \u0026#34;timestamp-seconds\u0026#34; 39 40 # Whether entries need to be appproved before they are published to the main 41 # branch. If set to `true`, a pull request will be created for your approval. 42 # Otherwise, entries will be published to the main branch automatically. 43 moderation: false 44 45 # Name of the site. Used in notification emails. 46 name: \u0026#34;vandenboom.online\u0026#34; 47 48 # Notification settings. When enabled, users can choose to receive notifications 49 # via email when someone adds a reply or a new comment. This requires an account 50 # with Mailgun, which you can get for free at http://mailgun.com. 51 #notifications: 52 # Enable notifications 53 #enabled: true 54 55 # (!) ENCRYPTED 56 # 57 # Mailgun API key 58 #apiKey: \u0026#34;1q2w3e4r\u0026#34; 59 60 # (!) ENCRYPTED 61 # 62 # Mailgun domain (encrypted) 63 #domain: \u0026#34;4r3e2w1q\u0026#34; 64 65 # (*) REQUIRED 66 # 67 # Destination path (directory) for the data files. Accepts placeholders. 68 path: \u0026#34;data/{options.slug}\u0026#34; # DO NOT MODIFY 69 70 # Names of required fields. If any of these isn\u0026#39;t in the request or is empty, 71 # an error will be thrown. 72 requiredFields: [\u0026#34;name\u0026#34;, \u0026#34;message\u0026#34;] 73 74 # List of transformations to apply to any of the fields supplied. Keys are 75 # the name of the field and values are possible transformation types. 76 transforms: 77 email: md5 # DO NOT MODIFY, REQUIRED BY AVATAR. 78 79 reCaptcha: 80 enabled: false 81 siteKey: \u0026#34;\u0026#34; 82 secret: Site Parameters Finally, tweak the following staticman parameters in params.toml.\nName Type Default Description staticman Object staticman.endpoint String - THe Staticman instance endpoint. Required. staticman.repo String - Repository that with form user/repo. Required. staticman.service String github staticman.branch String master Repository branch. staticman.property String comments staticman.sorting String asc Sorting comments, available options: desc. staticman.reCaptchaKey String - The reCaptcha site key. staticman.reCaptchaSecret String - The reCaptcha encrypted secret. You\u0026rsquo;ll need to encrypt plain secret via https://yourstaticmaninstance/v3/encrypt/plainsecret. staticman.extraFields Array - Extra fields. Available fields: url. staticman.requiredFields Array - Extra required fields. Available fields: email and the extra fields. name and message are always required. staticman.paginate Integer 10 The number of comments per page. staticman.moderation Boolean true Same as Staticman\u0026rsquo;s moderation. reCaptcha The reCaptcha secret is not the plain text version, you\u0026rsquo;ll need to encrypt it via your Staticman instance https://yourstaticmaninstance/v3/encrypt/PLAINSECRET.\nCustom Comments Widget We don\u0026rsquo;t intend to support all comments widgets, but don\u0026rsquo;t worry, you can customize your own comments widget.\nYou will need to disable the others before creating your own comments widget.\n1mkdir -p layouts/partials/post/comments 2echo \u0026#34;MY COMMENTS WIDGET\u0026#34; \u0026gt; layouts/partials/post/comments/custom.html In the meantime, you may need to introduce third-party assets, which can be solved by customizing assets or Hooks easily.\n","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/widgets/comments/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Disqus","url":"/es/tags/disqus/"},{"title":"Utterances","url":"/es/tags/utterances/"},{"title":"Giscus","url":"/es/tags/giscus/"},{"title":"Staticman","url":"/es/tags/staticman/"}],"timestamp":1638014069,"title":"Comments Widget"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[],"content":"Estaremos encantados de escuchar sus opiniones y comentarios, y le invitamos a participar.\nComunidad Solicitud de función Informe de error Discusiones: hacer preguntas, compartir ideas, etc. Contribuir Cualquier contribución es bienvenida, como documentos, corrección de errores y nuevas funciones.\nReglas Para facilitar el mantenimiento, elaboramos algunas reglas.\nEspecificación de confirmaciones convencionales Siga el Especificación de confirmaciones convencionales.\nPor ejemplo:\ncorrección de errores: fix: correct typos nueva característica: feat: add the foobar parameter documentos: docs: document the foobar parameter estilo: style: change the background color to blue reconstruir activos: chore: rebuild assets Desarrollar El tema se basa en npm y Hugo Pipes para crear recursos: JS, CSS, fuentes, etc.\nEl código fuente se colocó en el directorio assets.\nInstalar dependencias 1$ cd exampleSite 2$ npm install Vista previa 1$ npm run serve ","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/get-involved/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Complicarse"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Hook","url":"/es/categories/hook/"}],"content":"Como tema flexible, debería tener la capacidad de personalizar el código e integrar servicios de terceros. Por lo tanto, trajimos una función llamada gancho.\nEn este artículo, presentaremos todos los ganchos y brindaremos algunos casos de uso.\nDescripción general Gancho Descripción head-end Antes del final \u0026lt;head\u0026gt; body-begin Sigue el \u0026lt;body\u0026gt; body-end Antes del final del \u0026lt;body\u0026gt; main-begin Arriba del \u0026lt;main\u0026gt; main-end Sigue el \u0026lt;main\u0026gt; list-begin Arriba de la lista de publicaciones list-end Sigue la lista de publicaciones sidebar-begin En la parte superior de la barra lateral sidebar-end Antes del final de la barra lateral content-begin Arriba del contenido de la publicación content-end Sigue el contenido de la publicación comments-begin Arriba de los comentarios comments-end Sigue los comentarios footer-begin En la parte superior del pie de página footer-end Antes del final del pie de página post-panel-begin En la parte superior del panel de publicaciones post-panel-end Antes de que finalice el panel de publicaciones docs/sidebar-begin En la parte superior de la barra lateral docs docs/sidebar-end Antes del final de la barra lateral docs docs/nav-begin En la parte superior de la navegación docs/nav-end Antes del final de la navegación contact/form-field-begin En la parte superior del campo del formulario de contacto contact/form-field-end Antes de que finalice el campo del formulario de contacto search/sidebar-begin En la parte superior de la barra lateral search search/sidebar-end Antes del final de la barra lateral search Usos Es fácil usar un gancho, lo que debe hacer es crear un archivo HTML con el mismo nombre que el gancho en el directorio layouts/partials/hooks.\nTomemos sidebar-begin como ejemplo:\n1echo \u0026#39;\u0026lt;section class=\u0026#34;row card component text-center\u0026#34;\u0026gt;\u0026lt;div class=\u0026#34;card-body\u0026#34;\u0026gt;SIDEBAR BEGIN\u0026lt;/div\u0026gt;\u0026lt;/section\u0026gt;\u0026#39; \\ 2 \u0026gt; layouts/partials/hooks/sidebar-begin.html ","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/advanced/hooks/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Manos"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/es/categories/configuration/"}],"content":"La configuración del sitio se encuentra en config/_default/config.toml de forma predeterminada.\nNombre Tipo Predeterminado Descripción title Cadena - Título del sitio. baseURL Cadena - URL base del sitio. copyright Cadena - Derechos de autor del sitio. El marcador de posición {year} será reemplazado por el año actual. defaultContentLanguage Cadena en Idioma predeterminado del sitio. defaultContentLanguageInSubdir Booleano false paginate Entero 10 paginatePath Cadena page enableRobotsTXT Booleano true disqusShortname Cadena - Disqus nombre corto. services Objeto - services.googleAnalytics Objeto - Google Analytics, solo admite GA4. services.googleAnalytics.ID Cadena - Identificación de medición. author Objeto - Widget de autor. Véase también Todos los ajustes de configuración.\n","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/configuration/site/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Configuración Del Sitio"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/es/categories/configuration/"}],"content":"Los parámetros de la página se encuentran en Asunto frontal de la página.\nNombre Tipo Predeterminado Descripción Página title Cadena - Título de la página. description Cadena - Descripción de la página. keywords Matriz - Palabras clave de la página. comment Booleano true Ya sea para habilitar los comentarios. No funcionará si comment se ha desactivado globalmente. toc Booleano true Ya sea para habilitar TOC. No funcionará si toc se ha desactivado globalmente. math Booleano false Ya sea para habilitar las matemáticas. diagram Booleano false Ya sea para habilitar el diagrama. reward Booleano true Ya sea para habilitar la recompensa. breadcrumb Booleano true Ya sea para habilitar la ruta de navegación. breadcrumbDivider Cadena / Divisor de pan rallado. readingTime Booleano true Ya sea para mostrar el tiempo de lectura. postDate Booleano true Si se muestra la fecha de publicación en la metasección de publicación. copyright Booleano true Ya sea para mostrar la sección de derechos de autor. carousel Booleano false Mostrar en carrusel. nav Booleano true Activar/desactivar las navegaciones. sidebar Booleano true Mostrar/Ocultar la barra lateral. index Booleano true Indexar esta página en el buscador del cliente o no. Licencia Creative Commons creativeCommons Objeto - creativeCommons.by Booleano true El crédito debe ser otorgado a usted, el creador. creativeCommons.nc Booleano true Sólo se permite el uso no comercial de su trabajo. creativeCommons.nd Booleano true No se permiten derivados ni adaptaciones de su trabajo. creativeCommons.sa Booleano true Las adaptaciones deben compartirse en los mismos términos. Metaetiqueta metaRobots Cadena - Vacío significa que lo apagas. pinned Booleano false Fijar publicaciones. pinnedWeight Número - El peso más bajo tiene mayor prioridad. featuredPostCount Entero/Booleano 5 La cantidad de publicaciones destacadas que se muestran en la barra lateral. Apáguelo configurándolo en false. recentPostCount Entero/Booleano 5 El número de publicaciones recientes que se muestran en la barra lateral. Apáguelo configurándolo en false. relatedPostCount Entero/Booleano 5 El número de publicaciones relacionadas. Apáguelo configurándolo en false. featuredImageAlt Cadena - El texto alternativo para las imágenes destacadas, retrocede al título de la página si no está presente. numberifyHeadings Booleano true Cuando false, los encabezados no se numerarán. ","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/configuration/page-params/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Parámetros De Página"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/es/categories/configuration/"}],"content":"Los parámetros del sitio se encuentran en config/_default/params.toml de forma predeterminada.\nNombre Tipo Predeterminado Descripción sass_transpiler cadena libsass Se recomienda dartsass, ya que libsass está en desuso. Página mainSections Matriz [\u0026quot;posts\u0026quot;] Secciones principales titleCase Booleano false Título en mayúscula o no titleSeparator Cadena - Separador de título backgroundImage Matriz [] Imagen de fondo, como ['/images/bg.png'], ['/images/bg-light.png', '/images/bg-dark.png']. comment Booleano true Si habilitar comentarios toc Booleano true Ya sea para habilitar TOC tocWordCount Entero 280 TOC se muestra solo si el recuento de palabras de la publicación es mayor que este valor. tocPosition Cadena sidebar Valores disponibles: sidebar y content, solo se ve afectado el diseño posts. breadcrumb Booleano true Ya sea para habilitar la ruta de navegación dateFormat Cadena Jan 2, 2006 Formato de fecha. Consulte Referencia de plantillas de fecha y hora de Hugo para obtener más detalles. poweredBy Booleano true Ya sea para mostrar impulsado por. readingTime Booleano true Ya sea para mostrar el tiempo de lectura. postDate Booleano true Si se muestra la fecha de publicación en la metasección de publicación. math Booleano false Ya sea para habilitar las matemáticas a nivel mundial. diagram Booleano false Ya sea para habilitar el diagrama globalmente. logo Cadena/Booleano images/logo.webp Imagen del logotipo. Deshabilite el logotipo configurándolo en false. brand Cadena - Texto de marca. description Cadena - Descripción del sitio. keywords Cadena - Palabras clave del sitio. color Cadena - Modo de color, light, dark o auto. El valor predeterminado es auto. palette Cadena - Paleta predeterminada. Esto entrará en vigor después de borrar la cookie. palettes Matriz TODOS Paletas disponibles. Puede desactivarlo configurándolo en [] vacío. carouselPostCount Entero 5 El número de publicaciones que se muestran en el carrusel de la página de inicio. featuredPostCount Entero/Booleano 5 La cantidad de publicaciones destacadas que se muestran en la barra lateral. Apáguelo configurándolo en false. recentPostCount Entero/Booleano 5 El número de publicaciones recientes que se muestran en la barra lateral. Apáguelo configurándolo en false. relatedPostCount Entero/Booleano 5 El número de publicaciones relacionadas. Apáguelo configurándolo en false. categoryCount Entero/Booleano 10 El número de categorías que se muestran en la barra lateral. Apáguelo configurándolo en false. tagCount Entero/Booleano 10 El número de etiquetas que se muestran en la barra lateral. Apáguelo configurándolo en false. seriesCount Entero 10 El número de series que se muestran en la barra lateral. taxonomyPaginate Entero 10 taxonomyPostCount Entero 3 El número de publicaciones de la taxonomía. Desactívelo configurándolo en falso. taxonomySortingMethod Cadena - Ordenar taxonomías por popularity, ordenar alfabéticamente de forma predeterminada. countTaxonomyPosts Booleano false Contar publicaciones de taxonomía. sidebarTaxonomies Matriz [\u0026quot;series\u0026quot;, \u0026quot;categories\u0026quot;, \u0026quot;tags\u0026quot;] Las taxonomías en la barra lateral. fullWidth Booleano false Ancho completo. fullWidthInSections Objeto - Especifique el ancho completo para secciones particulares, como posts, docs. fixedHeader Booleano true Activar/desactivar el encabezado fijo. reward Objeto - Widget de recompensa, también conocido como Cómprame un widget de café. externalLinkIcon Booleano true Si mostrar los íconos después de los enlaces externos. share Objeto - Botones de compartir share.addThis Cadena - Agregar esto pubid de Agregar esto. fontSize Objeto Tamaños de fuente Comente o elimine este parámetro para deshabilitar el cambio de tamaño de fuente. fontSize.small Cadena .9rem Tamaño de fuente pequeño. fontSize.extraSmall Cadena .8rem Tamaño de fuente extra pequeño. fontSize.large Cadena 1.1rem Tamaño de fuente grande. fontSize.extraLarge Cadena 1.2rem Tamaño de fuente extra grande. social Objeto - Enlaces sociales. socialAnimation Booleano true Elimine la animación de los enlaces sociales si false. socialColor Booleano true Elimine el color de los enlaces sociales si false. socialShare Booleano true Activa o desactiva el botón integrado para compartir en redes sociales. searchBar Booleano true Activa o desactiva la barra de búsqueda integrada. archive Objeto - Archivo. search Objeto - Buscar. docsearch Objeto - Búsqueda de documentos docsearch.container Cadena .search-button docsearch.appId Cadena - docsearch.indexName Cadena - docsearch.apiKey Cadena - docsearch.debug Booleano false docsearch.* Booleano/Cadena/Número - https://docsearch.algolia.com/docs/api/ algolia Objeto - Ver Algolia Barra superior de aplicaciones topAppBar Objeto - topAppBar.social Objeto - Enlaces sociales. topAppBar.colorToggle Booleano true Activa/desactiva el cambio de color/modo. topAppBar.coloredInDark Booleano false Coloreado en modo oscuro. topAppBar.dropdownMenuToggle Booleano true Ocultar el menú desplegable. topAppBar.expandBreakpoint cadena xxl Expanda el contenido por encima de este punto de interrupción, p. lg, xl, xxl. Verificación del sitio para webmasters siteVerification Objeto - siteVerification.google Cadena - google siteVerification.bing Cadena - Bing siteVerification.baidu Cadena - Baidu siteVerification.baiduUnion Cadena - Unión Baidu siteVerification.so Cadena - Qihoo 360 siteVerification.sogou Cadena - Sogou siteVerification.shenma Cadena - Shenma Analítica analytics Objeto - Configuración analítica. analytics.baidu Cadena - Análisis de Baidu. analytics.plausible Cadena - Dominios de análisis plausibles. Múltiples dominios separados por coma. analytics.plausibleScript Cadena https://plausible.io/js/script.js Especifique el script de Plausible Analytics autohospedado o guión extendido. googleAdsense Cadena - Adsense de Google. customCSS Matriz - Véase también activos personalizados. customJS Matriz - Véase también activos personalizados. utterances Objeto - Declaraciones configuración. giscus Objeto - gisco configuración. Licencia Creative Commons creativeCommons Objeto - creativeCommons.by Booleano true El crédito debe ser otorgado a usted, el creador. creativeCommons.nc Booleano true Sólo se permite el uso no comercial de su trabajo. creativeCommons.nd Booleano true No se permiten derivados ni adaptaciones de su trabajo. creativeCommons.sa Booleano true Las adaptaciones deben compartirse en los mismos términos. Bloque de código codeBlock Objeto - codeBlock.maxLines Entero 7 codeBlock.lineNos Booleano true true/false representa que muestra/oculta los números de línea de forma predeterminada. Publicar post Objeto - post.excerpt Cadena Description La descripción se usará como extracto si no está vacía; para usar resúmenes como extracto, deberá configurarlo como cadena vacía explícitamente. post.excerptMaxLength Entero 320 post.copyright Booleano true Si mostrar la sección de derechos de autor en cada publicación. post.plainifyExcerpt Booleano true Formatee el extracto en HTML si false. post.featuredImage Booleano false Muestra la imagen destacada encima del contenido. post.numberifyHeadings Booleano false Cuente los encabezados automáticamente. post.numberifyHeadingsEndLevel Número 6 La profundidad de los títulos a contar. post.numberifyHeadingsSeparator Cadena - El separador entre número y encabezados. post.tocStyleType Cadena none Propiedad CSS list-style-type del TOC. post.imageTitleAsCaption Booleano false Utilice el título de la imagen como título. post.panel Booleano true Activa o desactiva el panel de publicaciones. post.nav Booleano true Activar/desactivar las navegaciones. post.readMoreFromContent Booleano false La posición de la página después de hacer clic en el botón Leer más, leer más del contenido si es verdadero. Por defecto, al principio de la página. Solo admite la división de resúmenes manuales a través de ` . | viewer| Booleano | verdadero | [Visor de imágenes](https://1552afcb.notes-6if.pages.dev/es/docs/image-viewer/) |pwa| Objeto | - | [Aplicaciones web progresivas](https://1552afcb.notes-6if.pages.dev/es/docs/pwa/) | **Barra lateral** |sidebar| Objeto | - | |sidebar.fixed| Booleano |false| Arreglar la barra lateral predeterminada. |sidebar.taxonomiesToggle| Booleano |true| Muestre el widget de alternancia de taxonomías en la barra lateral. |sidebar.taxonomiesToggleArchives| Booleano |true| Mostrar/Ocultar los archivos desde la palanca de taxonomías. |sidebar.series| Booleano |false| Muestra el widget de la serie en la barra lateral. |sidebar.categories| Booleano |false| Muestra el widget de categorías en la barra lateral. |sidebar.tags| Booleano |false| Muestra el widget de etiquetas en la barra lateral. |sidebar.archives| Booleano |false| Muestra el widget de archivo en la barra lateral. |sidebar.authors| Booleano |false| Muestra el widget de autores en la barra lateral. |sidebar.postsToggle| Booleano |true| Mostrar las publicaciones alternar en la barra lateral. |sidebar.featuredPosts| Booleano |false| Muestra el widget de publicaciones destacadas en la barra lateral. |sidebar.recentPosts| Booleano |false| Muestra el widget de publicaciones recientes en la barra lateral. |sidebar.collapsed| Booleano |flase| Contrae los widgets de la barra lateral de forma predeterminada en pantallas pequeñas. | **Metaetiqueta** |metaRobots| Cadena | - | Vacío significa que lo apagas. |contact| Objeto | - | [Formulario de contacto](https://1552afcb.notes-6if.pages.dev/es/docs/layouts/contact/) |pinnedPost| Booleano |true| Activar/desactivar publicaciones fijadas. |pinnedPostCount| Entero |1| El número de publicaciones fijadas. |rss| Cadena/Booleano |true| Mostrar el botón RSS en los enlaces sociales. Apáguelo confalse, vincúlelo a la página de inicio todo el tiempo configurándolo en home. | feeds| Objeto | - | Canales RSS |feeds.content| Booleano |false| Muestra el contenido completo si está habilitado. |actionsPanel| Objeto | - | |actionsPanel.disabled| Booleano |false| Deshabilitar el panel de acciones. |repo| Objeto | - | Ver [Widget de repositorio](https://1552afcb.notes-6if.pages.dev/es/docs/widgets/repository/). |docs.nav| Objeto | - | Navegación por el diseño de documentos. |docs.nav.reduceFontSize| Booleano |true| Cuandofalse`, no reduzca el tamaño de fuente de la navegación infantil.\nExcepto la herramienta para webmasters de Google, las otras herramientas para webmasters no pueden funcionar con hugo --minify porque no pueden reconocer la metaetiqueta minimizada.\n","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/configuration/site-params/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Parámetros Del Sitio"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/es/categories/configuration/"}],"content":"Como se muestra en el sitio de ejemplo, utilizamos Directorio de configuración para mantener una organización más sencilla y configuraciones específicas del entorno; es especialmente útil en sitios multilingües.\n1├── _default 2│ ├── config.toml 3│ ├── config.zh-hans.toml 4│ ├── config.zh-hant.toml 5│ ├── languages.toml 6│ ├── markup.toml 7│ ├── menu.toml 8│ ├── menu.zh-hans.toml 9│ ├── menu.zh-hant.toml 10│ ├── params.toml 11│ ├── params.zh-hans.toml 12│ ├── params.zh-hant.toml 13│ ├── server.toml 14└── production 15 ├── config.toml 16 └── params.toml Hugo admite múltiples formatos de configuración: TOML, YAML y JSON, cámbielo a voluntad.\n_default contiene las configuraciones predeterminadas. Las configuraciones production anularán las configuraciones predeterminadas en el entorno de producción. También puede definir más configuraciones de entorno, como development (el entorno predeterminado de hugo server), testing, staging. Y luego especifique el entorno a través del indicador -e. El nombre del archivo de configuración con el código de idioma afectado tiene efecto solo en el sitio de ese idioma, como config.zh-hans.toml, es útil para separar configuraciones y parámetros de diferentes idiomas. Las configuraciones multilingües no funcionan en configuraciones author, es decir, author.zh-hans.toml no tendrán efecto. Se sabe que config, params, menu y menus admiten configuración multilingüe.\n","date":"27 de noviembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/configuration/structure/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Estructura De Configuración"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/es/categories/markdown/"}],"content":"This article offers a sample of basic diagram usage that can be used in Hugo content files.\nPlease see also Mermaid.\nUsage Via Shortcode 1{{\u0026lt; mermaid \u0026gt;}} 2YOUR DIAGRAM INSTRUCTIONS 3{{\u0026lt; /mermaid \u0026gt;}} You can also wrap the shortcode with other shortcodes, such as text/align-center.\n1{{% text/align-center %}} 2{{\u0026lt; mermaid \u0026gt;}} 3YOUR DIAGRAM INSTRUCTIONS 4{{\u0026lt; /mermaid \u0026gt;}} 5{{% /text/align-center %}} Mermaid code block 1```mermaid 2YOUR DIAGRAM INSTRUCTIONS 3``` Examples Flow Chart 1{{\u0026lt; mermaid \u0026gt;}} 2graph TD 3 A[Christmas] --\u0026gt;|Get money| B(Go shopping) 4 B --\u0026gt; C{Let me think} 5 C --\u0026gt;|One| D[Laptop] 6 C --\u0026gt;|Two| E[iPhone] 7 C --\u0026gt;|Three| F[fas:fa-car Car] 8{{\u0026lt; /mermaid \u0026gt;}} graph TD A[Christmas] --\u003e|Get money| B(Go shopping) B --\u003e C{Let me think} C --\u003e|One| D[Laptop] C --\u003e|Two| E[iPhone] C --\u003e|Three| F[fas:fa-car Car] We need to import the faCar solid icon first, in order to use the fas:fa-car FontAwesome icon.\nSequence Diagram 1{{\u0026lt; mermaid \u0026gt;}} 2sequenceDiagram 3 Alice-\u0026gt;\u0026gt;+John: Hello John, how are you? 4 Alice-\u0026gt;\u0026gt;+John: John, can you hear me? 5 John--\u0026gt;\u0026gt;-Alice: Hi Alice, I can hear you! 6 John--\u0026gt;\u0026gt;-Alice: I feel great! 7{{\u0026lt; /mermaid \u0026gt;}} sequenceDiagram Alice-\u003e\u003e+John: Hello John, how are you? Alice-\u003e\u003e+John: John, can you hear me? John--\u003e\u003e-Alice: Hi Alice, I can hear you! John--\u003e\u003e-Alice: I feel great! Class Diagram 1```mermaid 2classDiagram 3 Animal \u0026lt;|-- Duck 4 Animal \u0026lt;|-- Fish 5 Animal \u0026lt;|-- Zebra 6 Animal : +int age 7 Animal : +String gender 8 Animal: +isMammal() 9 Animal: +mate() 10 class Duck{ 11 +String beakColor 12 +swim() 13 +quack() 14 } 15 class Fish{ 16 -int sizeInFeet 17 -canEat() 18 } 19 class Zebra{ 20 +bool is_wild 21 +run() 22 } 23``` classDiagram Animal \u0026lt;|-- Duck Animal \u0026lt;|-- Fish Animal \u0026lt;|-- Zebra Animal : \u0026#43;int age Animal : \u0026#43;String gender Animal: \u0026#43;isMammal() Animal: \u0026#43;mate() class Duck{ \u0026#43;String beakColor \u0026#43;swim() \u0026#43;quack() } class Fish{ -int sizeInFeet -canEat() } class Zebra{ \u0026#43;bool is_wild \u0026#43;run() }","date":"1 de septiembre de 2021","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/diagram/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Diagram","url":"/es/tags/diagram/"}],"timestamp":1630467410,"title":"Diagram Guide"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/es/categories/markdown/"}],"content":"Este artículo ofrece algunos casos de uso para mostrar cómo cambiar el tamaño, recortar, ajustar, rellenar y alinear imágenes.\nCambiar el tamaño de las imágenes Usamos la consulta URL de la imagen para cambiar el tamaño de las imágenes. Por ejemplo:\nEspecificar el ancho y conservar la proporción 1![Resize](featured-sample.webp?width=300px) Especifique la altura y mantenga la proporción 1![Resize](featured-sample.webp?height=200px) Especifique el ancho y el alto. 1![Resize](featured-sample.webp?width=300px\u0026amp;height=200px) Puede usarse no solo para recursos de la página, sino también para imágenes estáticas e imágenes externas. Sin embargo, además de los recursos de la página, a otros se les cambia el tamaño mediante el estilo en línea, es decir, su tamaño original no cambiará.\nAlinear imágenes Podemos alinear imágenes fácilmente agregando fragmentos de URL. Como #center, #float-start y #float-end representan el centro de alineación, el inicio flotante y el final flotante respectivamente.\nCentro Agregar el fragmento #center para alinear las imágenes al centro.\nPor ejemplo: @@P2@@.\nInicio flotante Al agregar el fragmento #float-start para imágenes flotantes al inicio, tenemos que envolverlo dentro del código corto clearfix para evitar romper el diseño.\nTenga en cuenta que utilice %% en lugar de \u0026lt;\u0026gt; para representar el contenido como Markdown por completo.\nPor ejemplo.\n1{{/% clearfix %/}} 2![Float Start](/featured-sample.webp#float-start) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Extremo flotante De manera similar, también podemos hacer flotar imágenes hasta el final agregando el fragmento #float-end.\nPor ejemplo.\n1{{/% clearfix %/}} 2![Float End](/featured-sample.webp#float-end) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Título HBS permite usar el título de la imagen como título, esta función está deshabilitada de forma predeterminada, debe habilitar el parámetro post.imageTitleAsCaption:\nTOML YAML JSON params.toml\n1[\u0026#39;publicación\u0026#39;] 2 imageTitleAsCaption = \u0026#39;verdadero\u0026#39; params.yaml\n1publicación: 2 imageTitleAsCaption: verdadero params.json\n1{ 2 \u0026#34;publicación\u0026#34;: { 3 \u0026#34;imageTitleAsCaption\u0026#34;: \u0026#34;verdadero\u0026#34; 4 } 5} 1![Image Caption](/featured-sample.webp \u0026#34;Use Image Title as Caption\u0026#34;) Use Image Title as Caption Recortar imágenes Recorta una imagen para que coincida con las dimensiones dadas sin cambiar el tamaño. Debes proporcionar tanto el ancho como el alto. Utilice la opción ancla1 para cambiar el punto de ancla del cuadro de recorte.\n1![Crop Image](/featured-sample.webp?crop=[width]x[height],[anchor]) Se requiere el tamaño [width]x[height]. [anchor] es opcional, el , se utiliza para separar el tamaño y el anclaje. Ejemplos crop=200x200,TopLeft crop=200x200,Top crop=200x200,TopRight crop=200x200,Left crop=200x200,Center crop=200x200,Right crop=200x200,BottomLeft crop=200x200,Bottom crop=200x200,BottomRight Rellenar imágenes Recorta y cambia el tamaño de una imagen para que coincida con las dimensiones dadas. Debes proporcionar tanto el ancho como el alto. Utilice la opción ancla1 para cambiar el punto de ancla del cuadro de recorte.\n1![Fill Image](/featured-sample.webp?fill=[width]x[height],[anchor]) Se requiere el tamaño [width]x[height]. [anchor] es opcional, el , se utiliza para separar el tamaño y el anclaje. Ejemplos fill=150x200,TopLeft fill=150x200,Top fill=150x200,TopRight fill=150x200,Left fill=150x200,Center fill=150x200,Right fill=150x200,BottomLeft fill=150x200,Bottom fill=150x200,BottomRight Ajustar imágenes Reduzca la escala de una imagen para que se ajuste a las dimensiones dadas manteniendo la relación de aspecto. Debes proporcionar tanto el ancho como el alto.\n1![Fit Image](/featured-sample.webp?fit=[width]x[height]) Filtros Brillo El brightness debe estar en el rango (-100, 100).\n1![Image Brightness](/featured-sample.webp?brightness=-30) Equilibrio de color ColorBalance crea un filtro que cambia el equilibrio de color de una imagen. Los parámetros porcentuales para cada canal de color (rojo, verde, azul) deben estar en el rango (-100, 500).\n1![Image ColorBalance](/featured-sample.webp?colorBalance=-50,50,150) colorear Colorizar crea un filtro que produce una versión coloreada de una imagen. El parámetro de tono es el ángulo de la rueda de colores, normalmente en el rango (0, 360). El parámetro de saturación debe estar en el rango (0, 100). El parámetro de porcentaje especifica la fuerza del efecto, debe estar en el rango (0, 100).\n1![Image Colorize](/featured-sample.webp?colorize=-100,50,150) Contraste El contrast debe estar en el rango (-100, 100).\n1![Image Contrast](/featured-sample.webp?contrast=50) gama Gamma crea un filtro que realiza una corrección gamma en una imagen. El parámetro gamma debe ser positivo. Gamma = 1 da la imagen original. Un gamma inferior a 1 oscurece la imagen y un gamma superior a 1 la aclara.\n1![Image Gamma](/featured-sample.webp?gamma=2) Desenfoque gaussiano Aplica un desenfoque gaussiano a una imagen.\n1![Image GaussianBlur](/featured-sample.webp?gaussianBlur=2) Escala de grises Escala de grises crea un filtro que produce una versión en escala de grises de una imagen.\n1![Image Grayscale](/featured-sample.webp?grayscale) Tono Hue crea un filtro que rota el tono de una imagen. El cambio de ángulo de tono suele estar en el rango de -180 a 180.\n1![Image Hue](/featured-sample.webp?hue=90) Invertir Invertir crea un filtro que niega los colores de una imagen.\n1![Image Invert](/featured-sample.webp?invert) Pixelar Pixelar crea un filtro que aplica un efecto de pixelación a una imagen.\n1![Image Pixelate](/featured-sample.webp?pixelate=8) Saturación La saturación crea un filtro que cambia la saturación de una imagen.\n1![Image Saturation](/featured-sample.webp?saturation=100) Sepia Sepia crea un filtro que produce una versión en tonos sepia de una imagen.\n1![Image Sepia](/featured-sample.webp?sepia=200) sigmoideo Sigmoid crea un filtro que cambia el contraste de una imagen usando una función sigmoidea y devuelve la imagen ajustada. Es un cambio de contraste no lineal útil para ajustes fotográficos, ya que conserva los detalles de luces y sombras.\n1![Image Sigmoid](/featured-sample.webp?sigmoid=2,5) Máscara de enfoque UnsharpMask crea un filtro que enfoca una imagen. El parámetro sigma se utiliza en una función gaussiana y afecta el radio de efecto. Sigma debe ser positivo. El radio de afilado equivale aproximadamente a 3 * sigma. El parámetro cantidad controla cuánto más oscuros y cuánto más claros se vuelven los bordes del borde. Normalmente entre 0.5 y 1.5. El parámetro de umbral controla el cambio mínimo de brillo que se agudizará. Normalmente entre 0 y 0.05.\n1![Image UnsharpMask](/featured-sample.webp?unsharpMask=10,1,0.05) cuando se utiliza el método Crop o Fill, el ancla determina la ubicación del cuadro de recorte. Puede especificar TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight o Smart. El valor predeterminado es Smart.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"15 de agosto de 2021","img":"/docs/image-processing/featured-sample.webp","lang":"es","langName":"Español","largeImg":"/docs/image-processing/featured-sample_hu_1fde8481ba13bdfe.webp","permalink":"/es/docs/image-processing/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"/docs/image-processing/featured-sample_hu_83bcf2b9437c7b6a.webp","tags":[{"title":"Image","url":"/es/tags/image/"},{"title":"Caption","url":"/es/tags/caption/"},{"title":"Resize","url":"/es/tags/resize/"},{"title":"Crop","url":"/es/tags/crop/"},{"title":"Fill","url":"/es/tags/fill/"},{"title":"Fit","url":"/es/tags/fit/"},{"title":"Brightness","url":"/es/tags/brightness/"},{"title":"ColorBalance","url":"/es/tags/colorbalance/"},{"title":"Colorize","url":"/es/tags/colorize/"},{"title":"Contrast","url":"/es/tags/contrast/"},{"title":"Gamma","url":"/es/tags/gamma/"},{"title":"GaussianBlur","url":"/es/tags/gaussianblur/"},{"title":"Grayscale","url":"/es/tags/grayscale/"},{"title":"Hue","url":"/es/tags/hue/"},{"title":"Invert","url":"/es/tags/invert/"},{"title":"Pixelate","url":"/es/tags/pixelate/"},{"title":"Saturation","url":"/es/tags/saturation/"},{"title":"Sepia","url":"/es/tags/sepia/"},{"title":"Sigmoid","url":"/es/tags/sigmoid/"},{"title":"UnsharpMask","url":"/es/tags/unsharpmask/"}],"timestamp":1629008346,"title":"Procesamiento De Imágenes"},{"authors":[{"title":"Hugo Authors","url":"/es/authors/hugo/"}],"categories":[],"content":" Headings The following HTML \u0026lt;h1\u0026gt;—\u0026lt;h6\u0026gt; elements represent six levels of section headings. \u0026lt;h1\u0026gt; is the highest section level while \u0026lt;h6\u0026gt; is the lowest.\nH1 H2 H3 H4 H5 H6 Paragraph Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat.\nItatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat.\nBlockquotes The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element, and optionally with in-line changes such as annotations and abbreviations.\nBlockquote without attribution Tiam, ad mint andaepu dandae nostion secatur sequo quae.\nNote that you can use Markdown syntax within a blockquote.\nBlockquote with attribution Don\u0026rsquo;t communicate by sharing memory, share memory by communicating.\n— Rob Pike1\nBlockquote Alerts 1\u0026gt; [!NOTE] 2\u0026gt; Useful information that users should know, even when skimming content. 3 4\u0026gt; [!TIP] 5\u0026gt; Helpful advice for doing things better or more easily. 6 7\u0026gt; [!IMPORTANT] 8\u0026gt; Key information users need to know to achieve their goal. 9 10\u0026gt; [!WARNING] 11\u0026gt; Urgent info that needs immediate user attention to avoid problems. 12 13\u0026gt; [!CAUTION] 14\u0026gt; Advises about risks or negative outcomes of certain actions. 15 16\u0026gt; [!QUESTION]+ Can alerts be foldable? 17\u0026gt; Yes, they can, you just need to append the `+` or `-` sign to the type. 18\u0026gt; 19\u0026gt; Click the heading to preview. Note Useful information that users should know, even when skimming content.\nTip Helpful advice for doing things better or more easily.\nImportant Key information users need to know to achieve their goal.\nWarning Urgent info that needs immediate user attention to avoid problems.\nCaution Advises about risks or negative outcomes of certain actions.\nCan alerts be foldable? Yes, they can, you just need to append the + or - sign to the type.\nClick the heading to preview.\nTables Tables aren\u0026rsquo;t part of the core Markdown spec, but Hugo supports supports them out-of-the-box.\nName Age Bob 27 Alice 23 Inline Markdown within tables Italics Bold Code italics bold code Code Blocks Code block with backticks 1\u0026lt;!doctype html\u0026gt; 2\u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; 3\u0026lt;head\u0026gt; 4 \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; 5 \u0026lt;title\u0026gt;Example HTML5 Document\u0026lt;/title\u0026gt; 6\u0026lt;/head\u0026gt; 7\u0026lt;body\u0026gt; 8 \u0026lt;p\u0026gt;Test\u0026lt;/p\u0026gt; 9\u0026lt;/body\u0026gt; 10\u0026lt;/html\u0026gt; Code block with Hugo’s internal highlight shortcode 1\u0026lt;!doctype html\u0026gt; 2\u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; 3\u0026lt;head\u0026gt; 4 \u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt; 5 \u0026lt;title\u0026gt;Another Example HTML5 Document\u0026lt;/title\u0026gt; 6\u0026lt;/head\u0026gt; 7\u0026lt;body\u0026gt; 8 \u0026lt;p\u0026gt;A looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong text\u0026lt;/p\u0026gt; 9\u0026lt;/body\u0026gt; 10\u0026lt;/html\u0026gt; List Types Ordered List First item Second item Third item Unordered List List item Another item And another item Nested List Fruit Apple Orange Banana Dairy Milk Cheese TODO List Done WIP Other Elements — abbr, sub, sup, kbd, mark GIF is a bitmap image format.\nH2O\nXn + Yn = Zn\nPress CTRL+ALT+Delete to end the session.\nMost salamanders are nocturnal, and hunt for insects, worms, and other small creatures.\nThe above quote is excerpted from Rob Pike\u0026rsquo;s talk during Gopherfest, November 18, 2015.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":"9 de noviembre de 2020","img":"https://1552afcb.notes-6if.pages.dev/images/markdown.png","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/markdown-syntax/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Markdown","url":"/es/tags/markdown/"},{"title":"CSS","url":"/es/tags/css/"},{"title":"HTML","url":"/es/tags/html/"}],"timestamp":1604880000,"title":"Markdown Syntax Guide"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Este artículo muestra cómo utilizar el código corto alert.\nImportante Desde v1.8.0, puedes crear alertas sin shortcode, consulta alertas de citas en bloque.\nSintaxis en línea 1{{\u0026lt; alert [type] \u0026gt;}}INLINE ALERT{{\u0026lt; /alert \u0026gt;}} Bloquear 1{{\u0026lt; alert [type] \u0026gt;}} 2BLOCK ALERT 3{{\u0026lt; /alert \u0026gt;}} El parámetro type es opcional. Valor predeterminado info, valores disponibles: info, success, warning y danger.\nCon título 1{{\u0026lt; alert [type] \u0026gt;}} 2{{\u0026lt; alert-heading \u0026gt;}}Well Done!{{\u0026lt; /alert-heading \u0026gt;}} 3ALERT MESSAGE 4{{\u0026lt; /alert \u0026gt;}} Con sintaxis de rebajas 1{{% alert warning %}} 2Alert Shortcode with Markdown Syntax: 3```bash 4$ echo \u0026#39;Un ejemplo de shortcode de alerta con la sintaxis de Markdown\u0026#39; 5``` 6{{% /alert %}} Alert Shortcode with Markdown Syntax:\n1$ echo \u0026#39;An example of alert shortcode with the Markdown syntax\u0026#39; Tenga en cuenta que deberá habilitar la configuración markup.goldmark.renderer.unsafe.\nTOML YAML JSON config.toml\n1[markup] 2 [markup.goldmark] 3 [markup.goldmark.renderer] 4 unsafe = true config.yaml\n1markup: 2 goldmark: 3 renderer: 4 unsafe: true config.json\n1{ 2 \u0026#34;markup\u0026#34;: { 3 \u0026#34;goldmark\u0026#34;: { 4 \u0026#34;renderer\u0026#34;: { 5 \u0026#34;unsafe\u0026#34;: true 6 } 7 } 8 } 9} Ejemplos Primario Información Ah, sí, leíste correctamente este importante mensaje de alerta. Este texto de ejemplo se extenderá un poco más para que pueda ver cómo funciona el espaciado dentro de una alerta con este tipo de contenido. Advertencia Peligro ¡Bien hecho! Ah, sí, leíste correctamente este importante mensaje de alerta. Este texto de ejemplo se extenderá un poco más para que pueda ver cómo funciona el espaciado dentro de una alerta con este tipo de contenido. ","date":"22 de octubre de 2020","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/alert/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Alert","url":"/es/tags/alert/"}],"timestamp":1603324800,"title":"Código Corto De Alerta"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Una descripción detallada de los códigos cortos de medios, como Bilibili, Tencent, Youku, iQiyi y Netease Music.\nBilibili 1{{\u0026lt; bilibili \u0026#34;video id\u0026#34; \u0026gt;}} Tencent 1{{\u0026lt; tencentvideo \u0026#34;vid\u0026#34; \u0026gt;}} youku 1{{\u0026lt; youku \u0026#34;XNTQwMTgxMTE2\u0026#34; \u0026gt;}} iQiyi 1{{\u0026lt; iqiyi \u0026#34;vid\u0026#34; \u0026#34;tvid\u0026#34; \u0026gt;}} Música neta 1{{\u0026lt; neteasemusic \u0026#34;id\u0026#34; [auto [type]] \u0026gt;}} Parámetro Descripción auto El auto controla si se reproduce automáticamente. Booleano y opcional, por defecto false. type El parámetro type es opcional. El valor predeterminado es 2. asciinema 1{{\u0026lt; asciinema id \u0026gt;}} ","date":"22 de octubre de 2020","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/media/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"Bilibili","url":"/es/tags/bilibili/"},{"title":"Tencent","url":"/es/tags/tencent/"},{"title":"Youku","url":"/es/tags/youku/"},{"title":"IQiyi","url":"/es/tags/iqiyi/"},{"title":"Netease Music","url":"/es/tags/netease-music/"},{"title":"Asciinema","url":"/es/tags/asciinema/"}],"timestamp":1603324800,"title":"Códigos Cortos De Medios"},{"authors":[{"title":"Razon Yang","url":"/es/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/es/categories/shortcode/"}],"content":"Una descripción detallada de los códigos cortos IDE en línea, como JSFiddle, CodePen, JSRun.\nJSFiddle 1{{\u0026lt; jsfiddle \u0026#34;user/id\u0026#34; \u0026gt;}} CódigoPluma 1{{\u0026lt; codepen \u0026#34;id\u0026#34; \u0026gt;}} Ejecutar JSR 1{{\u0026lt; jsrun \u0026#34;id\u0026#34; \u0026gt;}} esencia 1{{\u0026lt; gist razonyang f82a9399c2f682df36432f0ef828c451 \u0026gt;}} ","date":"22 de octubre de 2020","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/docs/shortcodes/online-ide/","series":[{"title":"Docs","url":"/es/series/docs/"}],"smallImg":"","tags":[{"title":"JSFiddle","url":"/es/tags/jsfiddle/"},{"title":"CodePen","url":"/es/tags/codepen/"},{"title":"JSRun","url":"/es/tags/jsrun/"}],"timestamp":1603324800,"title":"Códigos Cortos IDE en Línea"},{"authors":[{"title":"Hugo Authors","url":"/es/authors/hugo/"}],"categories":[],"content":"Hugo ships with several Built-in Shortcodes for rich content, along with a Privacy Config and a set of Simple Shortcodes that enable static and no-JS versions of various social media embeds.\nInstagram Simple Shortcode 1{{\u0026lt; instagram_simple BGvuInzyFAe hidecaption \u0026gt;}} YouTube Privacy Enhanced Shortcode 1{{\u0026lt; youtube ZJthWmvUzzc \u0026gt;}} Twitter Simple Shortcode 1{{\u0026lt; twitter_simple 1085870671291310081 \u0026gt;}} Vimeo Simple Shortcode 1{{\u0026lt; vimeo_simple 48912912 \u0026gt;}} ","date":"10 de marzo de 2019","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/rich-content/","series":[],"smallImg":"","tags":[{"title":"Instagram","url":"/es/tags/instagram/"},{"title":"YouTube","url":"/es/tags/youtube/"},{"title":"Twitter","url":"/es/tags/twitter/"},{"title":"Vimeo","url":"/es/tags/vimeo/"},{"title":"Privacy","url":"/es/tags/privacy/"}],"timestamp":1552176000,"title":"Rich Content"},{"authors":[{"title":"Hugo Authors","url":"/es/authors/hugo/"}],"categories":[],"content":"Lorem est tota propiore conpellat pectoribus de pectora summo.\nRedit teque digerit hominumque toris verebor lumina non cervice subde tollit usus habet Arctonque, furores quas nec ferunt. Quoque montibus nunc caluere tempus inhospita parcite confusaque translucet patri vestro qui optatis lumine cognoscere flos nubis! Fronde ipsamque patulos Dryopen deorum.\nExierant elisi ambit vivere dedere Duce pollice Eris modo Spargitque ferrea quos palude Rursus nulli murmur; hastile inridet ut ab gravi sententia! Nomine potitus silentia flumen, sustinet placuit petis in dilapsa erat sunt. Atria tractus malis.\nComas hunc haec pietate fetum procerum dixit Post torum vates letum Tiresia Flumen querellas Arcanaque montibus omnes Quidem et Vagus elidunt The Van de Graaf Canon\nMane refeci capiebant unda mulcebat Victa caducifer, malo vulnere contra dicere aurato, ludit regale, voca! Retorsit colit est profanae esse virescere furit nec; iaculi matertera et visa est, viribus. Divesque creatis, tecta novat collumque vulnus est, parvas. Faces illo pepulere tempus adest. Tendit flamma, ab opes virum sustinet, sidus sequendo urbis.\nIubar proles corpore raptos vero auctor imperium; sed et huic: manus caeli Lelegas tu lux. Verbis obstitit intus oblectamina fixis linguisque ausus sperare Echionides cornuaque tenent clausit possit. Omnia putatur. Praeteritae refert ausus; ferebant e primus lora nutat, vici quae mea ipse. Et iter nil spectatae vulnus haerentia iuste et exercebat, sui et.\nEurytus Hector, materna ipsumque ut Politen, nec, nate, ignari, vernum cohaesit sequitur. Vel mitis temploque vocatus, inque alis, oculos nomen non silvis corpore coniunx ne displicet illa. Crescunt non unus, vidit visa quantum inmiti flumina mortis facto sic: undique a alios vincula sunt iactata abdita! Suspenderat ego fuit tendit: luna, ante urbem Propoetides parte.\n","date":"9 de marzo de 2019","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/placeholder-text/","series":[],"smallImg":"","tags":[{"title":"Markdown","url":"/es/tags/markdown/"},{"title":"Text","url":"/es/tags/text/"}],"timestamp":1552089600,"title":"Placeholder Text"},{"authors":[{"title":"Hugo Authors","url":"/es/authors/hugo/"}],"categories":[],"content":"Mathematical notation in a Hugo project can be enabled by using third party JavaScript libraries.\nThis theme supports KaTeX.\nWhen using a math code block or katex shortcode, KaTeX is activated automatically. To manually enable KaTeX globally set the parameter math to true in a project\u0026rsquo;s configuration file. To enable KaTeX on a per page basis include the parameter math: true in the frontmatter of the content files. Note: Use the online reference of Supported TeX Functions\nExamples Inline Such as \\\\(\\KaTeX\\\\)(\\(\\KaTeX\\)) and $\\LaTeX$($\\LaTeX$).\nBlock 1$$ 2FORMULA 3$$ $$ (\\varphi = \\dfrac{1+\\sqrt5}{2}= 1.6180339887…) $$\n\\[ \\varphi = 1+\\frac{1} {1+\\frac{1} {1+\\frac{1} {1+\\cdots} } } \\]\nMath code block(recommended) See GitLab Flavored Markdown.\n1```math 2FORMULA 3``` The probability of getting \\(k\\) heads when flipping \\(n\\) coins is:\n$$ \\tag*{(1)} P(E) = {n \\choose k} p^k (1-p)^{n-k} $$ Multiple lines via shortcode(recommended) 1{{\u0026lt; katex \u0026gt;}} 2FORMULA 3{{\u0026lt; /katex \u0026gt;}} $$ \\begin{array}{l} E_{o 1}=\\frac{1}{2}\\left( { target }_{o 1}- { out }_{o 1}\\right)^{2}=\\frac{1}{2}(0.01-0.75136507)^{2}=0.274811083 \\\\ E_{o 2}=0.023560026 \\\\ E_{ {total }}=E_{o 1}+E_{o 2}=0.274811083+0.023560026=0.298371109 \\end{array} $$ ","date":"8 de marzo de 2019","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/math-typesetting/","series":[],"smallImg":"","tags":[{"title":"Math","url":"/es/tags/math/"}],"timestamp":1552003200,"title":"Math Typesetting"},{"authors":[{"title":"Hugo Authors","url":"/es/authors/hugo/"}],"categories":[],"content":"Emoji can be enabled in a Hugo project in a number of ways.\nThe emojify function can be called directly in templates or Inline Shortcodes.\nTo enable emoji globally, set enableEmoji to true in your site\u0026rsquo;s configuration and then you can type emoji shorthand codes directly in content files; e.g.\n🙈 :see_no_evil: 🙉 :hear_no_evil: 🙊 :speak_no_evil:\nThe Emoji cheat sheet is a useful reference for emoji shorthand codes.\nN.B. The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.\n1.emoji { 2 font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols; 3}","date":"5 de marzo de 2019","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/posts/emoji-support/","series":[],"smallImg":"","tags":[{"title":"Emoji","url":"/es/tags/emoji/"}],"timestamp":1551744000,"title":"Emoji Support"},{"authors":[],"categories":[],"content":"","date":"1 de enero de 1","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/archive/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"Archivo De Publicaciones"},{"authors":[],"categories":[],"content":"","date":"1 de enero de 1","img":"","lang":"es","langName":"Español","largeImg":"","permalink":"/es/faq/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"Preguntas Frecuentes"}]
