[{"authors":[],"categories":[{"title":"Technology","url":"/fr/categories/technology/"},{"title":"Digital-Radar","url":"/fr/categories/digital-radar/"}],"content":" Digital Radar Résumé Exécutif L\u0026rsquo;écosystème technologique mondial traverse une phase de rationalisation et de maturation profonde. Aujourd\u0026rsquo;hui, l\u0026rsquo;attention de l\u0026rsquo;industrie ne se porte plus uniquement sur l\u0026rsquo;innovation de rupture, mais sur l\u0026rsquo;efficacité opérationnelle, la sécurité structurelle et la conformité réglementaire.\nEn intelligence artificielle, nous assistons à un pivot stratégique des modèles gigantesques vers des architectures plus petites, spécialisées et exécutables localement (Edge AI), redéfinissant les coûts de calcul et la confidentialité des données. Parallèlement, la cybersécurité fait face à une sophistication accrue des attaques ciblant la périphérie des réseaux d\u0026rsquo;entreprise, obligeant les organisations à repenser leur modèle de confiance. Dans le cloud, la souveraineté des données et la gestion rigoureuse des coûts (FinOps) s\u0026rsquo;imposent comme les priorités absolues des directeurs informatiques. Du côté de l\u0026rsquo;ingénierie logicielle, le DevOps évolue vers l\u0026rsquo;ingénierie de plateforme pour réduire la charge cognitive des développeurs, tandis que le monde de l\u0026rsquo;open source redéfinit ses frontières face aux modifications de licences des grands éditeurs.\nCe rapport analyse ces dynamiques interdépendantes, en mettant en lumière les implications stratégiques de ces transformations pour les entreprises et les décideurs technologiques.\nIntelligence Artificielle L’avènement des modèles de langage de taille réduite (SLM) et des agents autonomes L\u0026rsquo;industrie de l\u0026rsquo;intelligence artificielle connaît un changement de paradigme majeur. Alors que la course aux modèles de langage géants (LLM) de plusieurs centaines de milliards de paramètres se poursuit, une tendance parallèle mais tout aussi puissante émerge : le développement de modèles de langage de taille réduite (Small Language Models ou SLM) hautement optimisés, tels que la série Llama 3.2 de Meta, Phi-3 de Microsoft ou les versions légères de Mistral AI.\nCes modèles, dont la taille varie généralement entre 1 et 8 milliards de paramètres, sont conçus pour être exécutés sur du matériel grand public, voire directement sur des appareils mobiles et des terminaux Edge. Grâce à des techniques avancées de quantification, de distillation des connaissances et d\u0026rsquo;élagage des réseaux de neurones, ces modèles affichent des performances comparables à celles des modèles géants d\u0026rsquo;il y a à peine dix-huit mois sur des tâches spécifiques de traitement du langage naturel.\nSimultanément, l\u0026rsquo;architecture des systèmes d\u0026rsquo;IA évolue d\u0026rsquo;une approche purement conversationnelle (chatbots) vers des systèmes d\u0026rsquo;agents autonomes (Agentic AI). Ces agents ne se contentent pas de répondre à des questions ; ils planifient des tâches complexes, interagissent avec des API externes, valident leurs propres résultats et corrigent leurs erreurs de manière itérative sans intervention humaine constante.\nPourquoi ce développement est important Ce virage vers les SLM et les architectures d\u0026rsquo;agents est crucial pour trois raisons fondamentales :\nViabilité économique et réduction des coûts : L\u0026rsquo;exploitation des LLM propriétaires via des API représente un coût récurrent prohibitif pour un déploiement à grande échelle. Les SLM permettent aux entreprises d\u0026rsquo;héberger leurs propres modèles sur des infrastructures cloud standard ou sur site, réduisant les coûts opérationnels de calcul (inférence) de l\u0026rsquo;ordre de 80 % à 90 %. Confidentialité et souveraineté des données : Pour les secteurs hautement réglementés (santé, finance, défense), l\u0026rsquo;envoi de données sensibles vers des serveurs tiers est souvent impossible. L\u0026rsquo;exécution locale de modèles performants garantit que les données ne quittent jamais le périmètre de sécurité de l\u0026rsquo;entreprise. Autonomie opérationnelle : Les agents d\u0026rsquo;IA transforment l\u0026rsquo;automatisation des processus métier. En passant d\u0026rsquo;outils d\u0026rsquo;assistance passive à des collaborateurs virtuels capables d\u0026rsquo;exécuter des flux de travail complexes de bout en bout, les entreprises peuvent réaliser des gains de productivité inédits, notamment dans le support client, l\u0026rsquo;analyse financière et le développement logiciel. Cybersécurité Ciblage systématique des équipements de périphérie et menaces assistées par l’IA Le paysage des cybermenaces s\u0026rsquo;est durci avec une recrudescence d\u0026rsquo;attaques sophistiquées ciblant directement les équipements de périphérie de réseau (edge devices), tels que les pare-feu, les concentrateurs VPN et les passerelles de messagerie. Des vulnérabilités critiques récemment découvertes dans les solutions d\u0026rsquo;acteurs majeurs de la sécurité (comme Palo Alto Networks, Fortinet et Ivanti) ont été activement exploitées par des groupes d\u0026rsquo;acteurs étatiques et de cybercriminels hautement organisés.\nCes attaquants exploitent des vulnérabilités de type \u0026ldquo;Zero-Day\u0026rdquo; pour contourner les mécanismes de détection traditionnels basés sur les agents de sécurité (EDR), qui ne peuvent généralement pas être installés directement sur ces appliances réseau propriétaires. Une fois installés dans ces équipements, les attaquants disposent d\u0026rsquo;un point d\u0026rsquo;observation idéal pour intercepter le trafic, voler des identifiants et se déplacer latéralement au sein du réseau interne de la victime.\nPar ailleurs, l\u0026rsquo;utilisation de l\u0026rsquo;intelligence artificielle générative par les cyberadversaires s\u0026rsquo;est démocratisée. Elle permet la création de campagnes de spear-phishing (harponnage) ultra-personnalisées, rédigées dans un français parfait et adaptées au contexte spécifique de l\u0026rsquo;entreprise ciblée, rendant les méthodes traditionnelles de sensibilisation des employés obsolètes.\nPourquoi ce développement est important Ces évolutions modifient profondément la gestion des risques cyber :\nObsolescence de la sécurité périmétrique traditionnelle : Le fait que les équipements de sécurité eux-mêmes soient les vecteurs d\u0026rsquo;intrusion démontre qu\u0026rsquo;aucune confiance ne peut être accordée par défaut à un segment de réseau. Cela accélère la nécessité d\u0026rsquo;adopter des architectures de type \u0026ldquo;Zero Trust\u0026rdquo; strictes, où chaque accès est vérifié en continu, quel que soit le point d\u0026rsquo;entrée. Nécessité d\u0026rsquo;une visibilité accrue sur le micrologiciel (firmware) : Les entreprises doivent désormais exiger de leurs fournisseurs une transparence totale sur la composition logicielle (SBOM - Software Bill of Materials) de leurs équipements matériels afin de pouvoir identifier et corriger rapidement les dépendances vulnérables. Automatisation de la réponse aux incidents : Face à des attaques assistées par l\u0026rsquo;IA qui se déploient à la vitesse de la machine, les processus de réponse manuels sont insuffisants. Les centres d\u0026rsquo;opérations de sécurité (SOC) doivent intégrer des outils d\u0026rsquo;orchestration et de réponse automatisée (SOAR) pour neutraliser les menaces en temps réel. Cloud Computing Souveraineté des données et émergence du FinOps 2.0 Le marché du cloud computing est aujourd\u0026rsquo;hui structuré par deux forces majeures : l\u0026rsquo;exigence de souveraineté des données, particulièrement en Europe, et la nécessité de rationaliser les dépenses liées aux infrastructures cloud, accentuée par les investissements massifs dans l\u0026rsquo;IA.\nPour répondre aux exigences réglementaires européennes (notamment la directive NIS 2 et le RGPD), les grands fournisseurs de cloud américains (hyperscalers) multiplient les partenariats locaux et les offres de \u0026ldquo;cloud souverain\u0026rdquo;. Ces initiatives visent à garantir que les données sont stockées et traitées exclusivement au sein de l\u0026rsquo;Union européenne, par des entités juridiques européennes immunisées contre les lois extraterritoriales (comme le Cloud Act américain). Des alliances comme Bleu en France (partenariat entre Orange, Capgemini et Microsoft) ou les zones souveraines d\u0026rsquo;AWS et de Google Cloud illustrent cette tendance.\nParallèlement, la gestion des coûts du cloud évolue vers ce que les analystes nomment le \u0026ldquo;FinOps 2.0\u0026rdquo;. Il ne s\u0026rsquo;agit plus seulement de supprimer les ressources inutilisées, mais d\u0026rsquo;intégrer l\u0026rsquo;optimisation des coûts dès la phase de conception des architectures logicielles (GreenOps et architecture orientée coûts) et de gérer l\u0026rsquo;impact budgétaire imprévisible des charges de travail liées à l\u0026rsquo;intelligence artificielle générative.\nPourquoi ce développement est important Ces transformations redéfinissent la stratégie cloud des organisations :\nConformité juridique et résilience géopolitique : Pour les opérateurs d\u0026rsquo;importance vitale (OIV) et les services publics, l\u0026rsquo;adoption de solutions souveraines n\u0026rsquo;est plus une option mais une obligation légale. Comprendre les subtilités techniques et juridiques de ces offres est indispensable pour éviter des sanctions financières lourdes et garantir la continuité des services. Maîtrise de la rentabilité des projets technologiques : Sans une gouvernance FinOps rigoureuse, les coûts associés à l\u0026rsquo;entraînement et à l\u0026rsquo;inférence des modèles d\u0026rsquo;IA peuvent rapidement annuler les bénéfices attendus de ces projets. Le FinOps 2.0 permet d\u0026rsquo;aligner précisément les dépenses cloud sur la valeur métier générée, transformant le cloud d\u0026rsquo;un centre de coûts en un levier de croissance mesurable. DevOps L’essor de l’ingénierie de plateforme et la consolidation de l’Infrastructure-as-Code Le mouvement DevOps connaît une mutation structurelle importante. Le paradigme traditionnel du \u0026ldquo;vous le construisez, vous l\u0026rsquo;exécutez\u0026rdquo; (you build it, you run it) a montré ses limites en imposant une charge cognitive excessive aux développeurs, qui doivent désormais maîtriser Kubernetes, la sécurité des conteneurs, les pipelines CI/CD et la gestion des infrastructures cloud.\nPour pallier ce problème, les organisations se tournent massivement vers l\u0026rsquo;ingénierie de plateforme (Platform Engineering). Cette approche consiste à créer une équipe dédiée chargée de concevoir et de maintenir une plateforme interne de développement (IDP - Internal Developer Platform). Cette plateforme fournit des portails en libre-service (souvent basés sur le projet open source Backstage) qui permettent aux développeurs de provisionner des environnements, de déployer des applications et de surveiller leurs services en respectant automatiquement les standards de sécurité et de conformité de l\u0026rsquo;entreprise.\nPar ailleurs, le domaine de l\u0026rsquo;Infrastructure-as-Code (IaC) se stabilise après la tourmente causée par le changement de licence de Terraform par HashiCorp. Le projet alternatif OpenTofu, soutenu par la Linux Foundation, s\u0026rsquo;est imposé comme une alternative open source viable et robuste, bénéficiant d\u0026rsquo;une adoption rapide par les entreprises soucieuses de maintenir leur indépendance technologique.\nPourquoi ce développement est important Ces changements visent directement l\u0026rsquo;efficacité opérationnelle des équipes d\u0026rsquo;ingénierie :\nAmélioration de l\u0026rsquo;expérience développeur (DevEx) : En masquant la complexité de l\u0026rsquo;infrastructure sous-jacente, l\u0026rsquo;ingénierie de plateforme permet aux développeurs de se concentrer exclusivement sur l\u0026rsquo;écriture de code métier. Cela réduit drastiquement le délai de mise sur le marché (Time-to-Market) des nouvelles fonctionnalités. Standardisation et sécurité par défaut : Les IDP intègrent des garde-fous de sécurité (guardrails) automatisés. Tout environnement provisionné via la plateforme est intrinsèquement conforme aux politiques de sécurité de l\u0026rsquo;entreprise, réduisant ainsi le risque d\u0026rsquo;erreurs de configuration humaine, qui restent la cause principale des failles de sécurité dans le cloud. Pérennité des choix technologiques : Le succès d\u0026rsquo;OpenTofu démontre que l\u0026rsquo;industrie refuse de dépendre des décisions unilatérales d\u0026rsquo;un seul éditeur pour ses composants d\u0026rsquo;infrastructure critiques. Cela renforce l\u0026rsquo;importance de concevoir des architectures basées sur des standards ouverts et interopérables. Open Source La crise des licences et la structuration des alternatives communautaires Le monde du logiciel libre traverse une crise existentielle majeure liée à la viabilité économique de son modèle. Historiquement, de nombreuses entreprises ont bâti des modèles commerciaux prospères en proposant des services managés autour de logiciels open source populaires. Cependant, la concurrence des géants du cloud, qui intègrent ces logiciels dans leurs catalogues de services sans toujours contribuer en retour au développement initial, a poussé plusieurs éditeurs à modifier leurs licences.\nAprès Elastic (Elasticsearch) et HashiCorp (Terraform), c\u0026rsquo;est Redis qui a récemment abandonné sa licence open source BSD au profit d\u0026rsquo;une double licence restrictive (RSALv2 et SSPLv1). Ces nouvelles licences interdisent de proposer le logiciel en tant que service managé sans accord commercial préalable.\nLa réaction de la communauté open source a été immédiate et vigoureuse. Sous l\u0026rsquo;égide de la Linux Foundation, le projet Valkey a été créé en tant que fork direct de Redis, soutenu par des acteurs majeurs tels qu\u0026rsquo;AWS, Google Cloud, Oracle et Ericsson. Valkey s\u0026rsquo;engage à rester entièrement open source sous licence BSD, garantissant la continuité pour les utilisateurs et les contributeurs.\nPourquoi ce développement est important Cette dynamique redéfinit les règles du jeu pour l\u0026rsquo;ensemble de l\u0026rsquo;industrie logicielle :\nRedéfinition du contrat social de l\u0026rsquo;open source : Ces événements mettent en lumière la tension croissante entre la monétisation légitime du travail des créateurs de logiciels et les principes de liberté d\u0026rsquo;utilisation de l\u0026rsquo;open source. Les entreprises doivent désormais évaluer attentivement le risque de licence (License Risk) lors du choix de leurs composants technologiques. Rôle accru des fondations neutres : Des organisations comme la Linux Foundation ou la Cloud Native Computing Foundation (CNCF) s\u0026rsquo;affirment comme les seuls garants de la neutralité et de la pérennité des projets critiques. Le soutien massif à Valkey montre que l\u0026rsquo;industrie préfère investir dans des projets gouvernés de manière démocratique plutôt que de risquer un verrouillage propriétaire (vendor lock-in). Lectures Recommandées L\u0026rsquo;impact de la directive NIS 2 sur les entreprises européennes : Une analyse détaillée des nouvelles obligations de cybersécurité pour les secteurs essentiels et importants, et les sanctions prévues en cas de non-conformité. L\u0026rsquo;architecture des agents d\u0026rsquo;IA et les frameworks d\u0026rsquo;orchestration : Une exploration technique de la conception d\u0026rsquo;agents autonomes à l\u0026rsquo;aide de frameworks open source tels que LangChain, AutoGen et CrewAI. Guide de migration de Terraform vers OpenTofu : Un document méthodologique pour planifier et exécuter la transition de vos bases de code d\u0026rsquo;infrastructure sans interruption de service. L\u0026rsquo;écosystème Valkey : Performances et intégration : Une étude comparative des performances de Valkey par rapport à Redis 7.4 et les modalités d\u0026rsquo;intégration dans les architectures existantes. FinOps pour l\u0026rsquo;IA générative : Maîtriser les coûts d\u0026rsquo;inférence : Stratégies pratiques pour surveiller, attribuer et optimiser les coûts liés à l\u0026rsquo;utilisation des modèles de fondation dans les applications d\u0026rsquo;entreprise. Conclusion La journée technologique d\u0026rsquo;aujourd\u0026rsquo;hui met en évidence une transition claire vers la maturité et la responsabilité. L\u0026rsquo;excitation initiale autour de l\u0026rsquo;intelligence artificielle générative fait place à une ingénierie pragmatique, caractérisée par l\u0026rsquo;essor de modèles plus petits, locaux et économiquement viables. Face à des cybermenaces toujours plus sophistiquées qui ciblent les fondations mêmes de nos réseaux, la sécurité ne peut plus être une réflexion après coup ; elle doit être intégrée par conception via des architectures Zero Trust et des plateformes de développement standardisées. Enfin, les tensions autour des licences open source rappellent que la gouvernance et la neutralité technologique sont des actifs stratégiques pour la résilience à long terme des entreprises. Dans ce paysage en mutation rapide, la capacité à concilier innovation technique, maîtrise des coûts et conformité réglementaire sera le principal facteur de différenciation pour les leaders technologiques de demain.\n","date":"20 juillet 2026","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/2026-07-20-digital-radar/","series":[{"title":"Digital-Radar","url":"/fr/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/fr/tags/ai/"},{"title":"Cybersecurity","url":"/fr/tags/cybersecurity/"},{"title":"Cloud","url":"/fr/tags/cloud/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Open-Source","url":"/fr/tags/open-source/"}],"timestamp":1784521815,"title":"Digital Radar 2026-07-20"},{"authors":[],"categories":[{"title":"Technology","url":"/fr/categories/technology/"},{"title":"Quantum-Computing","url":"/fr/categories/quantum-computing/"}],"content":" Statut de l’informatique quantique Résumé L’informatique quantique est aujourd’hui une discipline de cloud et de recherche, et non un produit de consommation. IBM affirme que ses systèmes fonctionnent dans des centres de données dotés d\u0026rsquo;une infrastructure cryogénique et d\u0026rsquo;un accès via la plate-forme IBM Quantum, et que sa feuille de route publique vise toujours des systèmes tolérants aux pannes d\u0026rsquo;ici 2029 (Matériel IBM, Feuille de route IBM). Microsoft positionne également Azure Quantum comme un service cloud pour les charges de travail quantiques et HPC/AI, et non comme du matériel domestique (Azur Quantique).\nOù en est le terrain actuellement L’état actuel est le suivant : les processeurs quantiques existent, mais ils sont toujours limités par le bruit, la correction d’erreurs et l’infrastructure. IBM affirme que ses systèmes fonctionnent déjà dans des environnements de centre de données de type production et que la prochaine étape consiste en une infrastructure cryogénique évolutive et des qubits logiques (Matériel IBM). Sa feuille de route publique vise un avantage quantique à court terme d’ici fin 2026 et le premier ordinateur quantique tolérant aux pannes à grande échelle d’ici 2029 (Feuille de route IBM).\nQuand les ordinateurs quantiques arriveront-ils chez les consommateurs ? Réponse courte : pas bientôt. Les machines actuelles nécessitent des systèmes cryogéniques, des centres de données spécialisés et des couches de contrôle classiques hybrides (Matériel IBM). Cela rend un ordinateur quantique grand public de type ordinateur portable ou de bureau irréaliste pour le moment. La voie probable est d\u0026rsquo;abord un accès accru au cloud et des installations d\u0026rsquo;entreprise spécialisées, et non un ordinateur quantique dans le salon (Plateforme IBM Quantum, Azur Quantique).\nMon point de vue est que l’utilisation domestique n’est pas une réalité des années 2020 et ne deviendra probablement plausible qu’une fois que la tolérance aux pannes, le refroidissement, le coût et la fiabilité se seront considérablement améliorés. Aucun fournisseur majeur ne publie aujourd’hui de feuille de route pour le consommateur.\nDernières avancées Les avancées récentes les plus importantes concernent principalement l’ingénierie et la mise à l’échelle, et non le matériel grand public. IBM met l\u0026rsquo;accent sur les grandes familles de processeurs, l\u0026rsquo;évolutivité cryogénique et la voie vers la tolérance aux pannes (Matériel IBM). Microsoft met en avant Majorana 1 sur Azure Quantum et une approche des puces quantiques basée sur les topoconducteurs (Azur Quantique). Quantinuum affirme avoir déjà déployé commercialement plusieurs générations de systèmes quantiques et relie désormais le quantum, le HPC et l\u0026rsquo;IA pour les charges de travail d\u0026rsquo;entreprise (Collaboration Quantinum HPE).\nLes ordinateurs quantiques sont-ils déjà utilisés dans les environnements de production ? Oui, mais dans des cas d’utilisation de niche et principalement en tant que services cloud hybrides. D-Wave décrit explicitement « le quantum en production » pour des clients tels que Pattison Food Group et NTT DOCOMO, et décrit également un chemin de production depuis la découverte du problème jusqu\u0026rsquo;au déploiement (Témoignages de clients D-Wave, Planification de la production D-Wave). Quantinuum affirme également avoir déployé des systèmes quantiques commercialement et travailler avec des clients des secteurs de l\u0026rsquo;industrie pharmaceutique, de la science des matériaux, des services financiers, du gouvernement et de l\u0026rsquo;industrie (Collaboration Quantinum HPE).\nLa nuance importante est que cette utilisation en production concerne principalement des flux de travail d’optimisation, de simulation et hybrides. Ce n\u0026rsquo;est pas encore un remplacement général des serveurs classiques.\nSeront-ils utilisés pour le cloud computing mainframe ? Probablement oui, comme accélérateur, pas comme remplacement. Le rôle le plus probable du quantum se situe aux côtés des mainframes, des clusters HPC et des plates-formes cloud pour des charges de travail spécifiques telles que l\u0026rsquo;optimisation et la simulation. IBM parle de calcul intensif centré quantique et de systèmes qui connectent plusieurs QPU dans un environnement de centre de données (Matériel IBM). Quantinuum dit la même chose avec une intégration explicite du HPC quantique pour les cas d\u0026rsquo;utilisation en entreprise et industriels (Collaboration Quantinum HPE).\nMon attente : le quantum sera un coprocesseur connecté au cloud pour des problèmes très spécifiques, et non un « mainframe quantique » autonome.\nSeront-ils utilisés pour l’informatique mainframe IA ? Oui aussi, mais en complément plutôt qu\u0026rsquo;en remplacement. Microsoft relie le quantum directement aux solutions de calcul intensif cloud et d\u0026rsquo;IA sur Azure Quantum (Azur Quantique). Cela suggère un avenir dans lequel le quantique pourra accélérer certains problèmes d’optimisation, de simulation et de recherche liés à l’IA, mais ne remplacera pas directement les GPU, les TPU ou les mainframes classiques de l’IA.\nPour une formation générale en IA, le matériel classique reste pour l’instant dominant. Le quantum pourrait éventuellement offrir une accélération de niche, mais les sources publiques ne font pas encore état d\u0026rsquo;un rôle de production à grande échelle.\nConclusion L’informatique quantique est réelle, utile et déjà utilisée, mais elle n’est pas suffisamment mature pour un usage domestique. L\u0026rsquo;état actuel est l\u0026rsquo;accès au cloud, les pilotes d\u0026rsquo;entreprise, la production de niche et une voie claire vers la tolérance aux pannes au cours des prochaines années (Feuille de route IBM, Planification de la production D-Wave, Actualités quantiques). En une phrase : les ordinateurs quantiques sont actuellement des machines spécialisées dans les centres de données et le cloud, et non des appareils électroniques grand public, et leur plus grande valeur pour l\u0026rsquo;instant réside dans les flux de travail hybrides avec HPC et IA.\n","date":"14 juillet 2026","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/2026-07-14-quantum-computing-status/","series":[],"smallImg":"","tags":[{"title":"Quantum-Computing","url":"/fr/tags/quantum-computing/"},{"title":"Cloud","url":"/fr/tags/cloud/"},{"title":"Ai","url":"/fr/tags/ai/"},{"title":"Hpc","url":"/fr/tags/hpc/"},{"title":"Research","url":"/fr/tags/research/"}],"timestamp":1784012400,"title":"Statut De L'informatique Quantique"},{"authors":[],"categories":[{"title":"Technology","url":"/fr/categories/technology/"},{"title":"Digital-Radar","url":"/fr/categories/digital-radar/"}],"content":" Radar numérique Résumé Le paysage technologique actuel est défini par une transition des mises en œuvre expérimentales vers des changements structurels et architecturaux. Dans le domaine de l\u0026rsquo;intelligence artificielle, l\u0026rsquo;industrie évolue rapidement au-delà des interfaces de chat passives vers des systèmes « agents » capables d\u0026rsquo;exécution et de raisonnement autonomes. Ce changement impose de nouvelles exigences à l\u0026rsquo;infrastructure cloud, poussant les fournisseurs de cloud à étendre les déploiements de silicium personnalisés et à établir des environnements cloud localisés et souverains pour répondre aux normes de conformité mondiales strictes.\nSimultanément, le paysage de la cybersécurité est confronté à des menaces systémiques ciblant les infrastructures réseau de pointe, ce qui incite les agences fédérales à faire pression pour une transition fondamentale vers des langages de programmation sécurisés en termes de mémoire. Dans le domaine des infrastructures, DevOps évolue vers des cadres d\u0026rsquo;ingénierie de plateforme hautement structurés, soutenus par des normes d\u0026rsquo;observabilité avancées comme OpenTelemetry. Enfin, l’écosystème open source démontre sa résilience, alors que des projets communautaires comme Valkey consolident le soutien de l’industrie à la suite des changements de licences d’entreprise. Ce rapport analyse ces développements critiques, explorant leurs fondements techniques et leurs implications à long terme pour l’entreprise.\nIntelligence artificielle Le passage à l’IA agentique et aux modèles de raisonnement Le paradigme de l’intelligence artificielle générative connaît une évolution fondamentale. Alors que la première vague d\u0026rsquo;adoption de l\u0026rsquo;IA en entreprise s\u0026rsquo;est concentrée sur la génération augmentée par récupération (RAG) et les assistants conversationnels, la frontière actuelle s\u0026rsquo;est déplacée vers des flux de travail « agents » et des modèles centrés sur le raisonnement. Cette transition est mise en évidence par deux développements techniques majeurs : la sortie de modèles de raisonnement qui utilisent l\u0026rsquo;apprentissage par renforcement pour effectuer un traitement en chaîne de pensée avant de répondre, et l\u0026rsquo;introduction d\u0026rsquo;API de développement qui permettent aux modèles d\u0026rsquo;interagir directement avec les systèmes d\u0026rsquo;exploitation informatiques.\nLes grands modèles de langage (LLM) traditionnels fonctionnent sur la prédiction du jeton suivant, générant des réponses presque instantanément mais se heurtant à une logique complexe en plusieurs étapes. Les modèles de raisonnement les plus récents, tels que la série o1 d\u0026rsquo;OpenAI, allouent du temps de calcul au point d\u0026rsquo;inférence pour exécuter des processus de chaîne de pensée internes. Cela permet au modèle de s\u0026rsquo;auto-corriger, de tester des hypothèses et de décomposer des problèmes mathématiques, scientifiques ou de programmation complexes avant de présenter une réponse.\nParallèlement, des fournisseurs comme Anthropic ont introduit des fonctionnalités « d\u0026rsquo;utilisation informatique » dans leurs modèles (comme Claude 3.5 Sonnet). Cette technologie permet à un agent IA de percevoir un environnement de bureau standard, de déplacer un curseur, de cliquer sur des boutons et de saisir du texte, imitant ainsi efficacement l\u0026rsquo;interaction humaine avec les interfaces logicielles.\n1[User Goal] 2 │ 3 ▼ 4[Reasoning Engine] ──(Internal Chain-of-Thought / Self-Correction) 5 │ 6 ▼ 7[Agentic Executor] ──(Interacts with APIs, Databases, \u0026amp; UI Elements) 8 │ 9 ▼ 10[Completed Workflow] Pourquoi c’est important Ce passage de la récupération passive d’informations à l’exécution active de tâches modifie fondamentalement les calculs économiques et opérationnels de l’automatisation d’entreprise.\nPremièrement, les modèles de raisonnement réduisent considérablement les taux d’erreur dans des domaines très complexes tels que le génie logiciel, la modélisation financière et l’analyse juridique. En réfléchissant systématiquement aux problèmes, ces modèles peuvent générer du code et analyser des documents avec un niveau de précision auparavant inaccessible par les LLM standards.\nDeuxièmement, les capacités agentiques permettent aux organisations d\u0026rsquo;automatiser les flux de travail de bout en bout plutôt que des tâches isolées. Un agent d\u0026rsquo;IA peut désormais être chargé de récupérer des données d\u0026rsquo;une base de données existante, de les formater dans une feuille de calcul, de les croiser avec une API externe et d\u0026rsquo;envoyer un résumé par courrier électronique à une partie prenante, le tout sans intervention humaine.\nCependant, cette autonomie introduit d’importants défis en matière de sécurité et de fiabilité. Les entreprises doivent désormais concevoir des garde-fous robustes pour empêcher les agents autonomes d\u0026rsquo;exécuter des actions non autorisées, d\u0026rsquo;être victimes d\u0026rsquo;attaques par injection rapide ou de générer des erreurs en cascade dans les environnements de production.\nCybersécurité Ciblage de l’infrastructure Edge et mandat de sécurité de la mémoire La sécurité du périmètre des entreprises est soumise à une pression constante. Les auteurs de menaces sophistiquées, y compris les menaces persistantes avancées (APT) parrainées par l\u0026rsquo;État, contournent de plus en plus les systèmes traditionnels de détection et de réponse des points finaux (EDR) en ciblant les périphériques réseau de périphérie. Les vulnérabilités des réseaux privés virtuels (VPN), des pare-feu et des contrôleurs de mise à disposition d\u0026rsquo;applications des principaux fournisseurs ont été activement exploitées pour obtenir un accès initial aux réseaux d\u0026rsquo;entreprise.\nEn réponse à ces vulnérabilités persistantes, l\u0026rsquo;Agence de Cybersécurité et de Sécurité des Infrastructures (CISA), aux côtés de partenaires internationaux, a intensifié sa campagne « Secure by Design ». Un pilier central de cette initiative est l\u0026rsquo;élimination des vulnérabilités de sécurité de la mémoire, telles que les dépassements de tampon, les erreurs d\u0026rsquo;utilisation après libération et les fuites de mémoire, qui représentent historiquement plus de 70 % des exploits Zero Day dans les logiciels de bas niveau. La CISA exhorte les fabricants de logiciels à faire passer leurs bases de code de langages non sécurisés en mémoire comme C et C++ vers des alternatives sécurisées en mémoire telles que Rust, Go et Java.\nPourquoi c’est important Le ciblage des appareils de pointe représente un changement stratégique en matière de cyberespionnage et de cybercriminalité. Étant donné que les pare-feu et les passerelles VPN se trouvent à la périphérie du réseau, ils ne peuvent souvent pas exécuter d\u0026rsquo;agents de sécurité tiers ou d\u0026rsquo;outils de surveillance des points finaux. Cela en fait des angles morts idéaux pour que les attaquants puissent établir leur persistance. Lorsqu’une vulnérabilité d’un périphérique périphérique est exploitée, les attaquants peuvent latéraliser le réseau interne sans être détectés. Les efforts agressifs du CISA en faveur de la sécurité de la mémoire sont importants car ils s’attaquent à la cause profonde de ces vulnérabilités plutôt que de traiter les symptômes. Pendant des décennies, l’industrie du logiciel s’est appuyée sur un cycle réactif de correctifs et de divulgation des vulnérabilités. En faisant la transition des bases de code des infrastructures critiques vers des langages sécurisés en mémoire comme Rust, des classes entières de vulnérabilités sont éliminées au moment de la compilation.\nPour les acheteurs professionnels, ce changement influencera de plus en plus les stratégies d’achat. Les organisations commenceront à exiger des nomenclatures logicielles (SBOM) détaillant non seulement les dépendances open source, mais également les langages de programmation utilisés pour construire les appareils réseau critiques, en donnant la priorité aux fournisseurs qui démontrent un engagement envers des architectures sécurisées en matière de mémoire.\nInformatique en nuage Les cloud souverains et la prolifération du silicium personnalisé Le paysage du cloud computing se fragmente selon des lignes géopolitiques et architecturales. Les hyperscalers, en particulier Amazon Web Services (AWS), Microsoft Azure et Google Cloud Platform (GCP), font face à deux pressions simultanées : la demande de souveraineté des données localisées et la montée en flèche des coûts de l\u0026rsquo;infrastructure d\u0026rsquo;intelligence artificielle.\nPour répondre aux exigences réglementaires, notamment au sein de l\u0026rsquo;Union européenne dans le cadre de la directive NIS2 et du RGPD, les fournisseurs de cloud étendent rapidement leurs offres de « cloud souverain ». Ces environnements sont physiquement, opérationnellement et logiquement isolés des régions cloud mondiales. Ils sont gérés exclusivement par des citoyens locaux qui subissent des habilitations de sécurité rigoureuses, garantissant que les juridictions étrangères ne peuvent pas accéder aux données souveraines ni en contraindre la divulgation.\nDans le même temps, la couche matérielle du cloud connaît une révolution. Pour atténuer les coûts élevés et les contraintes d\u0026rsquo;approvisionnement associés à l\u0026rsquo;architecture GPU dominante de Nvidia, les hyperscalers investissent massivement dans le silicium personnalisé. AWS déploie ses processeurs Trainium2 et Graviton4, Google étend ses clusters Tensor Processing Unit (TPU) v5p et Microsoft fait évoluer ses accélérateurs Maia 100 AI.\n1┌───────────────────────────────────────────────────────────┐ 2│ Enterprise Cloud Strategy │ 3└─────────────────────────────┬─────────────────────────────┘ 4 │ 5 ┌───────────────┴───────────────┐ 6 ▼ ▼ 7┌───────────────────────────┐ ┌───────────────────────────┐ 8│ Sovereign Cloud │ │ Custom Silicon │ 9├───────────────────────────┤ ├───────────────────────────┤ 10│ • Localized Operations │ │ • Lower Compute TCO │ 11│ • NIS2 \u0026amp; GDPR Compliance │ │ • Reduced GPU Dependency │ 12│ • Data Residency Isolation│ │ • Optimized AI Workloads │ 13└───────────────────────────┘ └───────────────────────────┘ Pourquoi c’est important L’essor des cloud souverains représente la fin de l’idéal d’un Internet sans frontières. Pour les entreprises multinationales, la gestion des données n’est plus un défi purement technique mais un défi géopolitique complexe. Les organisations doivent concevoir des architectures multirégionales qui acheminent et stockent dynamiquement les données en fonction des lois de résidence locales, sous peine de sanctions réglementaires sévères.\nParallèlement, le déploiement de silicium personnalisé démocratise l’accès au calcul haute performance. En concevant leurs propres puces, les hyperscalers peuvent optimiser le matériel pour des charges de travail cloud spécifiques, offrant ainsi aux entreprises de meilleurs rapports prix/performance.\nPour les charges de travail d\u0026rsquo;IA, le silicium personnalisé constitue une alternative essentielle au monopole matériel de Nvidia, en réduisant le coût total de possession (TCO) pour la formation et le déploiement de modèles à grande échelle. Les entreprises qui adaptent leurs piles logicielles pour fonctionner sur des architectures alternatives (telles qu\u0026rsquo;AWS Trainium ou Google TPU) bénéficieront d\u0026rsquo;un avantage concurrentiel significatif en matière de gestion des coûts d\u0026rsquo;infrastructure.\nDevOps Maturité de l’ingénierie de la plateforme et normalisation d’OpenTelemetry Le mouvement DevOps subit un affinement structurel. La philosophie traditionnelle selon laquelle « vous le construisez, vous l\u0026rsquo;exécutez » a souvent submergé les développeurs de logiciels avec une infrastructure complexe, entraînant une surcharge cognitive et des goulots d\u0026rsquo;étranglement de déploiement. Pour résoudre ce problème, les organisations passent à l\u0026rsquo;ingénierie de plate-forme, en créant des équipes dédiées pour créer des plates-formes de développement internes (IDP).\nCes IDP offrent des fonctionnalités en libre-service, permettant aux développeurs de provisionner l\u0026rsquo;infrastructure, de déployer du code et de gérer des bases de données via des modèles et des API standardisés. Cette tendance est étroitement liée à la maturité de Kubernetes, qui est passé d\u0026rsquo;un outil d\u0026rsquo;orchestration complexe au plan de contrôle invisible de l\u0026rsquo;infrastructure d\u0026rsquo;entreprise moderne.\nEn parallèle, OpenTelemetry (OTel) est devenu la norme industrielle incontestée en matière d’observabilité native du cloud. Le projet, hébergé par la Cloud Native Computing Foundation (CNCF), s\u0026rsquo;est étendu au-delà du traçage et des métriques distribués pour inclure le profilage standardisé. Cela permet aux organisations de collecter des données approfondies sur les performances d\u0026rsquo;exécution dans des environnements hétérogènes sans modifier le code source de l\u0026rsquo;application.\nPourquoi c’est important L\u0026rsquo;ingénierie de plate-forme est importante car elle aborde directement la vitesse des développeurs et le risque opérationnel. En regroupant les complexités de Kubernetes, des API cloud et des configurations de sécurité dans un IDP centralisé, les organisations peuvent réduire considérablement les délais d\u0026rsquo;intégration et accélérer la livraison des logiciels. Surtout, cette abstraction ne contourne pas la sécurité ; au lieu de cela, les garde-fous en matière de sécurité, de conformité et de contrôle des coûts sont intégrés directement dans les modèles de plate-forme, garantissant ainsi que les développeurs utilisent par défaut des configurations sécurisées. La standardisation d’OpenTelemetry est également transformatrice. Historiquement, les entreprises étaient confinées à des agents de surveillance propriétaires, ce qui rendait le changement de fournisseur d\u0026rsquo;observabilité extrêmement coûteux.\nAvec OpenTelemetry, la collecte de données est découplée de l\u0026rsquo;analyse des données. Les organisations peuvent instrumenter leurs applications une seule fois et acheminer les données de télémétrie vers n\u0026rsquo;importe quel backend analytique. L\u0026rsquo;ajout du profilage à la norme OTel permet aux équipes d\u0026rsquo;ingénierie d\u0026rsquo;identifier avec précision les goulots d\u0026rsquo;étranglement du processeur et de la mémoire en production, ce qui se traduit directement par des dépenses cloud optimisées et des performances applicatives améliorées.\n##Open Source\nLa consolidation Valkey et l’évolution de Rust sous Linux L’écosystème open source traverse une période de volatilité des licences et de modernisation architecturale. Le développement récent le plus important est la consolidation rapide de Valkey, une banque de données clé-valeur open source et hautes performances. Valkey a été créé sous les auspices de la Linux Foundation en réponse directe à la transition de Redis de son logiciel de base de la licence open source BSD vers des licences restrictives et non open source (RSALv2 et SSPLv1).\nSoutenu par des géants du secteur tels qu\u0026rsquo;AWS, Google, Oracle, Ericsson et Heroku, Valkey a rapidement atteint la parité des fonctionnalités avec Redis et a publié des améliorations majeures des performances dans sa version 8.0. Cette mobilisation rapide démontre la puissance collective de l’écosystème cloud pour maintenir des alternatives open source lorsque les changements propriétaires menacent les projets en aval.\nSimultanément, l’intégration de Rust dans le noyau Linux continue de progresser, bien qu’au milieu de débats culturels et techniques. La version 6.12 du noyau et les versions à venir offrent une prise en charge étendue des pilotes de périphériques et des sous-systèmes principaux basés sur Rust. Cette initiative vise à amener la sécurité de la mémoire aux niveaux les plus bas du système d\u0026rsquo;exploitation, réduisant ainsi le risque d\u0026rsquo;exploits au niveau du noyau.\n1[Redis License Shift (RSALv2/SSPLv1)] 2 │ 3 ▼ 4[Linux Foundation Intervenes] 5 │ 6 ▼ 7[Valkey Project Established] ──(Backed by AWS, GCP, Oracle, etc.) 8 │ 9 ▼ 10[Valkey 8.0 Released] ──(Production-Ready, Open-Source BSD License) Pourquoi c’est important Le phénomène Valkey est un moment décisif pour la gouvernance open source. Cela prouve que lorsqu’un logiciel d’infrastructure critique modifie sa licence pour restreindre son utilisation commerciale, l’industrie peut rapidement se coordonner pour créer, maintenir et optimiser une alternative open source. Pour les responsables informatiques d\u0026rsquo;entreprise, Valkey offre un chemin de migration transparent qui évite la dépendance vis-à-vis d\u0026rsquo;un fournisseur et les frais de licence inattendus, renforçant ainsi la viabilité des logiciels gérés par la communauté.\nL\u0026rsquo;intégration continue de Rust dans le noyau Linux est un jeu à long terme pour la stabilité et la sécurité du système d\u0026rsquo;exploitation. Même si la transition se heurte à la résistance des développeurs C traditionnels préoccupés par la complexité de la chaîne d\u0026rsquo;outils et les vitesses de compilation, les avantages en matière de sécurité sont indéniables.\nÀ mesure que les pilotes Rust deviennent plus répandus, la fréquence des paniques critiques du noyau et des vulnérabilités d’élévation de privilèges diminuera. Cela garantit que le système d\u0026rsquo;exploitation fondamental qui alimente l\u0026rsquo;infrastructure cloud, les appareils de pointe et les superordinateurs du monde devient intrinsèquement plus résilient.\nLecture recommandée Cadres de sécurité et de gouvernance de l\u0026rsquo;IA agentique : Une exploration des normes de sécurité émergentes requises pour gérer les agents d\u0026rsquo;IA autonomes dans les réseaux d\u0026rsquo;entreprise. Rapport d\u0026rsquo;avancement de la feuille de route Memory-Safe de CISA : Un examen approfondi de la manière dont les agences fédérales et les éditeurs de logiciels suivent leur transition vers les bases de code C/C++. L\u0026rsquo;impact de la directive NIS2 sur les architectures cloud : Un guide complet des exigences de conformité pour les organisations exploitant des infrastructures critiques au sein de l\u0026rsquo;Union européenne. Découplage de l\u0026rsquo;observabilité avec OpenTelemetry : Une plongée technique approfondie dans la mise en œuvre de pipelines de collecteurs OTel pour éviter le verrouillage du fournisseur et optimiser les coûts de stockage des données. Migration de Redis vers Valkey : Un guide de migration pratique détaillant les tests de performances, la compatibilité des API et les stratégies de déploiement pour les environnements d\u0026rsquo;entreprise. Conclusion Les évolutions analysées dans ce rapport mettent en évidence une tendance claire : l’industrie technologique donne la priorité à la stabilité, à la sécurité et à la maturité structurelle plutôt qu’à une croissance brute et sans contrainte. La transition vers l’IA agentique nécessite des cadres de gouvernance robustes pour gérer les flux de travail autonomes en toute sécurité. La cybersécurité passe de l\u0026rsquo;application de correctifs réactifs à une conception architecturale proactive grâce à une programmation sécurisée en mémoire.\nDans le cloud, les réalités géopolitiques obligent à évoluer vers des infrastructures localisées et souveraines, tandis que les pressions économiques conduisent à l’adoption du silicium personnalisé. Enfin, l\u0026rsquo;ingénierie de plateforme et les initiatives open source comme Valkey démontrent que l\u0026rsquo;industrie construit activement des systèmes durables et évolutifs conçus pour résister à la fois à la complexité technique et à la volatilité du marché. Les organisations qui alignent leurs stratégies sur ces changements fondamentaux seront bien placées pour naviguer dans les complexités du paysage numérique moderne.\n","date":"14 juillet 2026","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/2026-07-14-digital-radar/","series":[{"title":"Digital-Radar","url":"/fr/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/fr/tags/ai/"},{"title":"Cybersecurity","url":"/fr/tags/cybersecurity/"},{"title":"Cloud","url":"/fr/tags/cloud/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Open-Source","url":"/fr/tags/open-source/"}],"timestamp":1784005042,"title":"Radar Numérique 2026-07-14"},{"authors":[],"categories":[{"title":"Technology","url":"/fr/categories/technology/"},{"title":"Digital-Radar","url":"/fr/categories/digital-radar/"}],"content":" Radar numérique Résumé Le paysage technologique actuel est défini par une transition de la mise en œuvre expérimentale à l’optimisation structurelle. Dans le domaine de l\u0026rsquo;intelligence artificielle, l\u0026rsquo;industrie s\u0026rsquo;éloigne des interactions simples et basées sur des invites pour se tourner vers des flux de travail autonomes et multi-agents et des modèles de petit langage (SLM) très efficaces conçus pour le déploiement en périphérie. Cette évolution architecturale se reflète dans les secteurs du cloud et du DevOps, où l\u0026rsquo;ingénierie des siliciums et des plates-formes personnalisées réduit la charge cognitive des développeurs tout en optimisant les coûts d\u0026rsquo;infrastructure en constante augmentation.\nParallèlement, le paysage de la cybersécurité est confronté à un double défi : se préparer à la menace à long terme de l’informatique quantique en adoptant des normes cryptographiques récemment finalisées, tout en se défendant contre les campagnes immédiates et hautement ciblées de ransomwares visant les infrastructures de virtualisation. Pendant ce temps, la communauté open source subit un réalignement structurel, marqué par une réaction des entreprises contre les changements de licence et un effort concerté pour intégrer les langages sécurisés en mémoire au cœur des systèmes d\u0026rsquo;exploitation modernes. Ce rapport analyse ces développements cruciaux, expliquant leurs fondements techniques et leurs implications commerciales plus larges.\nIntelligence artificielle La transition vers des workflows d’IA agentique Le paradigme de l’intelligence artificielle générative connaît un changement fondamental. Alors que la première vague d\u0026rsquo;adoption de l\u0026rsquo;IA en entreprise s\u0026rsquo;est concentrée sur les interactions à invite unique avec les grands modèles linguistiques (LLM), tels que les chatbots et les résumés de documents de base, le secteur évolue rapidement vers des flux de travail « agents ». Ces systèmes exploitent plusieurs agents d\u0026rsquo;IA spécialisés qui collaborent, utilisent des outils externes, exécutent des chaînes de raisonnement en plusieurs étapes et s\u0026rsquo;autocorrigent sans intervention humaine continue.\nContrairement aux modèles statiques d\u0026rsquo;invite et de réponse, les frameworks agents (tels que LangGraph, CrewAI et Microsoft AutoGen) permettent aux modèles de décomposer des objectifs complexes en tâches discrètes. Par exemple, un système agent chargé d\u0026rsquo;une étude de marché peut rédiger de manière autonome une requête de recherche, analyser les documents récupérés, identifier les lacunes dans les informations, exécuter des requêtes de suivi, synthétiser les résultats dans un rapport et formater le résultat selon un modèle spécifique.\nPourquoi c’est important L\u0026rsquo;IA agentique représente la transition de l\u0026rsquo;IA en tant qu\u0026rsquo;assistant à l\u0026rsquo;IA en tant que collaborateur autonome. Pour les entreprises, cela augmente considérablement le retour sur investissement des investissements en IA. Au lieu de simplement rédiger du texte, les systèmes agents peuvent automatiser des processus métier complexes de bout en bout, tels que le débogage automatisé de logiciels, la gestion des escalades de support client et l\u0026rsquo;audit financier. Cependant, ce changement introduit de nouveaux défis en matière d’observabilité, de prévisibilité et de sécurité, car les agents autonomes peuvent présenter des comportements émergents ou entrer dans des boucles infinies s’ils ne sont pas correctement contraints par des garde-fous stricts.\nL’essor des petits modèles de langage (SLM) hautes performances Alors que les modèles pionniers comme le GPT-4 et le Claude 3.5 Sonnet continuent de repousser les limites des capacités, une révolution parallèle se produit à l’extrémité opposée du spectre. Les petits modèles de langage (SLM) hautement optimisés, allant généralement de 1 à 9 milliards de paramètres, atteignent des niveaux de performances qui rivalisent avec des modèles beaucoup plus grands d\u0026rsquo;il y a à peine un an. Les versions récentes, telles que Phi-3 de Microsoft, NeMo de Mistral et Llama 3 8B de Meta, démontrent que les raffinements architecturaux et les données d\u0026rsquo;entraînement de haute qualité sont plus critiques que le simple nombre de paramètres.\nCes modèles sont conçus pour fonctionner efficacement sur du matériel grand public, des appareils mobiles et des serveurs Edge. En utilisant des techniques telles que la quantification (réduisant la précision des poids des modèles) et le décodage spéculatif, les développeurs peuvent déployer ces modèles avec une empreinte mémoire minimale et une latence ultra-faible.\nPourquoi c’est important La prolifération de SLM performants démocratise l’IA en réduisant les barrières financières et infrastructurelles à l’entrée. Les entreprises peuvent exécuter ces modèles localement, éliminant ainsi les coûts élevés des API et la latence associés aux LLM hébergés dans le cloud. De plus, le déploiement local répond aux problèmes critiques de confidentialité et de conformité des données, car les données sensibles des clients ou propriétaires ne quittent jamais le réseau local. Cela rend les SLM très attractifs pour des secteurs tels que la santé, la finance et la défense, où la souveraineté des données est primordiale.\nCybersécurité Le NIST finalise les normes de cryptographie post-quantique L\u0026rsquo;Institut national des normes et technologies (NIST) a officiellement finalisé son premier ensemble d\u0026rsquo;algorithmes de chiffrement conçus pour résister aux attaques des futurs ordinateurs quantiques. Les normes publiées incluent ML-KEM (anciennement Kyber) pour le cryptage général, ainsi que ML-DSA (anciennement Dilithium) et FN-DSA (anciennement Falcon) pour les signatures numériques.\nLes ordinateurs quantiques exploitent les principes de superposition et d\u0026rsquo;intrication pour résoudre des problèmes mathématiques complexes, tels que la factorisation entière et les logarithmes discrets, de manière exponentielle plus rapide que les superordinateurs classiques. Cette capacité menace de rendre complètement obsolètes les systèmes cryptographiques largement utilisés, notamment RSA et Elliptic Curve Cryptography (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+---------------------------------+-------------------------------+ Pourquoi c’est important Même si un ordinateur quantique cryptographiquement pertinent (CRQC) pourrait encore être attendu dans des années, la menace est immédiate en raison des stratégies « récolter maintenant, décrypter plus tard ». Aujourd’hui, les adversaires interceptent et stockent activement des données cryptées de grande valeur, dans l’intention de les décrypter une fois que la technologie quantique aura atteint sa maturité. Les organisations doivent immédiatement commencer à auditer leurs actifs cryptographiques et planifier leur migration vers la cryptographie post-quantique (PQC). La transition des systèmes existants vers ces nouveaux algorithmes nécessitera un effort pluriannuel nécessitant des changements importants dans les architectures logicielles, les protocoles réseau et les modules de sécurité matériels (HSM).\nCampagnes de ransomware ciblées sur l’hyperviseur Les cybercriminels contournent de plus en plus les défenses des points de terminaison individuels pour cibler directement l\u0026rsquo;infrastructure de virtualisation. Les groupes de ransomwares, tels que ceux déployant les variantes LockBit, Akira et BlackBasta, ciblent spécifiquement VMware ESXi et d\u0026rsquo;autres hyperviseurs basés sur Linux.\nEn exploitant les vulnérabilités des interfaces de gestion des hyperviseurs ou en utilisant des informations d\u0026rsquo;identification administratives compromises, les attaquants accèdent aux serveurs nus sous-jacents. Une fois à l’intérieur, ils déploient des charges utiles de ransomware spécialisées conçues pour chiffrer directement les fichiers de disque de la machine virtuelle (VMDK), désactivant ainsi efficacement des dizaines ou des centaines de serveurs virtualisés en une seule action.\nPourquoi c’est important Cibler l’hyperviseur maximise l’effet de levier des opérateurs de ransomware. Au lieu de prendre le temps de compromettre et de chiffrer les systèmes d’exploitation individuels un par un, les attaquants peuvent paralyser l’infrastructure entière d’une entreprise en quelques minutes. Cette approche contourne également les agents EDR (Endpoint Detection and Response) traditionnels, qui s\u0026rsquo;exécutent généralement dans les systèmes d\u0026rsquo;exploitation invités plutôt que sur l\u0026rsquo;hyperviseur lui-même. Les organisations doivent sécuriser leurs plans de gestion de virtualisation, appliquer une segmentation stricte du réseau, mettre en œuvre l\u0026rsquo;authentification multifacteur (MFA) pour l\u0026rsquo;accès à l\u0026rsquo;hyperviseur et garantir que les sauvegardes sont stockées dans des environnements immuables et isolés.\nInformatique en nuage La course aux armements personnalisés en silicium Les principaux fournisseurs de cloud hyperscale – Amazon Web Services (AWS), Microsoft Azure et Google Cloud Platform (GCP) – élargissent rapidement leurs portefeuilles de silicium personnalisés. AWS a déployé ses processeurs Graviton4, Google étend la disponibilité de ses processeurs Axion basés sur Arm et Microsoft déploie ses processeurs Cobalt 100.\nHistoriquement, les fournisseurs de cloud s\u0026rsquo;appuyaient presque exclusivement sur les processeurs x86 d\u0026rsquo;Intel et d\u0026rsquo;AMD. En concevant leurs propres puces personnalisées basées sur l\u0026rsquo;architecture Arm, les hyperscalers peuvent optimiser le silicium pour des charges de travail cloud spécifiques, telles que les microservices, les bases de données et l\u0026rsquo;inférence d\u0026rsquo;apprentissage automatique.\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+-------------------+---------------------------------------------+ Pourquoi c’est important Le silicium personnalisé permet aux fournisseurs de cloud de rompre leur dépendance à l\u0026rsquo;égard des fabricants de puces traditionnels, en leur donnant un meilleur contrôle sur leurs chaînes d\u0026rsquo;approvisionnement et leurs marges bénéficiaires. Pour les clients, ces puces personnalisées offrent des rapports prix-performances nettement meilleurs, offrant souvent des performances par watt jusqu\u0026rsquo;à 30 à 40 % supérieures par rapport aux instances x86 équivalentes. En outre, l’efficacité énergétique supérieure des processeurs Arm est essentielle pour les fournisseurs de cloud qui s’efforcent d’atteindre des objectifs ambitieux en matière de durabilité et de réduction des émissions de carbone dans un contexte de boom de l’IA, gourmand en énergie.\nL’infrastructure cloud souveraine prend de l’ampleur Poussée par les tensions géopolitiques, les réglementations strictes en matière de protection des données (telles que le RGPD et Schrems II) et les préoccupations en matière de sécurité nationale, la demande d\u0026rsquo;infrastructures cloud souveraines augmente. Les gouvernements et les secteurs hautement réglementés rejettent de plus en plus les déploiements de cloud public standard en faveur de solutions cloud localisées et souveraines.\nEn réponse, les hyperscalers s’associent avec des entreprises de télécommunications locales et des fournisseurs informatiques nationaux pour créer des régions cloud isolées. Ces « clouds souverains » garantissent que toutes les données, métadonnées et systèmes opérationnels restent à l\u0026rsquo;intérieur d\u0026rsquo;une frontière nationale spécifique, gérée exclusivement par du personnel local titulaire des habilitations de sécurité appropriées.\nPourquoi c’est important Les cloud souverains résolvent la tension entre les avantages opérationnels du cloud computing public et les exigences juridiques de la souveraineté nationale des données. Ils empêchent les gouvernements étrangers d’accéder à des données sensibles par le biais de mécanismes juridiques extraterritoriaux (tels que le US CLOUD Act). À mesure que les lois sur la souveraineté numérique se durcissent à l\u0026rsquo;échelle mondiale, les entreprises opérant dans plusieurs juridictions doivent adopter des architectures cloud multirégionales et conformes aux règles souveraines pour éviter de lourdes sanctions juridiques et des perturbations opérationnelles.\nDevOps Ingénierie des plateformes et essor des plateformes de développement internes (IDP) Le modèle DevOps traditionnel selon lequel « vous le construisez, vous l\u0026rsquo;exécutez » évolue. Bien que destiné à responsabiliser les développeurs, cela a souvent entraîné une surcharge cognitive, obligeant les ingénieurs logiciels à maîtriser des concepts d\u0026rsquo;infrastructure complexes, des configurations Kubernetes et des pipelines CI/CD parallèlement à leurs principales responsabilités de codage. Pour résoudre ce problème, les organisations adoptent l’ingénierie de plateforme.\nLes équipes d\u0026rsquo;ingénierie de plate-forme créent et maintiennent des plates-formes de développement internes (IDP). Ces plates-formes offrent des fonctionnalités en libre-service, permettant aux développeurs de provisionner des bases de données, de configurer des environnements et de déployer des applications via des modèles standardisés et Golden Path. L’objectif est d’éliminer la complexité de l’infrastructure sous-jacente tout en appliquant par défaut les meilleures pratiques en matière de sécurité, de conformité et d’exploitation.\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+-----------------------------------------------------------------+ Pourquoi c’est important En réduisant les frictions des développeurs, Platform Engineering accélère directement la vitesse de livraison des logiciels et améliore l\u0026rsquo;expérience des développeurs (DevEx). Cela permet aux développeurs de se concentrer sur l’écriture de la logique métier plutôt que de se battre avec les configurations de l’infrastructure. Pour l\u0026rsquo;entreprise, les IDP garantissent que les garde-fous de sécurité et les mesures de contrôle des coûts sont directement intégrés au cycle de vie du développement, réduisant ainsi le risque de ressources cloud mal configurées et de shadow IT.\nStandardiser l’observabilité avec OpenTelemetry pour les LLM À mesure que les applications d’IA générative entrent en production, les outils traditionnels de surveillance des performances des applications (APM) s’avèrent insuffisants. Pour combler cette lacune, le projet OpenTelemetry (OTel), une norme en incubation de la CNCF, étend ses spécifications pour inclure des conventions sémantiques pour les grands modèles de langage et les flux de travail d\u0026rsquo;IA générative.\nCette extension standardise la manière dont les données de télémétrie (métriques, journaux et traces) sont collectées à partir des applications d\u0026rsquo;IA. Il permet aux développeurs de suivre les métriques spécifiques à LLM, telles que la consommation de jetons, la latence des invites et des réponses, la précision du modèle et l\u0026rsquo;efficacité de la mise en cache sémantique, aux côtés des métriques système traditionnelles telles que l\u0026rsquo;utilisation du processeur et de la mémoire.\nPourquoi c’est important Sans observabilité standardisée, le débogage d’applications d’IA complexes et en plusieurs étapes est incroyablement difficile. Lorsqu\u0026rsquo;un système agent tombe en panne ou connaît une latence élevée, les développeurs doivent suivre la requête sur plusieurs microservices, bases de données vectorielles et API LLM externes. En intégrant l\u0026rsquo;observabilité LLM dans la norme open source OpenTelemetry, les organisations peuvent éviter la dépendance vis-à-vis d\u0026rsquo;un fournisseur grâce à des outils de surveillance propriétaires et bénéficier d\u0026rsquo;une visibilité unifiée de bout en bout sur leurs piles d\u0026rsquo;applications modernes alimentées par l\u0026rsquo;IA.\n##Open Source\nL’initiative Valkey et le contrecoup des licences open source L\u0026rsquo;écosystème open source connaît un réalignement important suite aux changements de licences effectués par d\u0026rsquo;importantes entités commerciales. Un bon exemple est Redis, qui est récemment passé de la licence permissive BSD à des licences doubles propriétaires (RSALv2 et SSPL). En réponse, la Linux Foundation, soutenue par des géants de l\u0026rsquo;industrie tels qu\u0026rsquo;AWS, Google, Oracle et Ericsson, a lancé Valkey, un fork open source et entièrement compatible de la base de données en mémoire Redis.\nCet incident s\u0026rsquo;inscrit dans une tendance plus large selon laquelle les entreprises bâties sur des logiciels open source (telles que HashiCorp avec Terraform et Elastic avec Elasticsearch) se tournent vers des licences restrictives pour protéger leurs modèles commerciaux des fournisseurs de cloud qui conditionnent et revendent leurs logiciels sous forme de services gérés.\nPourquoi c’est important La mobilisation rapide de l\u0026rsquo;industrie autour de Valkey démontre la résilience de la communauté open source lorsqu\u0026rsquo;elle est soutenue par les principaux fournisseurs de cloud. Cela signale aux autres sociétés commerciales open source que le passage à des licences propriétaires peut entraîner des forks immédiats et bien financés qui dilueront leur part de marché. Pour les entreprises clientes, cette tendance met en évidence l’importance des audits de licences et la nécessité d’établir des plans d’urgence pour les dépendances open source critiques.\nIntégration continue de Rust dans le noyau Linux L\u0026rsquo;intégration du langage de programmation Rust dans le noyau Linux continue de progresser, marquant un changement historique par rapport à la dépendance exclusive au C. Sous la direction du projet Rust pour Linux, les développeurs introduisent progressivement la prise en charge de Rust pour l\u0026rsquo;écriture de pilotes de périphériques, de systèmes de fichiers et de protocoles réseau.\nLe principal moteur de cette transition réside dans les garanties strictes de Rust au moment de la compilation concernant la sécurité de la mémoire. Contrairement au C, qui oblige les développeurs à gérer manuellement la mémoire, ce qui entraîne souvent des vulnérabilités telles que des débordements de tampon, des erreurs d\u0026rsquo;utilisation après libération et des courses de données, Rust évite ces bogues au stade de la compilation sans sacrifier les performances d\u0026rsquo;exécution.\nPourquoi c’est important Les vulnérabilités de sécurité de la mémoire représentent environ 70 % de tous les bogues de sécurité graves dans les grands systèmes logiciels, y compris le noyau Linux. En réécrivant les sous-systèmes et pilotes critiques du noyau dans Rust, la communauté open source élimine systématiquement des classes entières de vulnérabilités de sécurité au niveau du système d\u0026rsquo;exploitation. Cette transition se traduira à terme par une infrastructure plus sécurisée, stable et résiliente alimentant tout, des serveurs cloud aux appareils IoT intégrés.\nLecture recommandée La transition vers la cryptographie post-quantique : Un guide détaillé du NIST sur la mise en œuvre des normes ML-KEM et ML-DSA récemment finalisées au sein des architectures d\u0026rsquo;entreprise existantes. La feuille de route du projet Valkey : Un aperçu des plans de la Linux Foundation pour la base de données Valkey, en se concentrant sur l\u0026rsquo;amélioration des performances et les intégrations cloud natives. Modèle de maturité d\u0026rsquo;ingénierie de plate-forme : Un cadre de la Cloud Native Computing Foundation (CNCF) pour évaluer et faire évoluer les plates-formes de développement internes. L\u0026rsquo;essor des frameworks d\u0026rsquo;IA agentique : Une plongée technique approfondie dans l\u0026rsquo;architecture des systèmes multi-agents et leurs implications pour l\u0026rsquo;automatisation d\u0026rsquo;entreprise. Sécurisation du plan de l\u0026rsquo;hyperviseur : Un guide de sécurité complet de CISA sur la défense de VMware ESXi et des environnements virtualisés contre les tactiques modernes de ransomware. Conclusion Les développements technologiques d’aujourd’hui mettent en évidence un thème clair : l’industrie dépasse les cycles de battage médiatique initiaux des nouvelles technologies et se concentre sur le dur travail de stabilisation, d’optimisation et de sécurité. Dans le domaine de l’IA, cela est évident dans l’évolution vers des flux de travail autonomes et multi-agents et des modèles de périphérie hautement efficaces qui offrent une valeur commerciale pratique. Dans le domaine des infrastructures, l’essor du silicium cloud personnalisé et de l’ingénierie des plates-formes démontre un engagement à réduire les coûts et les frictions des développeurs. Pendant ce temps, les secteurs de la cybersécurité et de l’open source s’attaquent de manière proactive aux risques systémiques, que ce soit en se préparant à l’avenir quantique, en sécurisant les couches de virtualisation ou en défendant l’intégrité des licences et des bases de code open source. Les organisations qui réussiront à gérer ces changements structurels seront bien placées pour construire des architectures numériques résilientes, évolutives et sécurisées pour l’avenir.\n","date":"13 juillet 2026","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/2026-07-13-digital-radar/","series":[{"title":"Digital-Radar","url":"/fr/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/fr/tags/ai/"},{"title":"Cybersecurity","url":"/fr/tags/cybersecurity/"},{"title":"Cloud","url":"/fr/tags/cloud/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Open-Source","url":"/fr/tags/open-source/"}],"timestamp":1783921532,"title":"Radar Numérique 2026-07-13"},{"authors":[],"categories":[{"title":"Technology","url":"/fr/categories/technology/"},{"title":"Digital-Radar","url":"/fr/categories/digital-radar/"}],"content":" Radar numérique Résumé Le paysage technologique actuel est défini par une transition critique de la mise en œuvre expérimentale à la maturité opérationnelle. Dans le domaine de l\u0026rsquo;intelligence artificielle, l\u0026rsquo;industrie s\u0026rsquo;éloigne des modèles monolithiques de force brute pour se tourner vers des flux de travail agents hautement optimisés et des modèles localisés en petit langage (SLM). Cette transition promet de démocratiser les capacités de l’IA tout en répondant aux préoccupations pressantes concernant les coûts opérationnels et la confidentialité des données.\nDans le même temps, le domaine de la cybersécurité est aux prises avec des vulnérabilités systémiques au sein de la chaîne d’approvisionnement logicielle, obligeant les organisations à réévaluer les limites de confiance et à accélérer l’adoption de langages de programmation sécurisés en termes de mémoire.\nDans le domaine des infrastructures, le Cloud Computing et le DevOps convergent sur deux fronts : la montée en puissance des architectures cloud souveraines pour satisfaire aux réglementations géopolitiques strictes, et l\u0026rsquo;institutionnalisation de l\u0026rsquo;ingénierie des plateformes pour gérer la charge cognitive du développement cloud natif.\nEnfin, l’écosystème open source traverse une profonde crise d’identité alors que les projets fondateurs passent à des modèles de licence restrictifs, déclenchant des forks dirigés par la communauté qui redéfinissent les normes de l’industrie. Ce rapport analyse ces développements cruciaux, offrant une profondeur technique et un contexte stratégique aux leaders technologiques.\nIntelligence artificielle Le passage aux workflows agents et aux petits modèles de langage Le paradigme de l’intelligence artificielle générative connaît un changement structurel fondamental. Au cours des deux dernières années, l’attention de l’industrie a été dominée par la recherche d’un plus grand nombre de paramètres dans les grands modèles linguistiques (LLM) frontières. Cependant, la réalité économique de l\u0026rsquo;exécution de modèles massifs, couplée aux contraintes de latence des applications temps réel, a catalysé un double mouvement : l\u0026rsquo;essor de « l\u0026rsquo;IA agentique » et l\u0026rsquo;optimisation rapide des Small Language Models (SLM).\nL\u0026rsquo;IA agentique représente une transition d\u0026rsquo;interactions passives, rapides et réactives, vers des systèmes autonomes et orientés vers des objectifs. Au lieu de s\u0026rsquo;appuyer sur un modèle unique et massif pour générer une solution complète, les architectures agentiques utilisent des réseaux de modèles spécialisés plus petits qui collaborent pour résoudre des tâches complexes. Ces agents utilisent un raisonnement itératif, l\u0026rsquo;exécution d\u0026rsquo;outils (tels que l\u0026rsquo;interrogation de bases de données ou l\u0026rsquo;exécution de code) et des boucles d\u0026rsquo;autocorrection. Des frameworks tels que LangGraph, AutoGen et CrewAI passent d\u0026rsquo;outils de développement expérimentaux à des couches d\u0026rsquo;orchestration de niveau entreprise.\nParallèlement, les SLM – généralement définis comme des modèles comportant moins de 10 milliards de paramètres, tels que le Phi-3 de Microsoft, le Llama 3.1 8B de Meta et les dernières offres Edge de Mistral – démontrent des capacités qui rivalisent avec les modèles fermés des générations précédentes. Grâce à des techniques de quantification avancées, des ensembles de données de formation distillés et des optimisations spécifiques au matériel, ces modèles peuvent désormais fonctionner efficacement sur du matériel grand public, des appareils de périphérie et des serveurs d\u0026rsquo;entreprise localisés.\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] Pourquoi c’est important Ce changement est essentiel pour trois raisons principales : le coût, la confidentialité et la fiabilité.\nPremièrement, la viabilité financière des initiatives d’IA en entreprise dépend de la réduction des coûts d’inférence. L\u0026rsquo;exécution de SLM spécialisés pour des tâches ciblées est bien moins coûteuse que le routage de chaque requête vers une API propriétaire comportant plusieurs milliards de paramètres.\nDeuxièmement, la confidentialité des données et la conformité aux réglementations (telles que le RGPD et la HIPAA) font de la transmission de données propriétaires vers des modèles externes hébergés dans le cloud une responsabilité juridique importante. Les SLM localisés permettent aux entreprises de conserver les données sensibles entièrement dans leur périmètre sécurisé.\nEnfin, les flux de travail agents répondent au manque de fiabilité inhérent aux LLM. En décomposant les tâches complexes en étapes discrètes et vérifiables exécutées par des agents spécialisés, les organisations peuvent mettre en place des garde-fous rigoureux, réduisant considérablement les hallucinations et améliorant le résultat déterministe requis pour les environnements de production.\nCybersécurité Vulnérabilités de la chaîne d’approvisionnement logicielle et pression pour la sécurité de la mémoire Le paysage de la cybersécurité est de plus en plus défini par des menaces systémiques ciblant la chaîne d’approvisionnement des logiciels. Plutôt que de tenter de pénétrer directement dans les périmètres d’entreprise bien défendus, les auteurs de menaces sophistiquées concentrent leurs efforts en amont, compromettant les bibliothèques open source, les dépendances tierces et les appareils de périphérie auxquels les organisations font implicitement confiance.\nLes implications à long terme de la tentative de porte dérobée XZ Utils continuent de se répercuter sur la communauté de la sécurité. Cet incident a mis en évidence une vulnérabilité critique dans l’écosystème open source : la dépendance de l’infrastructure Internet fondamentale à l’égard de projets sous-financés et entretenus par des bénévoles. Les attaquants exploitent l\u0026rsquo;ingénierie sociale et des campagnes de toilettage sur plusieurs années pour obtenir le statut de responsable sur les référentiels critiques, dans le but d\u0026rsquo;injecter des portes dérobées sophistiquées et obscurcies.\nEn parallèle, les appareils de pointe des entreprises, tels que les passerelles de réseau privé virtuel (VPN) et les pare-feu de fournisseurs comme Ivanti, Palo Alto Networks et Fortinet, sont devenus les principales cibles de l\u0026rsquo;exploitation Zero Day. Ces appareils, qui exécutent souvent des bases de code existantes sans mesures modernes d’atténuation des exploits, servent de points d’accès initiaux aux groupes d’espionnage parrainés par l’État et aux affiliés de ransomwares.\nEn réponse à ces vulnérabilités persistantes, la Cybersecurity and Infrastructure Security Agency (CISA), aux côtés de partenaires internationaux, a intensifié son plaidoyer en faveur des principes « Secure by Design ». Un pilier central de cette initiative est la transition des langages de programmation non sécurisés en mémoire comme C et C++ vers des alternatives sécurisées en mémoire, principalement Rust et Go.\nPourquoi c’est important La centralisation de la distribution des logiciels signifie qu’une seule compromission en amont peut avoir des effets catastrophiques en cascade sur des milliers d’organisations en aval. Les mesures de sécurité réactives traditionnelles, telles que les antivirus basés sur les signatures et les pare-feu périmétriques, sont inefficaces contre les logiciels compromis possédant des signatures cryptographiques et des privilèges administratifs légitimes.\nLes organisations doivent passer d’une posture réactive à une architecture proactive et sans confiance. Cela nécessite la mise en œuvre d’une ingestion et d’une analyse continue de la nomenclature logicielle (SBOM) pour gagner en visibilité sur les dépendances transitives. De plus, les efforts de la CISA en faveur de la sécurité de la mémoire ne sont pas seulement académiques ; les vulnérabilités de corruption de mémoire représentent environ 70 % de toutes les failles de sécurité graves. En faisant passer les infrastructures critiques et les composants logiciels de base vers des langages sécurisés pour la mémoire, l’industrie peut éliminer systématiquement des classes entières de vulnérabilités, modifiant fondamentalement l’économie de la cyberdéfense.\nInformatique en nuage Les cloud souverains et le silicium personnalisé redéfinissent l’infrastructure Le secteur du cloud computing connaît une double transformation motivée par les pressions géopolitiques et les limites physiques de la mise à l’échelle des semi-conducteurs. Alors que les lois sur la souveraineté des données se durcissent à l’échelle mondiale et que les exigences informatiques de l’intelligence artificielle augmentent, les hyperscalers du cloud sont contraints d’innover au-delà du matériel de base traditionnel et des modèles de centres de données centralisés.\nLes initiatives de cloud souverain sont passées d’offres de conformité de niche aux exigences architecturales traditionnelles. Poussés par les cadres stricts de protection des données de l’Union européenne et les mouvements législatifs similaires dans les pays d’Asie-Pacifique, AWS, Microsoft Azure et Google Cloud Platform (GCP) établissent des zones cloud physiquement et logiquement isolées. Ces « régions souveraines » sont entièrement gérées par des citoyens locaux, utilisent des chaînes d\u0026rsquo;approvisionnement localisées et garantissent que les données, les métadonnées et les systèmes d\u0026rsquo;identité restent strictement à l\u0026rsquo;intérieur des frontières nationales, à l\u0026rsquo;abri de la surveillance étrangère ou de la portée juridique (comme le US CLOUD Act).\nSimultanément, les réalités économiques et thermiques liées à l’exécution de charges de travail massives ont accéléré l’adoption du silicium personnalisé. Les hyperscalers contournent de plus en plus les fabricants de puces traditionnels pour concevoir leurs propres circuits intégrés spécifiques à une application (ASIC) et processeurs ARM. Les exemples incluent Graviton4 et Trainium2 d\u0026rsquo;AWS, le processeur Axion et le TPU v5p de Google, ainsi que les Cobalt 100 et Maia 100 de Microsoft.\nFournisseur Processeur personnalisé Formation/Inférence IA ASIC Proposition de valeur principale AWS Graviton4 Trainium2 / Inférence2 Un rapport qualité-prix élevé et une intégration profonde de l\u0026rsquo;écosystème Google Cloud Axion (BRAS) TPU v5p Optimisé pour la formation à grande échelle sur l\u0026rsquo;IA et Kubernetes Microsoft Azure Cobalt 100 Maia 100 Adapté aux charges de travail Azure et aux services OpenAI Pourquoi c’est important Pour les architectes d’entreprise, la montée en puissance des cloud souverains signifie que les stratégies multi-cloud et cloud hybride doivent désormais intégrer les frontières géopolitiques. La conformité ne concerne plus seulement les clés de chiffrement ; il s\u0026rsquo;agit de géographie physique, de juridiction opérationnelle et de statut juridique de l\u0026rsquo;opérateur de cloud. Ne pas aligner l’architecture cloud sur ces réalités risque de sévères sanctions réglementaires et de perturbations opérationnelles.\nSur le plan matériel, l’adoption de silicium personnalisé est essentielle pour gérer l’augmentation du coût total de possession (TCO) de l’infrastructure cloud. Les processeurs personnalisés basés sur ARM offrent un rapport prix/performances jusqu\u0026rsquo;à 50 % supérieur et une consommation d\u0026rsquo;énergie nettement inférieure par rapport aux architectures x86 traditionnelles. Pour les organisations exécutant des microservices à grande échelle ou formant des modèles d\u0026rsquo;apprentissage automatique propriétaires, la migration vers des instances de silicium personnalisées est le levier le plus efficace pour optimiser les dépenses cloud et répondre aux mandats de développement durable de l\u0026rsquo;entreprise.\nDevOps Ingénierie de plateforme et standardisation d’OpenTelemetry Le mouvement DevOps connaît une évolution structurelle alors que les organisations cherchent à atténuer la complexité des environnements cloud natifs modernes. L\u0026rsquo;idéal historique selon lequel « vous le construisez, vous l\u0026rsquo;exécutez » s\u0026rsquo;est, dans de nombreux cas, transformé en épuisement des développeurs et en fragmentation opérationnelle. Pour contrer cela, l’industrie se consolide rapidement autour de l’ingénierie des plates-formes et de la standardisation de l’OpenTelemetry.\nL\u0026rsquo;ingénierie de plate-forme se concentre sur la conception et la fourniture de plates-formes de développement internes (IDP). Plutôt que d\u0026rsquo;exiger que chaque ingénieur logiciel maîtrise les manifestes Kubernetes, les configurations Terraform et les pipelines CI/CD complexes, les équipes d\u0026rsquo;ingénierie de plate-forme créent des « voies dorées » : des portails et des API en libre-service organisés qui éliminent la complexité de l\u0026rsquo;infrastructure. Des outils tels que Backstage (à l\u0026rsquo;origine open source par Spotify) sont devenus la norme de l\u0026rsquo;industrie pour la création de ces portails de développeurs, permettant aux ingénieurs de fournir des environnements sécurisés et conformes en un seul 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] En parallèle, le défi de la surveillance de ces architectures de microservices éphémères et hautement distribuées a conduit à l’adoption quasi universelle d’OpenTelemetry (OTel) comme norme d’observabilité native du cloud. OpenTelemetry, un projet Cloud Native Computing Foundation (CNCF), fournit une spécification et des outils indépendants du fournisseur pour collecter des métriques, des journaux et des traces. Le secteur s\u0026rsquo;éloigne des agents de surveillance propriétaires, qui enferment les organisations dans des plates-formes SaaS spécifiques, pour se tourner vers des architectures natives OTel.\nPourquoi c’est important L\u0026rsquo;ingénierie de plate-forme s\u0026rsquo;attaque directement à la surcharge cognitive qui afflige les équipes de développement de logiciels modernes. En centralisant la gestion de l\u0026rsquo;infrastructure et les garde-fous de sécurité au sein d\u0026rsquo;un IDP, les organisations peuvent accélérer considérablement la vitesse des développeurs tout en garantissant une conformité, une sécurité et un contrôle des coûts cohérents. Il transforme DevOps d\u0026rsquo;un ensemble de pratiques décentralisées et souvent chaotiques en un produit interne structuré et évolutif.\nLa standardisation d’OpenTelemetry est également transformatrice. Il dissocie la couche de collecte de données de télémétrie de la couche d\u0026rsquo;analyse. Cela évite le verrouillage du fournisseur, permettant aux organisations d\u0026rsquo;acheminer leurs données d\u0026rsquo;observabilité vers plusieurs backends (tels que Datadog, Dynatrace, Honeycomb ou des instances Prometheus/Grafana auto-hébergées) sans instrumenter leurs bases de code plusieurs fois. À une époque où les coûts de sortie de données et d’observabilité montent en flèche, OTel offre la flexibilité architecturale nécessaire pour optimiser les stratégies de surveillance.\n##Open Source\nLe schisme des licences et l’essor des Community Forks L’écosystème des logiciels open source (OSS) traverse une profonde crise philosophique et économique. Un nombre croissant d\u0026rsquo;entreprises open source financées par du capital-risque abandonnent les licences open source permissives au profit de licences restrictives « sources disponibles » ou orientées business. Cette tendance a fracturé les communautés de longue date et a forcé une réévaluation de la relation entre les entités commerciales et les contributeurs open source.\nL\u0026rsquo;exemple récent le plus marquant est Redis, qui est passé d\u0026rsquo;une licence BSD permissive à un système de double licence sous la licence Redis Source Available (RSALv2) et la licence publique côté serveur (SSPLv1). Cela fait suite à des mesures similaires prises par HashiCorp (Terraform passant à la licence Business Source), Elastic et MongoDB au cours des années précédentes. Ces entreprises soutiennent que les hyperscalers du cloud exploitent leur code open source pour proposer des services gérés sans contribuer aux projets en amont, ce qui rend le modèle open source traditionnel non viable commercialement. La réponse de la communauté et de l’industrie à ces changements de licences a été rapide et décisive. À la suite de l\u0026rsquo;annonce de Redis, la Linux Foundation, avec le soutien de grandes entreprises technologiques telles qu\u0026rsquo;AWS, Google et Oracle, a lancé Valkey, un fork hautes performances et entièrement open source de Redis basé sur la dernière version sous licence BSD. De même, la transition de Terraform par HashiCorp a conduit à la création de OpenTofu, un fork communautaire à succès sous les auspices de la Linux Foundation.\nPourquoi c’est important Ce schisme en matière de licences introduit des risques juridiques et opérationnels importants pour les entreprises. Les logiciels qui étaient autrefois librement utilisables sous licences permissives peuvent désormais être soumis à des restrictions interdisant leur utilisation dans des environnements concurrentiels ou nécessitant des accords de licence commerciale complexes et coûteux.\nLes organisations doivent mettre en œuvre des politiques de gouvernance open source strictes pour auditer en permanence leurs dépendances logicielles. L’émergence rapide et le soutien de l’industrie de forks comme Valkey et OpenTofu démontrent que l’industrie technologique est prête à mobiliser des ressources massives pour maintenir des alternatives ouvertes et neutres vis-à-vis des fournisseurs aux composants d’infrastructure critiques. Pour les leaders technologiques, la leçon est claire : la dépendance à l’égard de projets open source d’un seul fournisseur comporte des risques inhérents, et la participation active à des fondations neutres (comme la CNCF ou la Linux Foundation) est essentielle pour la stabilité architecturale à long terme.\nLecture recommandée La pragmatique de l\u0026rsquo;IA agentique : Une exploration approfondie des cadres d\u0026rsquo;orchestration multi-agents, en se concentrant sur la gestion des états, l\u0026rsquo;intégration d\u0026rsquo;outils et les stratégies d\u0026rsquo;optimisation des coûts dans les environnements de production. Transition vers des systèmes sécurisés en mémoire : Un guide pratique destiné aux responsables de l\u0026rsquo;ingénierie sur la migration des bases de code C/C++ héritées vers Rust, détaillant les modèles d\u0026rsquo;interopérabilité et les avantages en matière de sécurité appliqués par le compilateur. Architecture pour la souveraineté des données : Une analyse complète des exigences techniques, des stratégies de gestion des clés de chiffrement et des cadres juridiques nécessaires au déploiement d\u0026rsquo;architectures cloud multirégionales conformes. Mise en œuvre de plates-formes de développement internes (IDP) : Un plan étape par étape pour créer des portails de développeurs à l\u0026rsquo;aide de Backstage, en se concentrant sur la réduction de la charge cognitive et l\u0026rsquo;établissement de « voies dorées » sécurisées. L\u0026rsquo;économie des licences Open Source : Un regard analytique sur les pressions commerciales à l\u0026rsquo;origine du passage aux licences disponibles à la source et sur la viabilité à long terme des forks communautaires comme Valkey et OpenTofu. Conclusion Le paysage technologique actuel exige un équilibre sophistiqué entre innovation rapide et gestion rigoureuse des risques. La transition vers l’IA agentique et les petits modèles linguistiques ouvre la voie vers une intelligence artificielle durable, privée et hautement fonctionnelle. Cependant, ces progrès doivent être soutenus par des pratiques de sécurité robustes qui répondent aux réalités d’une chaîne d’approvisionnement logicielle compromise. Dans le domaine des infrastructures, l’essor des cloud souverains et du silicium personnalisé met en évidence la nécessité d’aligner l’architecture technique sur les réalités géopolitiques et l’efficacité matérielle. Pendant ce temps, Platform Engineering et OpenTelemetry fournissent les cadres opérationnels nécessaires pour gérer cette complexité croissante sans épuiser les équipes d’ingénierie.\nEnfin, les batailles pour les licences dans la communauté open source nous rappellent brutalement que les logiciels fondamentaux du Web moderne sont soumis à des changements économiques et juridiques, exigeant une gouvernance vigilante et une adaptabilité stratégique de la part des leaders technologiques du monde entier.\n","date":"12 juillet 2026","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/2026-07-12-digital-radar/","series":[{"title":"Digital-Radar","url":"/fr/series/digital-radar/"}],"smallImg":"","tags":[{"title":"Ai","url":"/fr/tags/ai/"},{"title":"Cybersecurity","url":"/fr/tags/cybersecurity/"},{"title":"Cloud","url":"/fr/tags/cloud/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Open-Source","url":"/fr/tags/open-source/"}],"timestamp":1783843594,"title":"Radar Numérique 2026-07-12"},{"authors":[],"categories":[{"title":"Devops","url":"/fr/categories/devops/"},{"title":"Azure","url":"/fr/categories/azure/"}],"content":"Dans partie 1, le azure-pipelines.yml a été fusionné dans la branche main via une Pull Request. Dans cette deuxième partie, nous attachons ce YAML à un pipeline et l\u0026rsquo;exécutons sur un agent Windows hébergé par Microsoft dans le cloud.\nLa section Pipelines La section Pipelines dans la barre latérale contient plus d\u0026rsquo;éléments que Repos :\nPipelines — les pipelines CI (build) Environnements – objectifs de déploiement tels que l\u0026rsquo;acceptation et la production Releases — les pipelines de versions visuelles classiques (ancien système, remplacé par YAML à plusieurs étapes) Bibliothèque — groupes de variables et fichiers sécurisés Groupes de tâches : blocs de tâches réutilisables pouvant être partagés sur plusieurs pipelines Groupes de déploiement — agents auto-hébergés regroupés par environnement Sur un nouveau projet, la liste Pipelines est vide.\nCréer un pipeline : l’assistant Via Créer un pipeline, l\u0026rsquo;assistant en quatre étapes démarre : Connecter → Sélectionner → Configurer → Réviser.\nÉtape 1 — Connectez-vous : où est le code ? ADO prend en charge Azure Repos Git, GitHub, Bitbucket Cloud, d\u0026rsquo;autres serveurs Git et Subversion. En bas, il y a également un lien vers l\u0026rsquo;éditeur classique — l\u0026rsquo;ancien générateur de pipeline visuel sans YAML. Ceci n’est plus activement développé.\nÉtape 2 — Sélectionnez : quel référentiel ? Puisqu\u0026rsquo;il n\u0026rsquo;y a qu\u0026rsquo;un seul dépôt dans le projet, dev-ops-lab01 est la seule option.\nÉtape 3 — Configurer est automatiquement ignorée. ADO détecte qu\u0026rsquo;un azure-pipelines.yml existe déjà à la racine du dépôt et passe directement à Review.\nÉtape 4 — Vérifier : le YAML existant est affiché. ADO lit le fichier directement à partir du dépôt — rien n\u0026rsquo;est copié ou stocké séparément. Le pipeline est le YAML dans le dépôt.\nLe YAML créé dans la partie 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; Les composants clés :\nMot clé Signification trigger Un push vers main démarre automatiquement le pipeline pool.vmImage Agent hébergé par Microsoft : windows-latest est l\u0026rsquo;image Windows Server la plus récente steps La liste des étapes à exécuter task: PowerShell@2 Une tâche ADO intégrée, version 2 $(Build.BuildNumber) Variable ADO intégrée, renseignée automatiquement $(Build.SourceBranchName) Variable ADO intégrée avec le nom de la branche Via Exécuter, le pipeline est démarré pour la première fois.\nLa première exécution Après le démarrage, ADO affiche le résumé de l\u0026rsquo;exécution. Le pipeline s\u0026rsquo;est terminé avec succès.\nCe qui est visible :\n#20260414.1 — numéro de build, construit à partir de la date et du numéro de séquence PR fusionné 1 : ajout d\u0026rsquo;azure-pipelines.yml — le commit sur lequel il a été exécuté branche main, commit aaedef9f — le commit de fusion exact du PR dans la partie 1 Étape : 1 tâche terminée en 15 s – durée d\u0026rsquo;exécution totale, y compris le provisionnement des agents Le journal des tâches En cliquant sur Tâche, vous ouvrez la vue détaillée du journal. La barre latérale gauche affiche toutes les étapes qu\u0026rsquo;ADO exécute automatiquement autour des étapes YAML personnalisées :\nInitialiser la tâche — l\u0026rsquo;agent est configuré Checkout dev-ops-lab01@main — le dépôt est cloné sur l\u0026rsquo;agent Informations système — la tâche PowerShell personnalisée Post-job : Checkout – nettoyage après le check-out Finaliser le travail : l\u0026rsquo;agent approuve Rapport sur l\u0026rsquo;état de la construction — l\u0026rsquo;état est signalé au dépôt Le journal principal affiche les métadonnées de l\u0026rsquo;agent : Pool: Azure Pipelines, Image: windows-latest, Agent: Azure Pipelines 1. Il s\u0026rsquo;agit d\u0026rsquo;une machine virtuelle jetable dans un centre de données Microsoft qui a été provisionnée à la demande pour cette tâche et détruite une fois terminée.\nSortie PowerShell Résultat de l’étape Informations système :\n1Hostname: runnervm67wqg 2OS: Windows_NT 3Build number: 20260414.1 4Branch: main L\u0026rsquo;agent est nommé runnervm67wqg : une machine virtuelle Windows hébergée par Microsoft et attribuée de manière aléatoire. Les variables ADO $(Build.BuildNumber) et $(Build.SourceBranchName) ont été automatiquement renseignées par la plateforme avec les valeurs correctes.\nCe qui a été réalisé Après cette deuxième partie, le fonctionnement d\u0026rsquo;un pipeline YAML dans Azure DevOps apparaît clairement :\nL\u0026rsquo;assistant de pipeline lie un fichier YAML du dépôt à une définition de pipeline ADO détecte automatiquement un azure-pipelines.yml existant Un agent hébergé par Microsoft est provisionné à la demande, exécute la tâche et est ensuite supprimé Les variables ADO intégrées sont disponibles à chaque étape sans aucune configuration Le journal des tâches affiche toutes les étapes, y compris les étapes automatiques ajoutées par ADO lui-même Dans la troisième partie, nous étendrons le pipeline avec des stages et des jobs — les éléments de base de véritables pipelines CI/CD avec plusieurs environnements.\n","date":"14 avril 2026","img":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover.png","lang":"fr","langName":"Français","largeImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_ce8b2a8b791d2d56.png","permalink":"/fr/posts/2026-azure-devops-pipelines-eerste-pipeline/","series":[{"title":"Azure DevOps Lab","url":"/fr/series/azure-devops-lab/"}],"smallImg":"/posts/2026-azure-devops-pipelines-eerste-pipeline/cover_hu_7a21eef3dae21511.png","tags":[{"title":"Azure-Devops","url":"/fr/tags/azure-devops/"},{"title":"Pipelines","url":"/fr/tags/pipelines/"},{"title":"YAML","url":"/fr/tags/yaml/"},{"title":"Ci-Cd","url":"/fr/tags/ci-cd/"},{"title":"PowerShell","url":"/fr/tags/powershell/"},{"title":"Windows","url":"/fr/tags/windows/"},{"title":"Lab","url":"/fr/tags/lab/"}],"timestamp":1776186060,"title":"Azure DevOps — Partie 2 : Votre Premier Pipeline YAML"},{"authors":[],"categories":[{"title":"Devops","url":"/fr/categories/devops/"},{"title":"Azure","url":"/fr/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 avril 2026","img":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch.png","lang":"fr","langName":"Français","largeImg":"/posts/2026-azure-devops-repos-branches-policies-pull-requests/screenshot-11-feature-branch_hu_d980affb1eb962a9.png","permalink":"/fr/posts/2026-azure-devops-repos-branches-policies-pull-requests/","series":[{"title":"Azure DevOps Lab","url":"/fr/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":"/fr/tags/azure-devops/"},{"title":"Git","url":"/fr/tags/git/"},{"title":"Repos","url":"/fr/tags/repos/"},{"title":"Pull-Request","url":"/fr/tags/pull-request/"},{"title":"Branch-Policy","url":"/fr/tags/branch-policy/"},{"title":"YAML","url":"/fr/tags/yaml/"},{"title":"Windows","url":"/fr/tags/windows/"},{"title":"Lab","url":"/fr/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":"/fr/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/fr/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 avril 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-home-lab-ad-dns-ca-rdp.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/ws2022-home-lab-ad-dns-ca-rdp/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/fr/tags/windows-server-2022/"},{"title":"Proxmox","url":"/fr/tags/proxmox/"},{"title":"Active Directory","url":"/fr/tags/active-directory/"},{"title":"DNS","url":"/fr/tags/dns/"},{"title":"Certificate Authority","url":"/fr/tags/certificate-authority/"},{"title":"PKI","url":"/fr/tags/pki/"},{"title":"Group Policy","url":"/fr/tags/group-policy/"},{"title":"RDP","url":"/fr/tags/rdp/"},{"title":"PowerShell","url":"/fr/tags/powershell/"},{"title":"Lab","url":"/fr/tags/lab/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Security","url":"/fr/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":"/fr/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/fr/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 mars 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-template-preparation.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/ws2022-proxmox-template-preparation/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/fr/tags/windows-server-2022/"},{"title":"Proxmox","url":"/fr/tags/proxmox/"},{"title":"Virtualization","url":"/fr/tags/virtualization/"},{"title":"Lab","url":"/fr/tags/lab/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"VirtIO","url":"/fr/tags/virtio/"},{"title":"Sysprep","url":"/fr/tags/sysprep/"},{"title":"Template","url":"/fr/tags/template/"},{"title":"PowerShell","url":"/fr/tags/powershell/"}],"timestamp":1774944000,"title":"Windows Server 2022 in Proxmox — Template Preparation"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/fr/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/fr/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 mars 2026","img":"https://1552afcb.notes-6if.pages.dev/images/ws2022-proxmox-vm-creation.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/ws2022-proxmox-vm-creation/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Windows Server 2022","url":"/fr/tags/windows-server-2022/"},{"title":"Proxmox","url":"/fr/tags/proxmox/"},{"title":"Virtualization","url":"/fr/tags/virtualization/"},{"title":"Lab","url":"/fr/tags/lab/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"VirtIO","url":"/fr/tags/virtio/"},{"title":"VM","url":"/fr/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":"/fr/authors/martijnvandenboom/"}],"categories":[{"title":"Windows","url":"/fr/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 mars 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-server-2022-ad-dns.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/windows_server_2022_ad_dns/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/fr/tags/windows/"},{"title":"Active Directory","url":"/fr/tags/active-directory/"},{"title":"DNS","url":"/fr/tags/dns/"},{"title":"Windows Server 2022","url":"/fr/tags/windows-server-2022/"},{"title":"VMware","url":"/fr/tags/vmware/"},{"title":"Lab","url":"/fr/tags/lab/"},{"title":"Devops","url":"/fr/tags/devops/"},{"title":"Domain Controller","url":"/fr/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":"/fr/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 janvier 2026","img":"https://1552afcb.notes-6if.pages.dev/images/windows-packet-capturing-ldaps.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/windows_packet_capturing/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Windows","url":"/fr/tags/windows/"},{"title":"LDAPS","url":"/fr/tags/ldaps/"},{"title":"TLS","url":"/fr/tags/tls/"},{"title":"Networking","url":"/fr/tags/networking/"},{"title":"Security","url":"/fr/tags/security/"},{"title":"Pktmon","url":"/fr/tags/pktmon/"}],"timestamp":1768763941,"title":"Windows Packet Capturing for LDAPS Analysis"},{"authors":[{"title":"ing. M.A.C.M. (Martijn) van den Boom","url":"/fr/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 juillet 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-awx-minikube.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/ansible_awx/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Install","url":"/fr/tags/install/"},{"title":"Ansible","url":"/fr/tags/ansible/"},{"title":"Minikube","url":"/fr/tags/minikube/"},{"title":"Ubuntu","url":"/fr/tags/ubuntu/"},{"title":"AWX","url":"/fr/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":"/fr/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 juin 2025","img":"https://1552afcb.notes-6if.pages.dev/images/ansible-automation-platform.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/ansible_automation_platform/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"RedHat","url":"/fr/tags/redhat/"},{"title":"RHEL","url":"/fr/tags/rhel/"},{"title":"Ansible","url":"/fr/tags/ansible/"},{"title":"Automation","url":"/fr/tags/automation/"},{"title":"Platform","url":"/fr/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":"/fr/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 mars 2025","img":"https://1552afcb.notes-6if.pages.dev/images/openshift-kubernetes-vergelijking.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/pas_op_met_openshift/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/fr/tags/kubernetes/"},{"title":"Resources","url":"/fr/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":"/fr/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 mars 2025","img":"https://1552afcb.notes-6if.pages.dev/images/kubernetes-resources-warning.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/pas_op_met_kubernetes/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Kubernetes","url":"/fr/tags/kubernetes/"},{"title":"Resources","url":"/fr/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":"/fr/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 mars 2025","img":"https://1552afcb.notes-6if.pages.dev/images/golang-go-concurrency.svg","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/golang_go_concurrency/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Golang","url":"/fr/tags/golang/"},{"title":"Go","url":"/fr/tags/go/"},{"title":"Multitasking","url":"/fr/tags/multitasking/"},{"title":"Concurrency","url":"/fr/tags/concurrency/"}],"timestamp":1742673643,"title":"Golang / Go: The Smart Programming Language for Efficient Software and Concurrency"},{"authors":[],"categories":[],"content":"","date":"23 février 2025","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/contact/","series":[],"smallImg":"","tags":[],"timestamp":1740268800,"title":"Contact"},{"authors":[],"categories":[],"content":"Merci pour votre message !\nNous apprécions que vous nous contactiez. Notre équipe est sur place et vous répondra dans les plus brefs délais.\nSi vous avez des questions entre-temps, n\u0026rsquo;hésitez pas à nous envoyer un autre message !\n","date":"14 février 2025","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/thank-you/","series":[],"smallImg":"","tags":[],"timestamp":1739491200,"title":"Merci"},{"authors":[],"categories":[],"content":" BIOGRAPHIE Martijn est un professionnel de l\u0026rsquo;informatique expérimenté avec plus de 26 ans d\u0026rsquo;expérience dans les technologies de l\u0026rsquo;information, la gestion des infrastructures et l\u0026rsquo;automatisation. Tout au long de sa carrière, il a travaillé dans des environnements commerciaux et gouvernementaux complexes, contribuant à des projets pour des organisations telles que CGI, Rijkswaterstaat, ProRail et la municipalité de Bois-le-Duc.\nSon travail s\u0026rsquo;est concentré sur l\u0026rsquo;administration système, l\u0026rsquo;automatisation, la surveillance, la mise en réseau et la conception d\u0026rsquo;infrastructures informatiques fiables et évolutives.\nCONTEXTE\nLa fascination de Martijn pour les ordinateurs a commencé pendant ses études d\u0026rsquo;ingénierie de construction (HBO Bouwkunde) à Tilburg à la fin des années 1990, lorsqu\u0026rsquo;il a été initié à la programmation Microsoft Visual Basic. Créer de petites applications et voir comment les logiciels pouvaient automatiser le travail répétitif a suscité une passion durable pour l\u0026rsquo;informatique et le développement de logiciels.\nCette curiosité s\u0026rsquo;est progressivement transformée en une carrière professionnelle à long terme dans l\u0026rsquo;informatique et l\u0026rsquo;automatisation.\nEXPERTISE DE BASE\nDéveloppement Python Automatisation Ansible Scripts Bash et PowerShell *Administration des systèmes Linux Plateformes de gestion et de surveillance de réseau Pratiques CI/CD L\u0026rsquo;amélioration de la fiabilité et de l\u0026rsquo;efficacité grâce à l\u0026rsquo;automatisation est restée un thème central tout au long de son travail.\nMENTORAT ET ÉDUCATION\nParallèlement à sa carrière professionnelle, Martijn a également été actif dans le mentorat et l\u0026rsquo;éducation. Le travail bénévole comprend l\u0026rsquo;enseignement de compétences informatiques, le mentorat d\u0026rsquo;élèves du secondaire et l\u0026rsquo;introduction de concepts de programmation utilisant C# (Visual Studio) et Python (Spyder/Anaconda).\nDURABILITÉ ET INITIATIVES INTERNATIONALES\nMartijn est également impliqué dans des initiatives de développement durable et international. Un exemple est le projet agricole Black Soldier Fly (BSF) en Ouganda, développé en collaboration avec Foundation Foods Ltd. Le projet se concentre sur la production durable de protéines d’insectes pour l’alimentation animale tout en recyclant les déchets organiques.\nEn outre, Martijn a travaillé sur le concept et la conception du système de paiement pour la collecte des déchets en polyéthylène Planet Protection. Ce concept vise à améliorer la collecte des déchets plastiques en permettant aux collecteurs d\u0026rsquo;apporter les déchets de polyéthylène aux points de collecte locaux et de recevoir des paiements numériques basés sur le poids, soutenant à la fois la protection de l\u0026rsquo;environnement et les opportunités économiques locales.\nPERSONNEL\nMartijn vit actuellement à Utrecht, aux Pays-Bas, avec sa femme. La technologie, l\u0026rsquo;automatisation et l\u0026rsquo;innovation durable continuent d\u0026rsquo;être des motivations centrales tant dans son travail professionnel que dans ses initiatives personnelles.\nPARRAINAGE\nVous souhaitez soutenir mon travail ?\nko-fi.com/martijnvandenboom paypal.me/ingmacmvandenboom buymeacoffee.com/ingvdboom ","date":"13 février 2025","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/about/","series":[],"smallImg":"","tags":[],"timestamp":1739404800,"title":"À Propos"},{"authors":[],"categories":[],"content":"Service de création d\u0026rsquo;animations Service de création d\u0026rsquo;animations\nDonnez vie à vos idées avec des animations époustouflantes\nChez \u0026ldquo;van den Boomoom Animations\u0026rdquo;, nous sommes spécialisés dans la création d\u0026rsquo;animations personnalisées qui captivent et engagent votre public. Que vous cherchiez à améliorer votre site Web, à faire connaître votre marque ou à ajouter un effet accrocheur à votre projet, notre équipe est là pour transformer votre vision en mouvement. Des transitions fluides aux visuels dynamiques en passant par les animations attrayantes, nous proposons des solutions sur mesure pour faire ressortir votre contenu. Laissez-nous vous aider à raconter votre histoire à travers la magie de l\u0026rsquo;animation !\nCe que nous proposons :\nNous proposons une large gamme de services d\u0026rsquo;animation pour répondre à tous les besoins. Que vous recherchiez des animations de sites Web dynamiques, des visuels attrayants pour les réseaux sociaux ou des graphiques animés pour votre prochain projet vidéo, nous avons ce qu\u0026rsquo;il vous faut. Notre expertise comprend tout, des animations de logos aux graphiques animés 2D/3D. Nous travaillons en étroite collaboration avec vous pour créer des animations personnalisées qui correspondent à votre marque, votre style et vos objectifs, garantissant ainsi que votre message soit transmis de la manière la plus captivante possible.\nComment ça marche :\nCommencer avec nous est simple et sans tracas. Tout d’abord, nous aurons une conversation pour comprendre votre vision, les objectifs du projet et le style d’animation que vous recherchez. Ensuite, notre équipe créative élaborera un concept adapté à vos besoins et partagera les premières conceptions ou storyboards. Une fois que vous êtes satisfait de la mise en scène, nous passons à la production, où nous donnons vie à l’animation avec une attention aux détails et à la qualité. Tout au long du processus, nous vous impliquons avec des mises à jour régulières, garantissant que le résultat final dépasse vos attentes. Du début à la fin, nous sommes là pour rendre votre expérience d\u0026rsquo;animation fluide et agréable. Cordialement,\nMartin P.S. Attention : Ce service est basé sur les contributions convenues par les deux parties. Si nous réussissons à vous fournir un excellent service et que vous êtes satisfait du résultat, nous apprécierions grandement vos commentaires positifs que nous pourrions présenter publiquement et inclure dans notre portefeuille. Service de création d\u0026rsquo;animations\nExemples :\n1. La lettre tournante : \"van den Boom Animations\", cette lettre tournante \"B\" est l'une des premières idées qui m'est venue lorsque j'ai commencé à explorer le monde de la conception Web et des animations. Un site Web peut devenir beaucoup plus divertissant et vivant grâce à ces petits détails mais puissants : les animations qui surprennent l’utilisateur et enrichissent l’expérience. L'ajout de mouvements subtils, tels que la rotation d'un élément ou l'éclat d'une image, crée un site Web plus dynamique et plus attrayant. Mon objectif est d'apporter cette magie, afin que chaque site Web que nous créons ait cette petite touche supplémentaire, quelque chose que les visiteurs non seulement remarquent mais apprécient également. 2. La flamme brûlante : Notre animation de flamme symbolise la créativité brûlante que nous mettons dans chaque projet. Telle une flamme qui danse et change constamment, nous donnons à vos idées énergie et mouvement. Que vous recherchiez un élément dynamique pour votre site Web ou un effet visuel qui capte l'attention, nos flammes élèvent votre projet au niveau supérieur. Regardez comment la flamme s'allume et bouge, tout comme nos processus créatifs ! 3. Le logo de l'entreprise : Le logo de notre entreprise est lui-même une animation vivante. Le texte \u0026lt;VDB/\u0026gt; est tapé caractère par caractère - comme un développeur écrivant du code - suivi d'un curseur clignotant doucement. Après une brève pause, la séquence recommence, rappelant constamment que nous construisons toujours quelque chose de nouveau. La combinaison de la syntaxe du langage de programmation et de la typographie monospace reflète exactement qui nous sommes : une entreprise technique qui allie créativité et savoir-faire dans chaque solution que nous proposons. _ Services numériques ","date":"11 février 2025","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/animations/","series":[],"smallImg":"","tags":[],"timestamp":1739232000,"title":"Animations"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":" Exigences Compte DigitalOcean Créer un fichier Docker Créez le Dockerfile à la racine de votre site.\nNotre modèle de démarrage inclut déjà le 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 Le /site est le répertoire de sortie des fichiers statiques, qui seront utilisés ultérieurement. Créer une application Accédez à DigitalOcean Dashboard -\u0026gt; Left Panel -\u0026gt; Apps -\u0026gt; Create App, puis remplissez le formulaire comme suit.\nModifier les ressources Dans cette étape, nous devrons modifier les ressources, car actuellement la plate-forme d\u0026rsquo;applications DigitalOcean Buildpack est incapable de détecter les sites Hugo configurés via répertoire de configuration.\nVous pouvez voir plusieurs ressources comme dans l\u0026rsquo;image ci-dessus, vous devrez supprimer les ressources inutiles à l\u0026rsquo;exception de celle de type Dockerfile.\nModifier les ressources Dockerfile Étant donné que le service Web n\u0026rsquo;est pas gratuit, nous devons donc modifier la ressource Dockerfile pour qu\u0026rsquo;elle soit un site statique.\nCliquez sur le bouton Edit à droite de la ressource Dockerfile, vous serez alors dirigé vers le panneau de configuration des ressources. Modifiez le Resource Type et remplacez-le par Static Site. Modifiez le Output Directory et définissez-le comme /site. Une fois cela fait, vous obtiendrez les paramètres similaires ci-dessus, cliquons maintenant sur le bouton Retour pour vérifier les ressources.\nSi tout se passe bien, vous ne devriez avoir qu\u0026rsquo;une seule ressource, de type Static Site | Dockerfile.\nAvis Veuillez consulter la section de facturation, vous ne serez pas facturé si vous ne déployez pas plus de 3 sites statiques.\nVeuillez noter que l\u0026rsquo;utilisation du transfert dépassée sera facturée, en savoir plus sur prix.\nDéployer Il est temps de déployer le site en cliquant sur le bouton Créer des ressources si tout va bien.\nQuelle est la prochaine étape ? Une fois l\u0026rsquo;application créée, elle se déploiera automatiquement, vous pourrez vérifier les journaux de construction en cas de problème.\nVous pourrez personnaliser le domaine après un déploiement réussi.\n","date":"21 janvier 2024","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/digitalocean-app-platform/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"DigitalOcean","url":"/fr/tags/digitalocean/"},{"title":"Docker","url":"/fr/tags/docker/"},{"title":"Dockerfile","url":"/fr/tags/dockerfile/"},{"title":"Buildpack","url":"/fr/tags/buildpack/"}],"timestamp":1705820419,"title":"Déployer Sur La Plateforme D'applications DigitalOcean"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/fr/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 janvier 2023","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/widgets/funding/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/fr/tags/buy-me-a-coffee/"},{"title":"Funding","url":"/fr/tags/funding/"}],"timestamp":1674992659,"title":"Funding Widget"},{"authors":[],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Le shortcode toggle est similaire au code-toggle, mais il est plus générique.\nUtilisation 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;}} Le myToggleName DOIT être unique par page. Le myToggleItemName DOIT être unique par bascule. Exemple Foo Bar Fou Barre PHP JS SQL 1faire écho à \u0026#34;Bonjour tout le monde\u0026#34; 1console.log(\u0026#34;Bonjour tout le monde\u0026#34;) 1SELECT \u0026#34;Bonjour tout le monde\u0026#34; ","date":"21 janvier 2023","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/toggle/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Toggle","url":"/fr/tags/toggle/"}],"timestamp":1674314531,"title":"Basculer"},{"authors":[],"categories":[],"content":"La recherche des clients deviendra de plus en plus lente à mesure que le contenu augmente, il est raisonnable de disposer d\u0026rsquo;un service de recherche à distance pour gérer les demandes de recherche provenant d\u0026rsquo;un grand site.\nAlgolia est un service de recherche populaire qui propose un forfait gratuit (10 000 enregistrements, 10 000 requêtes par mois). Après avoir lu cet article, vous apprendrez comment configurer Algolia et télécharger automatiquement les fichiers d\u0026rsquo;index.\nPréparatifs Tout d\u0026rsquo;abord, vous devez créer un compte Algolia, puis créer votre application.\nAccédez à Présentation \u0026gt; Clés API. La page affiche tout ce dont vous pourriez avoir besoin dans les étapes suivantes, comme l\u0026rsquo;ID d\u0026rsquo;application, la clé API de recherche et la clé API d\u0026rsquo;administrateur.\n##Configuration\nNom Tapez Par défaut Descriptif algolia Objet - Algolie algolia.appId Chaîne - Identifiant de l\u0026rsquo;application algolia.apiKey Chaîne - Rechercher uniquement la clé API algolia.indexName Chaîne - Nom de l\u0026rsquo;index algolia.paginate Numéro 5 algolia.stallThreshold Numéro 300 Combien de millisecondes doivent s\u0026rsquo;écouler avant de considérer que l\u0026rsquo;expérience de saisie semi-automatique est bloquée. Indice Créer un index Accédez à Sources de données \u0026gt; Indices \u0026gt; Créer un index, puis créez votre index, nommons-le prod.\nAjouter des attributs consultables Une fois l\u0026rsquo;index créé, nous sommes dans la page d\u0026rsquo;index.\nAccédez à Configuration \u0026gt; Attributs consultables, nous devrons ajouter les attributs title et content.\nTélécharger l’index Une fois le site construit, le fichier d\u0026rsquo;index Algolia sera généré et enregistré sous /algolia/index.json, c\u0026rsquo;est-à-dire http://localhost:1313/algolia/index.json.\nTélécharger manuellement Vous pouvez télécharger le fichier d\u0026rsquo;index manuellement via le tableau de bord Algolia pour le tester.\nOutil CLI J\u0026rsquo;ai écrit un Outil CLI pour télécharger le fichier d\u0026rsquo;index, il peut être facilement intégré à vos outils CI \u0026amp; CD.\nAction GitHub J\u0026rsquo;ai également écrit un Actions GitHub si vous utilisez GitHub pour héberger votre référentiel.\nCréez le .github/workflows/algolia.yml sous la racine de votre site avec le contenu suivant.\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 Ensuite, créez les secrets ALGOLIA_APP_ID et ALGOLIA_API_KEY pour votre référentiel.\nALGOLIA_API_KEY est la clé API admin, pas la clé API de recherche uniquement.\nUne fois l\u0026rsquo;action GitHub créée, le fichier d\u0026rsquo;index sera automatiquement téléchargé sur git push.\n","date":"27 novembre 2022","img":"/docs/topics/algolia/featured.png","lang":"fr","langName":"Français","largeImg":"/docs/topics/algolia/featured_hu_fdffb880f893b4ae.png","permalink":"/fr/docs/topics/algolia/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/topics/algolia/featured_hu_24633db3233eed98.png","tags":[{"title":"Algolia","url":"/fr/tags/algolia/"}],"timestamp":1669549992,"title":"Algolie"},{"authors":[],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Une description détaillée du shortcode iframe.\nUtilisation 1{{\u0026lt; iframe \u0026#34;URL\u0026#34; \u0026gt;}} ou via des paramètres nommés\n1{{\u0026lt; iframe 2 src=\u0026#34;URL\u0026#34; 3 trigger=manual 4 loadButtonText=\u0026#34;load_video\u0026#34; 5\u0026gt;}} Paramètre Par défaut Descriptif src - L\u0026rsquo;URL de l\u0026rsquo;iframe. Requis. trigger auto Définissez-le comme manual si vous souhaitez charger l\u0026rsquo;iframe manuellement. lazyLoading true loadButtonText load Le texte du bouton de chargement, i18n, est pris en charge. loadInfo - Les informations affichées sous le bouton de chargement. La démarque est prise en charge. fullscreen true Afficher/Masquer le bouton plein écran. Exemples OuvrirStreetMap Jeu Button_run_game Veuillez noter que l\u0026rsquo;iframe chargera le jeu depuis d\u0026rsquo;autres sites. ","date":"19 novembre 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/iframe/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"IFrame","url":"/fr/tags/iframe/"}],"timestamp":1668834048,"title":"Code Court IFrame"},{"authors":[],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Une description détaillée du shortcode du jeu.\nUtilisation 1{{\u0026lt; game \u0026#34;GAME_URL\u0026#34; \u0026gt;}} ou via des paramètres nommés\nParamètre Par défaut Descriptif src - L\u0026rsquo;URL du jeu. Requis. trigger auto Définissez-le comme manual si vous souhaitez charger le jeu manuellement. loadInfo - Les informations affichées sous le bouton de chargement. La démarque est prise en charge. 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;}} Exemples Chargement automatique Chargement manuel The Game Information. ","date":"15 novembre 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/game/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Game","url":"/fr/tags/game/"}],"timestamp":1668518208,"title":"Code Court Du Jeu"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Dans cet article, nous parlerons de la mise en page de la page de destination, cela pourrait vous intéresser si vous envisagez de personnaliser les pages de manière Markdown.\nQu’est-ce que c’est ? La mise en page de la page de destination n\u0026rsquo;est qu\u0026rsquo;un conteneur squelette, le corps est composé de trois parties : la barre supérieure de l\u0026rsquo;application, le contenu de la page et le pied de page.\nAvantages Rédaction de contenu en Markdown. Codes courts réutilisables. Comment l’utiliser ? C\u0026rsquo;est assez simple à utiliser, il suffit de spécifier le type comme landing et sidebar comme false dans la page d\u0026rsquo;accueil, le reste dépend de votre contenu.\n1+++ 2type = \u0026#34;landing\u0026#34; 3sidebar = false 4+++ Prenons l\u0026rsquo;exemple de la page d\u0026rsquo;accueil, créons le content/_index.md avec le contenu suivant.\nLa page d\u0026rsquo;accueil DOIT être content/_index.md, et non 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 septembre 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/layouts/landing/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Landing Page","url":"/fr/tags/landing-page/"}],"timestamp":1663209983,"title":"Mise en Page De La Page De Destination"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/fr/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 septembre 2022","img":"/docs/widgets/repository/featured.png","lang":"fr","langName":"Français","largeImg":"/docs/widgets/repository/featured_hu_8e5e187c0d9a3e55.png","permalink":"/fr/docs/widgets/repository/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/widgets/repository/featured_hu_b0ece6c3195c9919.png","tags":[{"title":"Repository","url":"/fr/tags/repository/"},{"title":"GitHub","url":"/fr/tags/github/"}],"timestamp":1662728779,"title":"Repository Widget"},{"authors":[{"title":"Wilson E. Alvarez","url":"/fr/authors/rubonnek/"}],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Cet article explique comment déployer des sites sur Pages GitLab à l\u0026rsquo;aide de GitLab CI.\nFlux de travail Créez .gitlab-ci.yml à la racine de votre site avec le contenu suivant :\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 L\u0026rsquo;exemple ci-dessus déploiera uniquement la branche par défaut sur GitLab Pages et exécutera un test sur le reste des branches.\nVoir aussi :\nConfiguration des pages GitLab du modèle de démarrage。 Exemple GitLab Hugo en amont Documentation sur les variables GitLab CI/CD ","date":"27 août 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/gitlab-pages/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"GitLab Pages","url":"/fr/tags/gitlab-pages/"},{"title":"GitLab CI","url":"/fr/tags/gitlab-ci/"}],"timestamp":1661567423,"title":"Déployer Sur Les Pages GitLab"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Dans cette section, nous allons parler des points clés des déploiements pour éviter la plupart des problèmes lors du déploiement.\nOutils de création Comme Conditions préalables l\u0026rsquo;a mentionné, vous devrez configurer ces outils sur votre environnement de déploiement.\nInstallation des dépendances Nous utilisons NPM pour gérer les dépendances du thème, il est nécessaire d\u0026rsquo;installer les dépendances sur l\u0026rsquo;environnement de déploiement, car nous NE DEVRONS PAS** valider le dossier node_modules.\n1$ npm i npm i est le raccourci de npm install.\nLes package.json et package-lock.json DOIVENT être validés, npm s\u0026rsquo;appuie sur le premier, le second permettra d\u0026rsquo;économiser le temps d\u0026rsquo;installation.\nChantier Il est temps de construire le site après avoir installé les dépendances.\n1$ hugo --gc --minify --minify réduire le HTML final. Vous pouvez modifier le baseURL via le drapeau -b.\nLa commande a généré le site et l\u0026rsquo;a enregistré sous le répertoire public par défaut.\nDéploiement du site Cette étape dépend des méthodes de déploiement que vous utilisez.\nMéthodes de déploiement Docker Pages GitHub Netlifier Pages Cloudflare Pages GitLab En savoir plus sur Hébergement et déploiement Lectures complémentaires Performance ","date":"27 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/overview/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658916025,"title":"Présentation Du Déploiement"},{"authors":[],"categories":[{"title":"Layouts","url":"/fr/categories/layouts/"},{"title":"Partials","url":"/fr/categories/partials/"}],"content":"Selon le Ordre de recherche des mises en page Hugo, il est facile de remplacer les mises en page et les partiels de Hugo et du thème. C\u0026rsquo;est utile pour les utilisateurs qui souhaitent personnaliser certains éléments de mises en page ou de partiels particuliers.\nUtilisation Créez simplement une mise en page ou un fichier partiel avec le même nom de fichier que vous souhaitez remplacer sous la racine du site.\nC\u0026rsquo;est ainsi que fonctionnent nos Crochets.\nPar exemple, nous pouvons remplacer le parital de la page d\u0026rsquo;accueil layouts/index.html en créant le nôtre sous la racine du site.\n1$ echo \u0026#34;MY CUSTOM HOMEPAGE\u0026#34; \u0026gt; layouts/index.html ","date":"27 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/layouts-overriding/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658909137,"title":"Remplacement Des Mises en Page"},{"authors":[],"categories":[{"title":"Widgets","url":"/fr/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 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/topics/sticky-widgets/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Sticky","url":"/fr/tags/sticky/"},{"title":"SCSS","url":"/fr/tags/scss/"}],"timestamp":1658883283,"title":"Sticky Widgets"},{"authors":[],"categories":[{"title":"Multilingual","url":"/fr/categories/multilingual/"}],"content":"HBS prend en charge plusieurs langues, telles que l\u0026rsquo;anglais, le chinois simplifié, le chinois traditionnel, le français, le russe, etc.\nVous pouvez ajouter vos propres traductions sur : Hugo-thème-bootstrap/i18n\nLangues prises en charge 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 ##Configuration\nTOML 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} Vous devrez spécifier le languageDirection comme rtl pour les langues d\u0026rsquo;écriture de droite à gauche.\nVoir aussi Hugo Multilingue.*\nLe paramètre qui contrôle la langue par défaut du site doit se trouver dans le fichier de configuration du site. Voir defaultContentLanguage sur Configuration du site.\nLocalisation Le dateFormat prend en charge la localisation, vous pouvez le modifier en :date_full, vous pouvez trouver plus de mises en page dans Dispositions de formatage de date/heure.\nVeuillez noter que les zh-cn, zh-tw et zh-hk ne sont pas pris en charge, car le code de langue ne peut pas correspondre aux paramètres régionaux définis dans Hugo Locales.\nLectures complémentaires Traduisez votre contenu ","date":"27 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/configuration/multilangual/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Translation","url":"/fr/tags/translation/"},{"title":"Localization","url":"/fr/tags/localization/"}],"timestamp":1658880366,"title":"Mode Multilingue"},{"authors":[],"categories":[{"title":"PurgeCSS","url":"/fr/categories/purgecss/"}],"content":"PurgeCSS est un outil génial qui supprime les CSS inutilisés de votre site. Dans cette section, nous verrons comment fonctionne PurgeCSS et à quoi devons-nous prêter attention.\nComment ça marche ? Le PurgeCSS nécessite que la configuration suivante soit définie.\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} Il indique à Hugo de calculer les balises, classes et identifiants utilisés, puis génère le 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} Enfin PurgeCSS s\u0026rsquo;appuie sur ce fichier pour purger les CSS inutilisés.\nLe PurgeCSS fonctionne uniquement sous l\u0026rsquo;environnement production.\nNous NE PAS recommander de remplacer postcss.config.js et assets/main/config/rtl/postcss.config.js, sinon des problèmes inattendus se produiront lors des mises à jour de version.\nLimites Le hugo_stats.json ne fonctionne que dans les modèles *.html, c\u0026rsquo;est-à-dire que toutes les classes CSS, balises et identifiants utilisés sur les fichiers JavaScript seront toujours purgés.\nMais ne vous inquiétez pas, il existe deux manières de résoudre ce problème.\nStatistiques supplémentaires Créez simplement un fichier appelé extra_stats.json avec la même forme de hugo_stats.json à la racine de votre site et insérez-y manuellement le CSS supplémentaire.\nextra_stats.json DOIT être engagé dans votre dépôt.\nMettez le bloc HTML dans les fichiers *.html Un scénario courant consiste à rendre des blocs HTML à l\u0026rsquo;aide de JavaScript. Si vous utilisez JavaScript pour générer un élément DOM, tout CSS utilisé sera ignoré par hugo_stats.json. Bien sûr, vous pouvez l\u0026rsquo;ajouter manuellement à extra_stats.json, mais il existe une meilleure façon de le faire via le moteur de modèles.\nTout d\u0026rsquo;abord, nous devrons définir un bloc modèle dans les partiels *.html. 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 calculera le CSS utilisé dans 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;, Comme vous pouvez le voir, le CSS (custom-widget-bar) utilisé dans la balise \u0026lt;script\u0026gt; ne sera pas inclus dans hugo_stats.json, nous devrions donc utiliser d\u0026rsquo;autres balises HTML avec la classe d-none pour envelopper votre modèle.\nd-none est un utilitaire CSS Bootstrap, égal à display: none.\nEt puis restituez le modèle via n\u0026rsquo;importe quel moteur de modèle. 1const tmpl = document.getElementById(\u0026#39;template-custom-widget-bar\u0026#39;).innerHTML; 2render(tmpl, data); Tests Vous devrez spécifier l\u0026rsquo;environnement production pour les tests locaux via hugo server -e production -b http://localhost:1313, car PurgeCSS ne fonctionne que sur l\u0026rsquo;environnement production.\nParfois, PurgeCSS et PostProcess ne fonctionnent pas très bien, vous devrez donc peut-être redémarrer Hugo Server de temps en temps.\n","date":"25 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/purgecss/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658721960,"title":"PurgerCSS"},{"authors":[],"categories":[{"title":"Performance","url":"/fr/categories/performance/"}],"content":"Dans cet article, nous allons parler de comment améliorer les performances de vos sites.\nLe moyen le plus simple d’améliorer les performances consiste à réduire la taille du fichier pour un transfert plus rapide.\nEnvironnement Le thème s\u0026rsquo;appuie sur l\u0026rsquo;environnement production pour réduire les ressources JavaScript et CSS et purger les CSS inutilisés.\nEnvironnement par défaut Valeur hugo production hugo server development En général, vous n\u0026rsquo;avez besoin d\u0026rsquo;apporter aucune modification, sauf si vous envisagez d\u0026rsquo;utiliser hugo server dans un environnement production. Vous pouvez modifier l\u0026rsquo;environnement par défaut avec l\u0026rsquo;indicateur -e.\nMinification HTML Vous devez utiliser hugo --minify pour réduire le code HTML final dans l\u0026rsquo;environnement de production.\n##Compression\nLa compression n\u0026rsquo;est pas la même chose que la minification, elle compresse les fichiers avec un algorithme (tel que gzip), puis les transfère aux clients, les clients décompressent ensuite avant d\u0026rsquo;analyser ces fichiers. Il s\u0026rsquo;agit de la configuration du serveur Web. Veuillez vous référer aux documents pertinents selon votre propre situation.\nImages Ressources Veuillez placer les images en vedette, de couverture ou miniatures dans le dossier de la page autant que possible, afin que les images soient traitées comme des ressources de page pouvant être traitées par le thème. HBS le recadrera en plusieurs tailles plus petites pour s\u0026rsquo;adapter à différents appareils, afin d\u0026rsquo;économiser la bande passante des utilisateurs et d\u0026rsquo;améliorer les performances et l\u0026rsquo;expérience utilisateur.\n1├── featured-sample.webp 2├── index.md 3├── index.zh-hans.md 4└── index.zh-hant.md ## Variables SCSS\nUtilisez les variables SCSS lorsque cela est possible, voir aussi Variables SCSS.\n","date":"23 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/performance/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Minify","url":"/fr/tags/minify/"},{"title":"Gzip","url":"/fr/tags/gzip/"}],"timestamp":1658572248,"title":"Performance"},{"authors":[],"categories":[{"title":"Events","url":"/fr/categories/events/"}],"content":"Cet article répertorie certains événements personnalisés émis par le thème. Vous pouvez capturer ces événements via des écouteurs d\u0026rsquo;événements.\nÉvénement du mode couleur HBS émettra un événement personnalisé appelé hbs:mode en cas de changement du mode couleur, il est utile d\u0026rsquo;ajuster le style de votre widget au mode couleur du thème. Les moteurs de commentaires intégrés Utterances et Giscus s\u0026rsquo;appuient sur cet événement pour ajuster leur thème sur clair ou sombre.\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 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/events/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1658568839,"title":"Événements"},{"authors":[],"categories":[{"title":"SCSS","url":"/fr/categories/scss/"}],"content":"Grâce à assets/main/scss/_variables.scss, nous avons la possibilité de changer les variables SCSS par défaut du thème et de Bootstrap.\nPourquoi les variables SCSS ? Bien que nous puissions remplacer le CSS via assets/main/scss/_custom.scss, cela finira par augmenter la taille du bundle CSS, mais ce n\u0026rsquo;est pas le cas de la variable SCSS dans la plupart des cas.\nPar exemple, il existe une animation par défaut pour le logo en survol.\n1.top-app-bar .logo:hover { 2 transform: rotate(-5deg) scale(1.1); 3} Il est capable de le désactiver via SCSS personnalisé.\n1.top-app-bar { 2 .logo { 3 \u0026amp;:hover { 4 transform: none; 5 } 6 } 7} Mais le style précédent dont nous n\u0026rsquo;avons pas besoin est toujours présent dans le bundle CSS, puisque nous venons de le remplacer par le SCSS personnalisé.\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} Et les variables SCSS ne généreront pas de style inutilisé dans le bundle CSS.\n1$logo-animation: false; Une taille de bundle CSS plus petite signifie de meilleures performances, nous vous recommandons donc d\u0026rsquo;utiliser des variables SCSS lorsque cela est possible.\nVariables SCSS d’amorçage Vous pouvez trouver les variables SCSS intégrées à Bootstrap à partir du code source et de documentations officielles.\nVariables SCSS du thème ###Palettes\nPalette 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 ###Options\nVariable 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 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/scss-variables/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"SCSS Variables","url":"/fr/tags/scss-variables/"}],"timestamp":1658568208,"title":"Variables SCSS"},{"authors":[],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Dans cet article, nous explorerons quelques codes courts pour le texte, tels que l\u0026rsquo;alignement, la transformation et la sélection.\nTransformation de texte texte en minuscules. TEXTE EN MAJUSCULE. Texte en majuscule. Alignement du texte Alignez le texte au début. Alignez le texte au centre. Alignez le texte à la fin. Sélection de texte Ce paragraphe sera entièrement sélectionné lorsque l'utilisateur cliquera dessus. Ce paragraphe ne sera pas sélectionnable lorsque l'utilisateur cliquera dessus. ","date":"15 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/text/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Text","url":"/fr/tags/text/"},{"title":"Text Alignment","url":"/fr/tags/text-alignment/"},{"title":"Text Transform","url":"/fr/tags/text-transform/"},{"title":"Text Selection","url":"/fr/tags/text-selection/"}],"timestamp":1657818043,"title":"Codes Courts De Texte"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Cet article détaillera comment créer une image Docker.\nPrincipe Utilisez Hugo pour créer le site et générer des fichiers statiques. Utilisez Nginx comme serveur pour gérer les requêtes. Fichier Docker Créez un Dockerfile à la racine du site.\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 La construction comporte deux étapes, une étape de construction et une étape de publication. L\u0026rsquo;étape de publication contient uniquement les fichiers statiques générés, en gardant la taille de l\u0026rsquo;image Docker aussi petite que possible. Si defaultContentLanguageInSubdir est activé, veuillez le décommenter et le modifier à la demande. Le paramètre HUGO_BASEURL permet de spécifier le baseURL du site lors du build, et est généralement utilisé lorsque le baseURL est différent de la configuration, vous pouvez donc le supprimer vous-même si vous n\u0026rsquo;en avez pas besoin. HUGO_MODULE_PROXY et NPM_CONFIG_REGISTRY sont des paramètres de construction facultatifs qui peuvent être supprimés s\u0026rsquo;ils ne sont pas nécessaires. ##Nginx\nCréez un deploy/nginx/default.conf à la racine du site :\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} Construire 1$ docker build -t mysite \\ 2 --build-arg HUGO_BASEURL=https://example.com \\ 3 . mysite : le nom de l\u0026rsquo;image. HUGO_BASEURL：le baseURL. Pour les utilisateurs situés en Chine continentale, vous devez spécifier HUGO_MODULE_PROXY et NPM_CONFIG_REGISTRY pour créer l\u0026rsquo;image avec succès et rapidement :\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 . Déploiement Il existe de nombreuses façons de déployer une image Docker, telles que docker run, k8s, etc. Cet article n\u0026rsquo;expliquera que docker run.\nCourir 1$ docker run \\ 2 -p 2333:80 \\ 3 --name mysite \\ 4 --restart=always \\ 5 mysite Pour les tests locaux, vous devez modifier le paramètre baseURL ou le paramètre de build HUGO_BASEURL, par ex. http://localhost:2333.\nArrêt 1$ docker stop mysite Commencer 1$ docker start mysite Retirer 1$ docker rm mysite ","date":"13 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/docker/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Docker","url":"/fr/tags/docker/"},{"title":"Nginx","url":"/fr/tags/nginx/"}],"timestamp":1657679429,"title":"Construire Une Image Docker"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Cet article explique comment déployer des sites sur Pages GitHub à l\u0026rsquo;aide des actions GitHub.\nFlux de travail Créez .github/workflows/gh-pages.yml à la racine du site.\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 Voir aussi Flux de travail des pages GitHub du modèle de démarrage。\n","date":"13 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/github-pages/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"GitHub Pages","url":"/fr/tags/github-pages/"},{"title":"GitHub Actions","url":"/fr/tags/github-actions/"}],"timestamp":1657679423,"title":"Déployer Sur Les Pages GitHub"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Cet article vous montre comment déployer votre site sur Pages Cloudflare.\nCréation d’un projet Nous allons commencer par créer un projet Git et remplir les informations appropriées.\nCréer une commande 1npm i \u0026amp;\u0026amp; hugo --gc --minify --enableGitInfo -b https://hbs-skeleton.pages.dev npm i est un raccourci vers npm install, qui installe les dépendances utilisées lors de la construction du site. -b https://hbs-skeleton.pages.dev spécifie baseURL, veuillez le remplacer vous-même. Vous pouvez également l\u0026rsquo;enregistrer dans un fichier de configuration au lieu de le spécifier dans la commande build. Variables d’environnement Nom Valeur HUGO_VERSION 0.147.9 NODE_VERSION 16 404 Pages Cloudflare est suffisamment intelligent pour utiliser les pages 404 les mieux adaptées, même pour les sites multilingues, et fonctionne sans configuration supplémentaire.\n","date":"12 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/cloudflare-pages/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Cloudflare Pages","url":"/fr/tags/cloudflare-pages/"}],"timestamp":1657627584,"title":"Déployer Sur Les Pages Cloudflare"},{"authors":[],"categories":[{"title":"Deployment","url":"/fr/categories/deployment/"}],"content":"Cet article montre comment déployer votre site sur Netlifier.\nConfiguration Netlify Créez un netlify.toml à la racine du site：\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 Voir aussi Configuration Netlify du modèle de démarrage.\n","date":"12 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/deployment/netlify/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/fr/tags/netlify/"}],"timestamp":1657606849,"title":"Déployer Sur Netlify"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Les utilisateurs ayant utilisé le bouton de copie en bloc ne sont pas étrangers au Snackbar, qui informe l\u0026rsquo;utilisateur des résultats de l\u0026rsquo;exécution de l\u0026rsquo;application. Cet article donnera un exemple de la façon d\u0026rsquo;utiliser Snackbar pour répondre au besoin d\u0026rsquo;interaction personnalisée de l\u0026rsquo;utilisateur.\n##API\nFonction Descriptif show(body: String, duration: number = 2000) body : le corps du message, duration : la durée du message, en millisecondes. Exporter Grâce à assets/main/js/custom.ts, on peut personnaliser le JavaScript, ici on exporte l\u0026rsquo;intégralité du Snackbar en variable globale :\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 Utilisation Ensuite, nous pouvons l\u0026rsquo;appeler en HTML ou JavaScript :\n1\u0026lt;button onclick=\u0026#34;Snackbar.show(\u0026#39;message from a button\u0026#39;)\u0026#34;\u0026gt;Snackbar\u0026lt;/button\u0026gt; Voir Crochets pour savoir comment injecter du HTML personnalisé.\n","date":"2 juillet 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/snackbar/","series":[{"title":"Documentation","url":"/fr/series/documentation/"}],"smallImg":"","tags":[{"title":"Snackbar","url":"/fr/tags/snackbar/"},{"title":"HTML","url":"/fr/tags/html/"},{"title":"JavaScript","url":"/fr/tags/javascript/"}],"timestamp":1656767677,"title":"Snack-Bar"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Cet article explique comment mettre à niveau correctement le thème.\n## versions\nAvant la mise à niveau, il est nécessaire de présenter ce qu\u0026rsquo;est une version. En plus des versions relativement stables répertoriées dans Sorties, vous pouvez utiliser une branche telle que master, develop, ou même choisir une certaine commit.\nCet article utilisera l\u0026rsquo;espace réservé [version] pour représenter la version, remplacez-le simplement par la version vers laquelle vous souhaitez mettre à niveau.\nMise à niveau Veuillez choisir l\u0026rsquo;étape de mise à niveau en fonction de la méthode d\u0026rsquo;installation : Sous-module Git et Module Hugo.\nNotez que quelle que soit la méthode d\u0026rsquo;installation que vous utilisez, vous devrez toujours extraire et mettre à jour les dépendances via hugo mod npm pack et npm update.\nDépendances supplémentaires Si vous avez l\u0026rsquo;intention d\u0026rsquo;ajouter des dépendances supplémentaires, vous devez les définir dans package.hugo.json au lieu de package.json. En effet, le hugo mod npm pack remplacera toujours le package.json, qui fusionne le package.hugo.json du thème et le package.hugo.json de votre site.\nSous-module 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 extrayez les dernières informations sur les branches et les balises du référentiel de thèmes. git checkout [version] passer à la version [version]. hugo mod npm pack et npm update pour extraire et mettre à jour les dernières dépendances du thème. ###Module Hugo\n1$ 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 nettoie toutes les dépendances redondantes. hugo mod npm pack et npm update extraient et mettent à jour les dernières dépendances du thème. ","date":"25 juin 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/upgradation/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1656166502,"title":"Mise À Niveau"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Migration","url":"/fr/categories/migration/"}],"content":"Suivez et examinez les modifications apportées aux fichiers sources du thème et à la documentation pour vous aider à migrer de v0.* vers v1.\nSi vous ne savez pas comment effectuer la mise à niveau, consultez le guide Mise à niveau.\n## v1.0\nL\u0026rsquo;ancienne conception de l\u0026rsquo;interface utilisateur est figée sur la branche v0 qui n\u0026rsquo;accepte que les corrections de bugs. Vous pouvez continuer à utiliser l’ancienne conception de l’interface utilisateur avec cette branche.\nDépendances Bootstrap déplacé de v5.1 à v5.2. interface utilisateur Suppression du panneau de configuration de la barre d\u0026rsquo;application supérieure. Ajout des liens sociaux dans la barre d\u0026rsquo;application supérieure. Bascule de navigation Docs placée dans la barre d\u0026rsquo;application supérieure sur un petit écran. Mises en page Supprimé layouts/_default/archive.html, veuillez remplacer le layout = archive par layout = archives au début. Renommé layouts/partials/docs/catalog.html en layouts/partials/docs/nav.html. SCSS $variable-prefix obsolète, veuillez utiliser $prefix à la place. Utilisez les variables CSS intégrées à Bootstrap au lieu des variables CSS définies par thème. Documents BREAKING CHANGE utilisez le navWeight au lieu de weight pour trier les pages sur la navigation dans les documents. Codes courts Shortcode d’alerte BREAKING CHANGE change la syntaxe alert, voir aussi Syntaxe du shortcode d’alerte. ","date":"20 juin 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/migration/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1655718391,"title":"Migration Vers La V1"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Le shortcode code-toggle génère des blocs de code de différents formats en fonction du code de configuration de tout format pris en charge.\n##Formats\nJSON, TOML et YAML sont pris en charge.\nUtilisation 1{{\u0026lt; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Avec un nom de fichier :\n1{{\u0026lt; filename=\u0026#34;config\u0026#34; code-toggle \u0026gt;}} 2CODE IN ANY SUPPORTED FORMAT 3{{\u0026lt;/ code-toggle \u0026gt;}} Exemple 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;] 2logo = \u0026#39;/images/logo.png\u0026#39; 3[codeBlock] 4 maxLignes = 10 params.yaml\n1codeBlock: 2 maxLignes: 10 3customCSS: 4- foo.css 5- bar.css 6logo: /images/logo.png params.json\n1{ 2 \u0026#34;codeBlock\u0026#34;: { 3 \u0026#34;maxLignes\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;logo\u0026#34;: \u0026#34;/images/logo.png\u0026#34; 10} ","date":"13 juin 2022","img":"/docs/shortcodes/code-toggle/featured.png","lang":"fr","langName":"Français","largeImg":"/docs/shortcodes/code-toggle/featured_hu_6ff21a143d433045.png","permalink":"/fr/docs/shortcodes/code-toggle/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/shortcodes/code-toggle/featured_hu_e04768398376e8c4.png","tags":[{"title":"JSON","url":"/fr/tags/json/"},{"title":"YAML","url":"/fr/tags/yaml/"},{"title":"TOML","url":"/fr/tags/toml/"}],"timestamp":1655110468,"title":"Basculement De Code"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Veuillez vous assurer de remplir les conditions préalables avant d\u0026rsquo;installer le thème.\n##Configuration\nHBS nécessite que les configurations suivantes soient définies.\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} Outils de création 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. Nous vous recommandons d\u0026rsquo;utiliser la dernière version de ces outils.\n","date":"13 juin 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/prerequisites/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Prerequisites","url":"/fr/tags/prerequisites/"}],"timestamp":1655109129,"title":"Conditions Préalables"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Introduction","url":"/fr/categories/introduction/"}],"content":" Objectifs Performances Expérience utilisateur conviviale -Référencement Fonctionnalités Pipes Hugo : utilisé pour générer des ressources CSS et JS. PurgeCSS : supprime les CSS inutilisés. Flexible et configurable. Expérience utilisateur rapide et bonne : le score de Informations Google PageSpeed est supérieur à 95. Prise en charge RTL : Site de démonstration arabe. Construit sur Amorçage 5. Icônes FontAwesome. Réactif. PWA, AKA applications Web progressives. Diverses palettes : blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow. Un Disposition des documents pour publier la documentation du projet, les notes, les jardins numériques, les zettelkastens, etc. Mode clair/sombre. Sélecteur de taille de police. Multilingue (I18N). Recherche locale. DocSearch. Épingler des messages. Menu de pied de page. Panneau de bloc de code : copiez le code, le numéro de ligne, le retour à la ligne et développez. Basculement de code Fil d\u0026rsquo;Ariane. Archive. Visionneuse d\u0026rsquo;images. Traitement d\u0026rsquo;images : redimensionner et aligner les images. Chargement paresseux des ressources : image et iframe. Mise en évidence de la syntaxe. Widget de récompense, AKA Buy Me a Coffee : toute plate-forme prenant en charge le code QR est prise en charge. Table des matières. Commentaires : Disqus, Utterances, Giscus et Staticman peuvent être utilisés directement, vous pouvez également les intégrer à d\u0026rsquo;autres services de commentaires. Actifs personnalisés : CSS et JS personnalisés. Crochets : permet d\u0026rsquo;ajouter du code personnalisé sur la page. Liens sociaux. Divers codes courts. Cartes Twitter et Open Graph. Licence Creative Commons. Formulaire de contact. Numéroter automatiquement les titres. ","date":"13 juin 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/introduction/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Features","url":"/fr/tags/features/"}],"timestamp":1655109129,"title":"Introduction"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Cet article montre comment utiliser le shortcode gallery.\nUtilisation 1{{\u0026lt; gallery images=\u0026#34;images/foo.png,images/bar.png\u0026#34; \u0026gt;}} ","date":"25 mars 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/gallery/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Gallery","url":"/fr/tags/gallery/"}],"timestamp":1648166400,"title":"Code Court De La Galerie"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Troubleshooting","url":"/fr/categories/troubleshooting/"}],"content":"Cet article répertorie certains problèmes courants afin que vous puissiez les résoudre facilement.\nRendu CSS incorrect Le problème est probablement dû au postcss, HBS a besoin de configurer la configuration suivante, postcss s\u0026rsquo;appuie sur le fichier hugo_stats.json pour purger les CSS inutilisés.\n1[build] 2 writeStats = true js.Build : Impossible de résoudre les dépendances 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; Cela est dû au manque de dépendances CSS et JS :\n1$ hugo mod npm pack 2$ npm install 3$ hugo server ","date":"19 mars 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/troubleshooting/","series":[],"smallImg":"","tags":[],"timestamp":1647668801,"title":"Dépannage"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Cet article fait référence à la méthode d\u0026rsquo;installation moderne et à jour permettant d\u0026rsquo;installer le thème localement en tant que module Hugo.\nProxy (facultatif) Si vous résidez en Chine continentale sans VPN, le téléchargement du module Hugo peut échouer.\nIl existe deux proxys pour cela : GOPROXY.CN et GOPROXY.IO.\n1$ export HUGO_MODULE_PROXY=https://goproxy.cn Veuillez noter que Hugo ne respecte pas la variable d\u0026rsquo;environnement GOPROXY, veuillez utiliser HUGO_MODULE_PROXY à la place.\nVous pouvez également définir le module.proxy au lieu d\u0026rsquo;utiliser env var.\nTOML YAML JSON config.toml\n1[\u0026#39;module \u0026#39;] 2 \u0026#39;proxy \u0026#39; = \u0026#39;https://goproxy.cn\u0026#39; config.yaml\n1module : 2 proxy : https://goproxy.cn config.json\n1{ 2 \u0026#34;module \u0026#34;: { 3 \u0026#34;proxy \u0026#34;: \u0026#34;https://goproxy.cn\u0026#34; 4 } 5} Installer un nouveau site à partir de zéro Veuillez utiliser le modèle de démarrage pour votre nouveau site.\nInstaller sur un site existant Transformez votre site existant en module Hugo 1$ cd my-blog 2$ hugo mod init github.com/me/my-blog Déclarez le module hugo-theme-bootstrap comme dépendance du site 1$ hugo mod get github.com/razonyang/hugo-theme-bootstrap@[version] Le dépôt `@@P0@@, branches or even commits.\nReplace [version] with master for getting latest changes.\nCopy example site content into your site Clone the hugo-theme-bootstrap-skeleton dans un répertoire temporaire : 1$ git clone https://github.com/razonyang/hugo-theme-bootstrap-skeleton /tmp/hbs-skeleton Copiez un exemple de configuration et de contenu de site dans votre site : 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 Supprimez à nouveau le dépôt de votre répertoire temporaire : 1$ rm -rf /tmp/hbs-skeleton/ Extrayez les dépendances via npm Utilisez node package manager npm pour extraire les dépendances de ce thème : 1$ hugo mod npm pack 2$ npm install Prévisualisez votre site Démarrez le serveur Web intégré de Hugo, puis accédez à http://localhost:1313/.\n1$ hugo server ","date":"26 février 2022","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/installation/hugo-module/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/fr/tags/installation/"},{"title":"Upgrade","url":"/fr/tags/upgrade/"},{"title":"Hugo Module","url":"/fr/tags/hugo-module/"}],"timestamp":1645888239,"title":"Installer via Le Module Hugo"},{"authors":[{"title":"Andreas Deininger","url":"/fr/authors/andreas-deininger/"},{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Layouts","url":"/fr/categories/layouts/"}],"content":"Dans cet article, nous explorerons la mise en page docs, qui peut être utilisée pour rédiger de la documentation de projet, des notes personnelles, etc.\nSi vous envisagez d\u0026rsquo;utiliser la mise en page docs sur d\u0026rsquo;autres sections (notes), veuillez jeter un œil à la page Contenu.\nMise en page La mise en page docs se compose de trois sections, du début à la fin : barre de navigation du document, contenu du document et barre latérale.\nStructure du contenu 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 Comme le montre la figure, cet exemple montre comment organiser une navigation dans un document à plusieurs niveaux.\nContenant _index.md deviendra une Section. Contenant index.md deviendra une page. Navigation Titre Généralement, title sera utilisé pour afficher sur la barre de navigation, mais parfois le titre est trop long pour aggraver les choses. A ce moment, nous pouvons modifier le texte du lien affiché dans la navigation via linkTitle.\nTOML YAML JSON 1lienTitre = \u0026#39;Windows\u0026#39; 2title = \u0026#39;Installer sous Windows\u0026#39; 1lienTitre: Windows 2title: Installer sous Windows 1{ 2 \u0026#34;lienTitre\u0026#34;: \u0026#34;Windows\u0026#34;, 3 \u0026#34;title\u0026#34;: \u0026#34;Installer sous Windows\u0026#34; 4} Icône ###\nDe plus, nous fournissons un paramètre appelé linkTitleIcon pour définir l\u0026rsquo;icône sur le côté gauche du titre.\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} Poids Nous trions les documents en fonction du paramètre navWeight, le poids supérieur a une priorité plus élevée. Pour les documents sans « navWeight » spécifié, ils sont triés par ordre alphabétique par title.\nTOML YAML JSON 1navWeight = 1000 1navWeight: 1000 1{ 2 \u0026#34;navWeight\u0026#34;: 1000 3} Liens externes Parfois, nous devons lier l’article à un site externe. À ce stade, redirect peut être utilisé, puis il sera automatiquement redirigé vers le lien externe spécifié.\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} Barre latérale Widgets Par défaut, la barre latérale ne contient que la table des matières, mais vous pouvez ajouter des widgets via crochet.\n1{{- partial \u0026#34;docs/repo\u0026#34; . }} 2{{- partial \u0026#34;sidebar/recent-posts\u0026#34; . }} ","date":"12 janvier 2022","img":"/docs/layouts/docs/featured.png","lang":"fr","langName":"Français","largeImg":"/docs/layouts/docs/featured_hu_ec4c91b03483f271.png","permalink":"/fr/docs/layouts/docs/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/layouts/docs/featured_hu_947b7abb991171d8.png","tags":[],"timestamp":1642013794,"title":"Disposition Des Documents"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Menu","url":"/fr/categories/menu/"}],"content":"Nous avons prédéfini deux types de menus : main et footer, représentent respectivement les menus de la barre supérieure de l\u0026rsquo;application et les menus de pied de page. Cet article présentera brièvement comment utiliser les menus.\nPropriétés de l’entrée de menu Propriété Tapez Descriptif name Chaîne Le nom du menu. identifier Chaîne L\u0026rsquo;ID du menu. weight Numéro Le poids du menu utilisé pour le tri par ordre croissant. parent Chaîne Le identifier de l\u0026rsquo;entrée du menu parent. url Chaîne L\u0026rsquo;URL du menu. pre Chaîne La chaîne de début avant le nom du menu. post Chaîne La chaîne de fin après le nom du menu. params Objet Paramètres des menus. params.divider Booléen true signifie diviseur. params.icon Chaîne L\u0026rsquo;icône HTML. params.description Chaîne La description des menus déroulants de la barre d\u0026rsquo;application supérieure uniquement. Voir aussi Propriétés de l\u0026rsquo;entrée de menu.\nUtilisation ###Configuration\nLe fichier de configuration des menus se trouve par défaut dans config/_default/menu.toml.\nPrenons comme exemple le menu main :\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 Voir Icônes pour importer des icônes et définir la couleur de l\u0026rsquo;icône.\nQuestions préliminaires Nous pouvons également configurer le menu via la page d’accueil.\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; L\u0026rsquo;extrait de code ajoute la page au menu main et footer.\nIl n\u0026rsquo;est pas nécessaire de préciser les paramètres url et name.\n","date":"16 décembre 2021","img":"/docs/configuration/menu/featured.png","lang":"fr","langName":"Français","largeImg":"/docs/configuration/menu/featured_hu_b8ce76cf729f474.png","permalink":"/fr/docs/configuration/menu/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/configuration/menu/featured_hu_f77029d9e49e0c3a.png","tags":[{"title":"Main Menu","url":"/fr/tags/main-menu/"},{"title":"Footer Menu","url":"/fr/tags/footer-menu/"}],"timestamp":1639646720,"title":"Menu"},{"authors":[],"categories":[],"content":"Le modèle de démarrage pour les débutants.\n","date":"16 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/installation/starter-template/","series":[],"smallImg":"","tags":[],"timestamp":1639646720,"title":"Modèle De Démarrage"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"FAQ","url":"/fr/categories/faq/"}],"content":"La page FAQ est une collection de questions fréquemment posées.\nPrérequis Nous devons créer une page appelée faq/index.md dans le répertoire content.\n1+++ 2title = \u0026#34;Frequently Asked Questions\u0026#34; 3layout = \u0026#34;faq\u0026#34; 4+++ Données Les données sont stockées dans le répertoire data, la structure des répertoires est la suivante :\n1data 2 /en 3 /faq 4 foo.json 5 bar.json 6 /zh-cn 7 /faq 8 foo.json 9 bar.json Comme vous pouvez le constater, nous classons les questions selon leur langue. Et chaque fichier représente un groupe de questions, qui a le même format comme suit :\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} Le paramètre weight est utilisé pour trier le groupe par ordre croissant. ","date":"7 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/layouts/faq/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638884803,"title":"Disposition De La FAQ"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":" Sections principales Le paramètre mainSections est utilisé pour filtrer les pages, par défaut [\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;] Questions préliminaires Front Matter est l\u0026rsquo;endroit où nous mettons les métadonnées et les paramètres de la page, tels que le titre, la date, etc.\n###Formats\nHugo prend en charge trois formats de présentation : YAML, TOML et JSON.\nTOML : identifié par l\u0026rsquo;ouverture et la fermeture de +++. YAML : identifié par l\u0026rsquo;ouverture et la fermeture de ---. JSON : un seul objet JSON entouré de { et }, suivi d\u0026rsquo;une nouvelle ligne. Prenons TOML comme exemple :\n1+++ 2title = \u0026#39;Hello world!\u0026#39; 3+++ Voir également Paramètres des pages et Hugo Front Matter.\nTypes de contenu Vous souhaiterez peut-être utiliser la disposition docs dans d\u0026rsquo;autres sections au lieu de /docs, comme /notes. C\u0026rsquo;est facile à faire en définissant type = \u0026quot;docs\u0026quot; dès le départ.\nArchétypes Nous pouvons également créer un archétype pour notes, laissez Hugo s\u0026rsquo;occuper du type.\n1$ cp themes/hugo-theme-bootstrap/archetypes/default.md archetypes/notes.md Et ajoutez type = \u0026quot;docs\u0026quot; au début de archetypes/notes.md. Désormais, hugo new notes/blah-blah-blah copiera le contenu de archetypes/notes.md dans vos nouvelles notes.\nDe même, vous pouvez également personnaliser les archétypes pour posts, docs et ainsi de suite.\nÉcrire de nouveaux articles Supposons que la langue par défaut soit en.\n1$ hugo new posts/new-post/index.md La commande ci-dessus crée un nouveau message rédigé en anglais. De même, nous pouvons créer un article rédigé en chinois simplifié :\n1$ hugo new posts/new-post/index.zh-cn.md Veuillez rappeler que les posts créés sont généralement à l\u0026rsquo;état de brouillon. Vous devrez spécifier le paramètre -D de la commande hugo server pour la prévisualisation. De même, vous devez remplacer le draft par false ou supprimer le paramètre draft si vous souhaitez publier l\u0026rsquo;article.\nOrdre de sélection des résumés Si le description n\u0026rsquo;est pas vide, alors il sera utilisé, pour utiliser des résumés à tout moment, vous devez définir le post.excerpt comme chaîne vide explicitement. Fractionnement manuel via \u0026lt;!\u0026ndash;more\u0026ndash;\u0026gt;. Si summary sur le devant n\u0026rsquo;est pas vide, alors summary sera sélectionné. Le texte du contenu sera coupé par post.excerptMaxLength et formaté en texte brut ou HTML lorsque 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. Ordre de sélection des images en vedette Les images en première ligne sont préférés. Ressources d\u0026rsquo;images de page qui correspondent au modèle *feature*. Tels que posts/my-page/feature.png, posts/my-page/featured-sample.jpg. L\u0026rsquo;image sélectionnée n\u0026rsquo;apparaît pas au-dessus du contenu par défaut, vous devrez activer cette fonctionnalité en suivant le paramètre.\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} Ordre de sélection des vignettes Les images en première ligne sont préférés. Page images ressources qui correspondent aux modèles du nom de fichier : *feature*, *cover* et *thumbnail*. Tels que posts/my-page/feature.png, posts/my-page/thumnail.jpg. Les ressources d\u0026rsquo;images de page seront redimensionnées en plusieurs versions plus petites pour s\u0026rsquo;adapter aux appareils des utilisateurs afin d\u0026rsquo;économiser la bande passante.\nÉpingler des messages Vous pouvez épingler des publications sur la page d\u0026rsquo;accueil en définissant pinned sur true dans la première partie.\n1+++ 2title = \u0026#34;Pinned Post\u0026#34; 3pinned = true 4pinnedWeight = 100 5+++ S\u0026rsquo;il y a plusieurs publications épinglées, elles sont triées par pinnedWeight par ordre décroissant.\n1pinnedPost = false # Disable pinned posts globally. 2pinnedPostCount = 2 # The number of pinned posts shown on home page. Carrousel Affichage des articles sur le carrousel.\n1+++ 2carousel = true 3+++ Auteurs HBS prend en charge la taxonomie des auteurs. Tout d\u0026rsquo;abord, vous devrez l\u0026rsquo;activer en définissant la configuration suivante.\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} Et puis définissez le authors sur vos publications.\n1+++ 2authors = [ 3 \u0026#34;Foo\u0026#34;, 4 \u0026#34;Bar\u0026#34; 5] 6+++ Désormais, les auteurs seront présents sur les taxonomies post méta et sidebar.\nEnfin, il faudra peut-être présenter l’auteur plus en détail. Prenez le Foo comme exemple, créez simplement une page avec le contenu suivant et enregistrez-la sous /content/authors/foo/index.md.\n1--- 2title: Razon Yang 3description: Gopher, PHPer, Full Stack Engineer. 4social: 5 github: razonyang 6 twitter: razonyang 7--- title : Le nom d\u0026rsquo;affichage de l\u0026rsquo;auteur. description : L\u0026rsquo;introduction. social : Liens sociaux. L\u0026rsquo;image de l\u0026rsquo;auteur doit être placée dans le même dossier avec le motif avatar*, tel que /content/authors/foo/avatar.png. S\u0026rsquo;il n\u0026rsquo;y a pas d\u0026rsquo;avatar, le social.email sera utilisé pour générer l\u0026rsquo;avatar Gravatar.\nSuivant Ajuster la configuration Menu Regardez et ressentez ","date":"4 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/content/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Authoring","url":"/fr/tags/authoring/"},{"title":"Articles","url":"/fr/tags/articles/"}],"timestamp":1638585819,"title":"Ajout De Contenu"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Cet article fait référence à la méthode d\u0026rsquo;installation traditionnelle consistant à cloner le thème localement en tant que sous-module Git. Bien que cette méthode d\u0026rsquo;installation soit encore largement utilisée, nous vous recommandons d\u0026rsquo;installer le thème sous le nom Module Hugo.\nCréer un nouveau site à partir de zéro 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 vous utilisez Windows, utilisez plutôt xcopy .\\themes\\hugo-theme-bootstrap\\exampleSite /E.\nsed remplace le theme: github.com/razonyang/hugo-theme-bootstrap par theme: hugo-theme-bootstrap.\nInstaller sur un site existant 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 vous créez un nouveau clone, vous devrez mettre à jour votre sous-module via git submodule update --init --recursive ou cloner avec le sous-module git clone --recursive \u0026lt;repo\u0026gt;.\n","date":"4 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/getting-started/installation/git-submodule/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Installation","url":"/fr/tags/installation/"},{"title":"Upgrade","url":"/fr/tags/upgrade/"},{"title":"Git Submodule","url":"/fr/tags/git-submodule/"}],"timestamp":1638585819,"title":"Installer via Le Sous-Module Git"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Image Viewer","url":"/fr/categories/image-viewer/"}],"content":"La visionneuse d\u0026rsquo;images est une galerie d\u0026rsquo;images, elle s\u0026rsquo;affichera lorsque vous cliquerez sur une image non pouvant être liée.\nIl fournit également de nombreux outils, tels que le zoom avant, le zoom arrière et la rotation.\nL\u0026rsquo;avatar de l\u0026rsquo;auteur a été filtré par défaut.\nParamètres du site Image Viewer a été activé par défaut, vous pouvez le désactiver en définissant le paramètre viewer sur false.\n##Options\nVous pouvez modifier les options en créant assets/viewer/js/options.ts.\n1const options = { 2 className: \u0026#34;image-viewer\u0026#34;, 3 // ... 4}; 5export default options; Les options disponibles sont répertoriées sur Options de la visionneuse.js.\n","date":"3 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/image-viewer/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638535610,"title":"Visionneuse D'images"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Par défaut, un site utilisant ce thème a les polices, les couleurs et l\u0026rsquo;apparence générale par défaut. Cependant, le schéma par défaut ne peut pas satisfaire tout le monde, mais ne vous inquiétez pas, vous pouvez facilement remplacer les valeurs par défaut du thème, telles que les couleurs de la palette, les polices et la coloration syntaxique.\nIcônes de favoris HBS génère des icônes de plusieurs tailles en fonction du fichier assets/favicon.webp (priorité plus élevée) ou assets/favicon.png. Enregistrez simplement votre propre image de favicon sous le même chemin pour remplacer les valeurs par défaut.\nVous devrez également remplacer l\u0026rsquo;icône du masque assets/safari-pinned-tab.svg.\nLes icônes statiques static/images/icons/icon-{size}.png ont une priorité plus élevée pour une compatibilité ascendante.\nTailles personnalisées Vous pouvez modifier les tailles souhaitées via le fichier 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} Image d’arrière-plan 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;] ##Palettes\nHBS propose de nombreuses palettes : blue, blue-gray, brown, cyan, green, indigo, orange, pink, purple, red, teal, yellow.\nPalettes disponibles Le sélecteur de palette sur le panneau de configuration est basé sur le paramètre palettes.\n1palettes = [\u0026#34;blue\u0026#34;, \u0026#34;blue-gray\u0026#34;, \u0026#34;indigo\u0026#34;] Vous pouvez également désactiver le sélecteur de palette en définissant le paramètre palettes sur un tableau vide [].\nPalette par défaut 1palette = \u0026#34;indigo\u0026#34; Vous devrez vider le cache du navigateur après avoir modifié la palette par défaut.\nRemplacer la couleur de la palette 1$palette-blue: darkblue; Après avoir modifié les variables SCSS sur assets/main/scss/_variables.scss, la couleur de la palette blue sera changée en darkblue. Veuillez consulter le Variables SCSS pour plus de détails.\nPolices Famille de polices Nous ne spécifions aucune police, de sorte que system-ui sera utilisé dans la plupart des navigateurs.\nVous pouvez facilement utiliser d\u0026rsquo;autres polices Web, telles que Polices Google. Prenons la police Roboto comme exemple.\nTout d\u0026rsquo;abord, nous importons la police, puis remplaçons la variable body-font-family dans 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} Mise en évidence de la syntaxe Le thème nécessite que les paramètres de balisage suivants soient définis sur des valeurs spécifiques.\nlineNos : true lineNumbersInTable : false noClasses : false Voir aussi Configurer la surbrillance.\nStyle 1$ hugo gen chromastyles --style=solarized-dark \u0026gt; assets/main/scss/_highlight.scss Voir aussi Tous les styles pris en charge.\nIcônes HBS utilise un jeu d\u0026rsquo;icônes FontAwesome v5 personnalisé qui contient uniquement les icônes utilisées par le thème pour réduire la taille du fichier d\u0026rsquo;icônes.\nAjouter des icônes Compte tenu du besoin d\u0026rsquo;icônes définies par l\u0026rsquo;utilisateur, HBS fournit une fonctionnalité d\u0026rsquo;icône personnalisée, il suffit de créer un fichier assets/icons/custom.js à la racine du site et d\u0026rsquo;importer les icônes souhaitées.\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; Pour que cela fonctionne, vous devez décommenter, c\u0026rsquo;est-à-dire supprimer le préfixe //.\nLittéralement, @fortawesome/free-solid-svg-icons, @fortawesome/free-regular-svg-icons et @fortawesome/free-brands-svg-icons représentent respectivement les icônes Solid, Regular et Brand.\nVariables JS Les variables JS sont nommées en utilisant camelCase, et leurs noms de classe correspondants sont en minuscules et séparés les uns des autres par une ligne horizontale.\nClasse Variables JS fa-clock faClock fa-address-book faAddressBook fa-amazon faAmazon fa-google faGoogle Utilisation Selon le type d\u0026rsquo;icône, leurs préfixes de classe sont également différents, la relation correspondante est la suivante :\nGenre Préfixe de classe Solide fas Régulier far Marque fab Prend comme exemple les icônes précédemment importées :\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 l\u0026rsquo;icône ne s\u0026rsquo;affiche pas correctement, veuillez vérifier que le préfixe est correct.\nCouleur de l’icône Vous pouvez soit spécifier les utilitaires CSS de couleur, soit l\u0026rsquo;attribut style pour définir la couleur de l\u0026rsquo;icône.\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; Lorsque vous l\u0026rsquo;utilisez dans des configurations, des préambules, etc., vous devez citer/échapper le code, sinon l\u0026rsquo;analyse YAML/TOML/JSON pourrait échouer. Par exemple,\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 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/look-and-feel/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Color","url":"/fr/tags/color/"},{"title":"Palette","url":"/fr/tags/palette/"},{"title":"Fonts","url":"/fr/tags/fonts/"},{"title":"Syntax Highlighting","url":"/fr/tags/syntax-highlighting/"},{"title":"Icons","url":"/fr/tags/icons/"}],"timestamp":1638531777,"title":"Regardez Et Ressentez"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"PWA","url":"/fr/categories/pwa/"}],"content":"Les PWA (Applications Web progressives) sont des applications Web développées à l\u0026rsquo;aide d\u0026rsquo;un certain nombre de technologies spécifiques et de modèles standard pour leur permettre de tirer parti des fonctionnalités du Web et des applications natives.\nHBS fournit certaines fonctionnalités de base, telles que l\u0026rsquo;installation du site sur l\u0026rsquo;écran d\u0026rsquo;accueil, les fichiers de pré-cache et la disponibilité hors ligne.\nParamètres du site Tout d\u0026rsquo;abord, nous devons spécifier le paramètre pwa, même s\u0026rsquo;il est vide.\nNom Tapez Par défaut Descriptif pwa Objet - pwa.manifest Objet - Manifeste d\u0026rsquo;application Web pwa.manifest.name Chaîne - Par défaut, le titre du site pwa.manifest.short_name Chaîne - Nom court de votre site. pwa.manifest.display Chaîne standalone pwa.manifest.description Chaîne - Par défaut, la description du site. pwa.manifest.theme_color Chaîne - pwa.manifest.background_color Chaîne - pwa.manifest.icons Tableau - pwa.manifest.icons.sizes Chaîne - Tailles des icônes, c\u0026rsquo;est-à-dire \u0026ldquo;96x96\u0026rdquo; pwa.manifest.icons.src Chaîne - URL de l\u0026rsquo;icône pwa.precache Objet - Actifs de pré-cache pwa.precache.fonts Tableau - Polices de pré-cache pwa.precache.images Tableau - Images de pré-cache pwa.precache.pages Tableau - Pages de pré-cache pwa.precache.scripts Tableau - Scripts de pré-cache pwa.precache.styles Tableau - Styles de pré-cache Manifeste Le manifest.json sera généré automatiquement.\nHors ligne Page hors ligne La page hors ligne sera affichée en cas de demande d\u0026rsquo;une nouvelle page sans réseau.\nNous devons créer une page hors ligne appelée offline/_index.md dans le répertoire content avec les éléments de présentation suivants.\n1+++ 2title = \u0026#39;Offline\u0026#39; 3+++ Image hors ligne Comme pour la page hors ligne, il existe une image hors ligne pour demander des images sans réseau. HBS fournit une image hors ligne intégrée avec le nom de fichier assets/images/offline.png. Vous pouvez le remplacer en créant votre propre image hors ligne avec le même nom de fichier sous la racine de votre site.\nPré-cache 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 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/pwa/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Manifest","url":"/fr/tags/manifest/"},{"title":"Offline","url":"/fr/tags/offline/"},{"title":"Precache","url":"/fr/tags/precache/"}],"timestamp":1638531541,"title":"Application Web Progressive"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Search","url":"/fr/categories/search/"}],"content":"Il peut être difficile pour les lecteurs de récupérer un article s\u0026rsquo;il y a de nombreux articles sur votre site, c\u0026rsquo;est pourquoi nous avons ajouté la fonction de recherche.\nPrérequis Tout ce que vous avez à faire est de créer une page appelée search/_index.md dans le répertoire content.\n1+++ 2title = \u0026#34;Search\u0026#34; 3+++ Paramètres du site Nom Tapez Par défaut Descriptif search Objet - Configuration de la recherche. search.paginate Entier 10 Pagination. search.indexPaginate Entier 1000 Pagination du fichier d\u0026rsquo;index. search.indexPreload Booléen true S\u0026rsquo;il faut précharger les index de recherche. search.maxResults Numéro 100 Le nombre maximum de résultats de recherche. search.resultContentCharactersCount Entier 240 Nombre maximal de caractères du contenu du résultat à afficher. search.shortcut Tableau [\u0026quot;/\u0026quot;] Le raccourci de recherche, c\u0026rsquo;est-à-dire [\u0026quot;Control\u0026quot;, \u0026quot;/\u0026quot;], désactivez-le par un tableau vide []. search.fuse Objet - Options de Fuse.js. search.fuse.ignoreLocation Booléen true search.fuse.location Entier - search.fuse.isCaseSensitive Booléen - search.fuse.minMatchCharLength Entier - search.fuse.threshold Double - search.fuse.distance Entier - search.fuse.useExtendedSearch Booléen - ","date":"3 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/layouts/search/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Disposition De La Recherche"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Archive","url":"/fr/categories/archive/"}],"content":"La page d\u0026rsquo;archives est une collection de messages regroupés par année.\nPrérequis Les pages ne sont pas créées automatiquement, il faut d\u0026rsquo;abord créer des sections d\u0026rsquo;archives :\n1$ tree content/archives 2├── 2021 3│ ├── _index.md 4├── 2022 5│ ├── _index.md 6├── _index.md Le contenu de ces fichiers contient simplement un paramètre title.\nParamètres du site Nom Tapez Par défaut Descriptif archive Objet - Archive. archive.dateFormat Chaîne Jan 2 Format de date d\u0026rsquo;archivage. archive.monthFormat Chaîne January Format du mois d\u0026rsquo;archive, par ex. 1, 01, Jan et January. archive.basePath Chaîne /archives ","date":"3 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/layouts/archives/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501411,"title":"Disposition Des Archives"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/fr/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 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/widgets/author/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638501019,"title":"Author Widget"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Widget","url":"/fr/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 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/widgets/reward/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Buy Me a Coffee","url":"/fr/tags/buy-me-a-coffee/"}],"timestamp":1638501019,"title":"Reward Widget"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Social Links","url":"/fr/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 décembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/widgets/social-links/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638433665,"title":"Social Links"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Contact Form","url":"/fr/categories/contact-form/"}],"content":"Nous pouvons mettre notre adresse e-mail sur liens sociaux afin que les lecteurs puissent nous contacter. Malheureusement, les emails seront plus ou moins traités comme du spam et même filtrés. Par conséquent, nous apportons une fonctionnalité appelée formulaire de contact.\nPrérequis Nous devons créer une page de contact appelée contact/index.md dans le répertoire content, afin de pouvoir accéder au formulaire de contact.\n1+++ 2title = \u0026#34;Contact Us\u0026#34; 3layout = \u0026#34;contact\u0026#34; 4+++ Une fois créé, le lien apparaîtra dans le widget de profil.\nParamètres Nom Tapez Par défaut Descriptif contact Objet - contact.endpoint Chaîne - Voir aussi Backends. contact.file Booléen false Activer/Désactiver le téléchargement de fichiers. contact.fileField Chaîne - Le champ Nom du fichier. contact.reCaptcha Objet - Google reCAPTCHA contact.reCaptcha.siteKey Chaîne - Back-ends Il est conçu pour être compatible avec la plupart des backends, tels que Formulaire Netlify, Obtenir un formulaire, Forme et Fabform.io. Fonctionne également avec l\u0026rsquo;alternative auto-hébergée Formateur.\n###Netlify\nFormulaire Netlify sont pris en charge par défaut, vous n\u0026rsquo;avez donc pas besoin de spécifier le paramètre contact.endpoint.\nLe site de démonstration utilise Getform au lieu du formulaire Netlify, car Netlify mettra automatiquement à niveau votre niveau de formulaire si vous dépassez la limite du forfait actuel, ce qui entraînera des dépenses supplémentaires.\nVeuillez vous assurer que le paramètre contact.endpoint est vide si vous avez l\u0026rsquo;intention d\u0026rsquo;utiliser le formulaire Netlify.\nFormateur Formateur est pris en charge avec un crochet du formulaire de contact pour injecter une entrée manquante dans le formulaire.\nVoir aussi Exemple de fonctions Google Cloud en amont.\nAutres Prenons Obtenir un formulaire comme exemple :\n1[contact] 2 endpoint = \u0026#34;YOUR_ENDPOINT\u0026#34; reCAPTCHA En plus de définir le paramètre contact.reCaptcha.siteKey, vous devez effectuer des étapes supplémentaires en fonction du backend :\nNetlifier ObtenirFormulaire ","date":"30 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/layouts/contact/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Netlify","url":"/fr/tags/netlify/"},{"title":"Getform","url":"/fr/tags/getform/"}],"timestamp":1638287760,"title":"Formulaire De Contact"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Assets","url":"/fr/categories/assets/"}],"content":"En tant que thème personnalisable, il offre la possibilité de personnaliser les actifs, qu\u0026rsquo;il s\u0026rsquo;agisse de personnaliser CSS et JS ou d\u0026rsquo;introduire des CSS et JS tiers.\nActifs internes Créez et modifiez simplement les fichiers assets/main/scss/_variables.scss, assets/main/scss/_custom.scss et assets/main/js/custom.ts.\nCes fichiers seront regroupés en un seul pour réduire les requêtes HTTP.\nActifs externes Toutes les ressources CSS et JS externes peuvent être importées par les paramètres customCSS et 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 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/custom-assets/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"CSS","url":"/fr/tags/css/"},{"title":"JS","url":"/fr/tags/js/"}],"timestamp":1638086449,"title":"Actifs Personnalisés"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Comments","url":"/fr/categories/comments/"},{"title":"Widget","url":"/fr/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 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/widgets/comments/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Disqus","url":"/fr/tags/disqus/"},{"title":"Utterances","url":"/fr/tags/utterances/"},{"title":"Giscus","url":"/fr/tags/giscus/"},{"title":"Staticman","url":"/fr/tags/staticman/"}],"timestamp":1638014069,"title":"Comments Widget"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Hook","url":"/fr/categories/hook/"}],"content":"En tant que thème flexible, il devrait avoir la possibilité de personnaliser le code et d\u0026rsquo;intégrer des services tiers. Par conséquent, nous avons apporté une fonctionnalité appelée hook.\nDans cet article, nous présenterons tous les hooks et proposerons quelques cas d’utilisation.\nAperçu Crochet Descriptif head-end Avant la fin de \u0026lt;head\u0026gt; body-begin Suivez le \u0026lt;body\u0026gt; body-end Avant la fin du \u0026lt;body\u0026gt; main-begin Au-dessus du \u0026lt;main\u0026gt; main-end Suivez le \u0026lt;main\u0026gt; list-begin Au-dessus de la liste des messages list-end Suivez la liste des publications sidebar-begin Tout en haut de la barre latérale sidebar-end Avant la fin de la barre latérale content-begin Au-dessus du contenu du message content-end Suivez le contenu de l\u0026rsquo;article comments-begin Au-dessus des commentaires comments-end Suivez les commentaires footer-begin Tout en haut du pied de page footer-end Avant la fin du pied de page post-panel-begin Tout en haut du panneau de publication post-panel-end Avant la fin du panneau de publication docs/sidebar-begin Tout en haut de la barre latérale docs docs/sidebar-end Avant la fin de la barre latérale docs docs/nav-begin Tout en haut de la navigation docs/nav-end Avant la fin de la navigation contact/form-field-begin Tout en haut du champ du formulaire de contact contact/form-field-end Avant la fin du champ du formulaire de contact search/sidebar-begin Tout en haut de la barre latérale search search/sidebar-end Avant la fin de la barre latérale search Utilisations Il est facile d\u0026rsquo;utiliser un hook, ce que vous devez faire est de créer un fichier HTML avec le même nom que hook dans le répertoire layouts/partials/hooks.\nPrenons sidebar-begin comme exemple :\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 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/advanced/hooks/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Crochets"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[],"content":"Nous sommes heureux d’écouter vos opinions et vos commentaires et vous invitons à vous impliquer.\nCommunauté Demande de fonctionnalité Rapport de bug Discussions : posez des questions, partagez des idées etc. Contribuer Toutes les contributions sont les bienvenues, telles que la documentation, les corrections de bugs et les nouvelles fonctionnalités.\nRègles Compte tenu de la facilité d\u0026rsquo;entretien, nous établissons quelques règles.\nSpécification des commits conventionnels Veuillez suivre le Spécification des commits conventionnels.\nPar exemple :\nCorrection d\u0026rsquo;un bug : fix: correct typos nouvelle fonctionnalité : feat: add the foobar parameter -documents : docs: document the foobar parameter style : style: change the background color to blue reconstruire les actifs : chore: rebuild assets Développer Le thème s\u0026rsquo;appuie sur npm et Hugo Pipes pour créer des actifs : JS, CSS, polices etc.\nLe code source a été placé dans le répertoire assets.\nInstaller les dépendances 1$ cd exampleSite 2$ npm install Aperçu 1$ npm run serve ","date":"27 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/get-involved/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014069,"title":"Impliquez-Vous"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/fr/categories/configuration/"}],"content":"La configuration du site se trouve par défaut dans config/_default/config.toml.\nNom Tapez Par défaut Descriptif title Chaîne - Titre du site. baseURL Chaîne - URL de base du site. copyright Chaîne - Droits d\u0026rsquo;auteur du site. L\u0026rsquo;espace réservé {year} sera remplacé par l\u0026rsquo;année en cours. defaultContentLanguage Chaîne en Langue du site par défaut. defaultContentLanguageInSubdir Booléen false paginate Entier 10 paginatePath Chaîne page enableRobotsTXT Booléen true disqusShortname Chaîne - Disqus nom court. services Objet - services.googleAnalytics Objet - Google Analytics prend en charge GA4 uniquement. services.googleAnalytics.ID Chaîne - ID de mesure. author Objet - Widget Auteur. Voir aussi Tous les paramètres de configuration.\n","date":"27 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/configuration/site/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Configuration Du Site"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/fr/categories/configuration/"}],"content":"Les paramètres de la page sont situés dans Questions préliminaires de la page.\nNom Tapez Par défaut Descriptif Page title Chaîne - Titre de la page. description Chaîne - Description des pages. keywords Tableau - Mots-clés des pages. comment Booléen true S\u0026rsquo;il faut activer les commentaires. Cela ne fonctionnera pas si comment a été désactivé globalement. toc Booléen true S\u0026rsquo;il faut activer la table des matières. Cela ne fonctionnera pas si toc a été désactivé globalement. math Booléen false S\u0026rsquo;il faut activer les mathématiques. diagram Booléen false S\u0026rsquo;il faut activer le diagramme. reward Booléen true S\u0026rsquo;il faut activer la récompense. breadcrumb Booléen true S\u0026rsquo;il faut activer le fil d\u0026rsquo;Ariane. breadcrumbDivider Chaîne / Séparateur de fil d\u0026rsquo;Ariane. readingTime Booléen true S\u0026rsquo;il faut afficher l\u0026rsquo;heure de lecture. postDate Booléen true S\u0026rsquo;il faut afficher la date de publication dans la section méta de publication. copyright Booléen true S\u0026rsquo;il faut afficher la section des droits d\u0026rsquo;auteur. carousel Booléen false Afficher sur le carrousel. nav Booléen true Activer/désactiver les navigations. sidebar Booléen true Afficher/Masquer la barre latérale. index Booléen true Indexez cette page dans le moteur de recherche client ou non. Licence Creative Commons creativeCommons Objet - creativeCommons.by Booléen true Le mérite doit être attribué à vous, le créateur. creativeCommons.nc Booléen true Seule une utilisation non commerciale de votre œuvre est autorisée. creativeCommons.nd Booléen true Aucun dérivé ou adaptation de votre travail n’est autorisé. creativeCommons.sa Booléen true Les adaptations doivent être partagées dans les mêmes conditions. Balise méta metaRobots Chaîne - Vide signifie qu\u0026rsquo;il faut l\u0026rsquo;éteindre. pinned Booléen false Épingler des messages. pinnedWeight Numéro - Un poids inférieur a une priorité plus élevée. featuredPostCount Entier/Booléen 5 Le nombre de publications en vedette affichées dans la barre latérale. Désactivez-le en le réglant sur false. recentPostCount Entier/Booléen 5 Le nombre de publications récentes affichées dans la barre latérale. Désactivez-le en le réglant sur false. relatedPostCount Entier/Booléen 5 Le nombre de messages associés. Désactivez-le en le réglant sur false. featuredImageAlt Chaîne - Le texte alternatif pour les images sélectionnées, retour au titre de la page s\u0026rsquo;il n\u0026rsquo;est pas présent. numberifyHeadings Booléen true Lorsque false, les titres ne seront pas numérotés. ","date":"27 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/configuration/page-params/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Paramètres Des Pages"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/fr/categories/configuration/"}],"content":"Les paramètres du site se trouvent par défaut dans config/_default/params.toml.\nNom Tapez Par défaut Descriptif sass_transpiler chaîne libsass dartsass est recommandé, puisque libsass est obsolète. Page mainSections Tableau [\u0026quot;posts\u0026quot;] Sections principales titleCase Booléen false Titre en majuscule ou non titleSeparator Chaîne - Séparateur de titre backgroundImage Tableau [] Image d\u0026rsquo;arrière-plan, telle que ['/images/bg.png'], ['/images/bg-light.png', '/images/bg-dark.png']. comment Booléen true S\u0026rsquo;il faut activer les commentaires toc Booléen true S\u0026rsquo;il faut activer la table des matières tocWordCount Entier 280 La table des matières s\u0026rsquo;affiche uniquement si le nombre de mots de la publication est supérieur à cette valeur. tocPosition Chaîne sidebar Valeurs disponibles : sidebar et content, seule la disposition posts est concernée. breadcrumb Booléen true S\u0026rsquo;il faut activer le fil d\u0026rsquo;Ariane dateFormat Chaîne Jan 2, 2006 Format des dates. Consultez le Référence des modèles de date et d\u0026rsquo;heure Hugo pour plus de détails. poweredBy Booléen true S\u0026rsquo;il faut afficher propulsé par. readingTime Booléen true S\u0026rsquo;il faut afficher l\u0026rsquo;heure de lecture. postDate Booléen true S\u0026rsquo;il faut afficher la date de publication dans la section méta de publication. math Booléen false S\u0026rsquo;il faut activer les mathématiques à l\u0026rsquo;échelle mondiale. diagram Booléen false S\u0026rsquo;il faut activer le diagramme globalement. logo Chaîne/Booléen images/logo.webp Image du logo. Désactivez le logo en le définissant sur false. brand Chaîne - Texte de la marque. description Chaîne - Descriptif du site. keywords Chaîne - Mots-clés du site. color Chaîne - Mode couleur, light, dark ou auto. Par défaut, auto. palette Chaîne - Palette par défaut. Cela prendra effet après avoir effacé le cookie. palettes Tableau TOUS Palettes disponibles. Vous pouvez le désactiver en le définissant sur [] vide. carouselPostCount Entier 5 Le nombre de publications affichées sur le carrousel de la page d\u0026rsquo;accueil. featuredPostCount Entier/Booléen 5 Le nombre de publications en vedette affichées dans la barre latérale. Désactivez-le en le réglant sur false. recentPostCount Entier/Booléen 5 Le nombre de publications récentes affichées dans la barre latérale. Désactivez-le en le réglant sur false. relatedPostCount Entier/Booléen 5 Le nombre de messages associés. Désactivez-le en le réglant sur false. categoryCount Entier/Booléen 10 Le nombre de catégories affichées dans la barre latérale. Désactivez-le en le réglant sur false. tagCount Entier/Booléen 10 Le nombre de balises affichées dans la barre latérale. Désactivez-le en le réglant sur false. seriesCount Entier 10 Le nombre de séries affiché dans la barre latérale. taxonomyPaginate Entier 10 taxonomyPostCount Entier 3 Le nombre de publications de la taxonomie. Désactivez-le en le définissant sur false. taxonomySortingMethod Chaîne - Tri des taxonomies par popularity, tri alphabétique par défaut. countTaxonomyPosts Booléen false Comptez les postes de taxonomie. sidebarTaxonomies Tableau [\u0026quot;series\u0026quot;, \u0026quot;categories\u0026quot;, \u0026quot;tags\u0026quot;] Les taxonomies dans la barre latérale. fullWidth Booléen false Pleine largeur. fullWidthInSections Objet - Spécifiez la pleine largeur pour des sections particulières, telles que posts, docs. fixedHeader Booléen true Activer/désactiver l\u0026rsquo;en-tête fixe. reward Objet - Widget de récompense, AKA Achetez-moi un widget de café. externalLinkIcon Booléen true S\u0026rsquo;il faut afficher les icônes après les liens externes. share Objet - Boutons de partage share.addThis Chaîne - Ajouter ceci de pubid. fontSize Objet Tailles de police Commentez ou supprimez ce paramètre pour désactiver le sélecteur de taille de police. fontSize.small Chaîne .9rem Petite taille de police. fontSize.extraSmall Chaîne .8rem Taille de police très petite. fontSize.large Chaîne 1.1rem Grande taille de police. fontSize.extraLarge Chaîne 1.2rem Taille de police très grande. social Objet - Liens sociaux. socialAnimation Booléen true Supprimez l\u0026rsquo;animation des liens sociaux si false. socialColor Booléen true Supprimez la couleur des liens sociaux si false. socialShare Booléen true Activez/désactivez le bouton de partage social intégré. searchBar Booléen true Activer/désactiver la barre de recherche intégrée. archive Objet - Archive. search Objet - Recherche. docsearch Objet - DocSearch docsearch.container Chaîne .search-button docsearch.appId Chaîne - docsearch.indexName Chaîne - docsearch.apiKey Chaîne - docsearch.debug Booléen false docsearch.* Booléen/Chaîne/Nombre - https://docsearch.algolia.com/docs/api/ algolia Objet - Voir Algolie Barre supérieure des applications topAppBar Objet - topAppBar.social Objet - Liens sociaux. topAppBar.colorToggle Booléen true Activer/désactiver la bascule couleur/mode. topAppBar.coloredInDark Booléen false Coloré en mode sombre. topAppBar.dropdownMenuToggle Booléen true Masquer la bascule du menu déroulant. topAppBar.expandBreakpoint chaîne xxl Développez le contenu au-dessus de ce point d\u0026rsquo;arrêt, par ex. lg, xl, xxl. Vérification du site du webmaster siteVerification Objet - siteVerification.google Chaîne - Google siteVerification.bing Chaîne - Bing siteVerification.baidu Chaîne - Baidu siteVerification.baiduUnion Chaîne - Union Baidu siteVerification.so Chaîne - Qihoo 360 siteVerification.sogou Chaîne - Sogou siteVerification.shenma Chaîne - Shenma Analytique analytics Objet - Configuration des analyses. analytics.baidu Chaîne - Baidu Analytics. analytics.plausible Chaîne - Domaines d\u0026rsquo;analyse plausibles. Plusieurs domaines séparés par une virgule. analytics.plausibleScript Chaîne https://plausible.io/js/script.js Spécifiez le script Plausible Analytics auto-hébergé ou script étendu. googleAdsense Chaîne - Google Adsense. customCSS Tableau - Voir aussi ressources personnalisées. customJS Tableau - Voir aussi ressources personnalisées. utterances Objet - Énoncés configuration. giscus Objet - Gisque configuration. Licence Creative Commons creativeCommons Objet - creativeCommons.by Booléen true Le mérite doit être attribué à vous, le créateur. creativeCommons.nc Booléen true Seule une utilisation non commerciale de votre œuvre est autorisée. creativeCommons.nd Booléen true Aucun dérivé ou adaptation de votre travail n’est autorisé. creativeCommons.sa Booléen true Les adaptations doivent être partagées dans les mêmes conditions. Bloc de code codeBlock Objet - codeBlock.maxLines Entier 7 codeBlock.lineNos Booléen true true/false représente l\u0026rsquo;affichage/masquage des numéros de ligne par défaut. Publier post Objet - post.excerpt Chaîne Description La description sera utilisée comme extrait si elle n\u0026rsquo;est pas vide, pour utiliser des résumés comme extrait, vous devrez la définir explicitement comme chaîne vide. post.excerptMaxLength Entier 320 post.copyright Booléen true S\u0026rsquo;il faut afficher la section des droits d\u0026rsquo;auteur sur chaque publication. post.plainifyExcerpt Booléen true Formater l\u0026rsquo;extrait en HTML si false. post.featuredImage Booléen false Affichez l\u0026rsquo;image sélectionnée au-dessus du contenu. post.numberifyHeadings Booléen false Comptez automatiquement les titres. post.numberifyHeadingsEndLevel Numéro 6 La profondeur des titres à compter. post.numberifyHeadingsSeparator Chaîne - Le séparateur entre le nombre et les titres. post.tocStyleType Chaîne none La propriété CSS list-style-type de la table des matières. post.imageTitleAsCaption Booléen false Utilisez le titre de l\u0026rsquo;image comme légende. post.panel Booléen true Allumez/éteignez le panneau de poteaux. post.nav Booléen true Activer/désactiver les navigations. post.readMoreFromContent Booléen false La position de la page après avoir cliqué sur le bouton Lire la suite, lire la suite du contenu si vrai. Par défaut, le début de la page. Il ne prend en charge que le fractionnement manuel des résumés via ` . | viewer| Booléen | vrai | [Visionneuse d'images](https://1552afcb.notes-6if.pages.dev/fr/docs/image-viewer/) |pwa| Objet | - | [Applications Web progressives](https://1552afcb.notes-6if.pages.dev/fr/docs/pwa/) | **Barre latérale** |sidebar| Objet | - | |sidebar.fixed| Booléen |false| Correction de la barre latérale par défaut. |sidebar.taxonomiesToggle| Booléen |true| Affichez le widget de basculement des taxonomies dans la barre latérale. |sidebar.taxonomiesToggleArchives| Booléen |true| Afficher/Masquer les archives de la bascule des taxonomies. |sidebar.series| Booléen |false| Affichez le widget de série dans la barre latérale. |sidebar.categories| Booléen |false| Afficher le widget de catégories dans la barre latérale. |sidebar.tags| Booléen |false| Afficher le widget de balises dans la barre latérale. |sidebar.archives| Booléen |false| Afficher le widget d'archive dans la barre latérale. |sidebar.authors| Booléen |false| Afficher le widget des auteurs dans la barre latérale. |sidebar.postsToggle| Booléen |true| Afficher la bascule des publications dans la barre latérale. |sidebar.featuredPosts| Booléen |false| Afficher le widget des publications en vedette dans la barre latérale. |sidebar.recentPosts| Booléen |false| Afficher le widget de publications récentes dans la barre latérale. |sidebar.collapsed| Booléen |flase| Réduisez les widgets de la barre latérale par défaut sur les petits écrans. | **Balise méta** |metaRobots| Chaîne | - | Vide signifie qu'il faut l'éteindre. |contact| Objet | - | [Formulaire de contact](https://1552afcb.notes-6if.pages.dev/fr/docs/layouts/contact/) |pinnedPost| Booléen |true| Activer/désactiver les publications épinglées. |pinnedPostCount| Entier |1| Le nombre de messages épinglés. |rss| Chaîne/Booléen |true| Affichez le bouton RSS sur les liens sociaux. Éteignez-le parfalse, liez-le à la page d'accueil à tout moment en le réglant sur home. | feeds| Objet | - | Flux RSS |feeds.content| Booléen |false| Afficher le contenu complet s'il est activé. |actionsPanel| Objet | - | |actionsPanel.disabled| Booléen |false| Désactivez le panneau d'actions. |repo| Objet | - | Voir [Widget de référentiel](https://1552afcb.notes-6if.pages.dev/fr/docs/widgets/repository/). |docs.nav| Objet | - | Navigation dans la mise en page des documents. |docs.nav.reduceFontSize| Booléen |true| Lorsquefalse`, ne réduisez pas la taille de la police de navigation des enfants.\nÀ l\u0026rsquo;exception de l\u0026rsquo;outil Google pour les webmasters, les autres outils pour les webmasters ne peuvent pas fonctionner avec hugo --minify, car ils ne peuvent pas reconnaître la balise méta minifiée.\n","date":"27 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/configuration/site-params/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Paramètres Du Site"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Configuration","url":"/fr/categories/configuration/"}],"content":"Comme le montre l\u0026rsquo;exemple de site, nous utilisons Répertoire de configuration pour maintenir une organisation plus simple et des paramètres spécifiques à l\u0026rsquo;environnement, cela est particulièrement utile sur les sites multilingues.\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 prend en charge plusieurs formats de configuration : TOML, YAML et JSON, modifiez-le à volonté.\n_default contient les configurations par défaut. Les configurations production remplaceront les configurations par défaut sur l\u0026rsquo;environnement de production. Vous pouvez également définir davantage de configurations d\u0026rsquo;environnement, telles que development (l\u0026rsquo;environnement par défaut de hugo server), testing, staging. Et puis spécifiez l\u0026rsquo;environnement via le drapeau -e. Le nom du fichier de configuration avec le code de langue affecté ne prend effet que sur ce site de langue, comme config.zh-hans.toml, il est utile de séparer les configurations et les paramètres des différentes langues. Les configurations multilingues ne fonctionnent pas sur les configurations author, c\u0026rsquo;est-à-dire que author.zh-hans.toml ne prendra pas effet. Les config, params, menu et menus sont connus pour prendre en charge la configuration multilingue.\n","date":"27 novembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/configuration/structure/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[],"timestamp":1638014004,"title":"Structure De Configuration"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/fr/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 septembre 2021","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/diagram/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Diagram","url":"/fr/tags/diagram/"}],"timestamp":1630467410,"title":"Diagram Guide"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Markdown","url":"/fr/categories/markdown/"}],"content":"Cet article propose quelques cas d\u0026rsquo;utilisation pour montrer comment redimensionner, recadrer, ajuster, remplir et aligner des images.\nRedimensionner les images Nous utilisons la requête URL de l\u0026rsquo;image pour redimensionner les images. Par exemple :\nSpécifiez la largeur et conservez le rapport 1![Resize](featured-sample.webp?width=300px) Spécifiez la hauteur et le rapport de préservation 1![Resize](featured-sample.webp?height=200px) Spécifiez la largeur et la hauteur 1![Resize](featured-sample.webp?width=300px\u0026amp;height=200px) Il peut être utilisé non seulement pour ressources des pages, mais aussi pour les images statiques et les images externes. Cependant, en plus des ressources de page, d\u0026rsquo;autres sont redimensionnées selon le style en ligne, c\u0026rsquo;est-à-dire que leur taille d\u0026rsquo;origine ne changera pas.\nAlignement des images Nous pouvons facilement aligner les images en ajoutant des fragments d\u0026rsquo;URL. Tels que #center, #float-start et #float-end représentent respectivement le centre d\u0026rsquo;alignement, le début flottant et la fin flottante.\nCentre Ajout du fragment #center pour aligner les images au centre.\nPar exemple : @@P2@@.\nDémarrage flottant En ajoutant le fragment #float-start pour les images flottantes au début, nous devons l\u0026rsquo;envelopper dans le shortcode clearfix pour éviter de casser la mise en page.\nVeuillez noter que vous utilisez %% au lieu de \u0026lt;\u0026gt; pour restituer entièrement le contenu au format Markdown.\nPar exemple.\n1{{/% clearfix %/}} 2![Float Start](/featured-sample.webp#float-start) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Fin flottante De même, nous pouvons également faire flotter les images jusqu\u0026rsquo;à la fin en ajoutant le fragment #float-end.\nPar exemple.\n1{{/% clearfix %/}} 2![Float End](/featured-sample.webp#float-end) TEXTS AROUNDS THE IMAGE. 3{{/% /clearfix %/}} Légende HBS permet d\u0026rsquo;utiliser le titre de l\u0026rsquo;image comme légende, cette fonctionnalité est désactivée par défaut, vous devez activer le paramètre post.imageTitleAsCaption :\nTOML YAML JSON params.toml\n1[\u0026#39;poste \u0026#39;] 2 \u0026#39;imageTitleAsCaption \u0026#39; = \u0026#39;vrai\u0026#39; params.yaml\n1poste : 2 imageTitleAsCaption : vrai params.json\n1{ 2 \u0026#34;poste \u0026#34;: { 3 \u0026#34;imageTitleAsCaption \u0026#34;: \u0026#34;vrai\u0026#34; 4 } 5} 1![Image Caption](/featured-sample.webp \u0026#34;Use Image Title as Caption\u0026#34;) Use Image Title as Caption Recadrer les images Recadrez une image pour qu\u0026rsquo;elle corresponde aux dimensions données sans la redimensionner. Vous devez fournir à la fois la largeur et la hauteur. Utilisez l\u0026rsquo;option Anchor[^1] pour modifier le point d\u0026rsquo;ancrage de la zone de recadrage.\n1![Crop Image](/featured-sample.webp?crop=[width]x[height],[anchor]) La taille [width]x[height] est obligatoire. [anchor] est facultatif, le , sert à séparer la taille et l\u0026rsquo;ancre. [^1] : lors de l\u0026rsquo;utilisation de la méthode Crop ou Fill, l\u0026rsquo;ancre détermine l\u0026rsquo;emplacement de la zone de recadrage. Vous pouvez spécifier TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight ou Smart. La valeur par défaut est Smart.\nExemples 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 Remplir les images Recadrez et redimensionnez une image pour qu\u0026rsquo;elle corresponde aux dimensions données. Vous devez fournir à la fois la largeur et la hauteur. Utilisez l\u0026rsquo;option Anchor[^1] pour modifier le point d\u0026rsquo;ancrage de la zone de recadrage.\n1![Fill Image](/featured-sample.webp?fill=[width]x[height],[anchor]) La taille [width]x[height] est obligatoire. [anchor] est facultatif, le , sert à séparer la taille et l\u0026rsquo;ancre. Exemples 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 Ajuster les images Réduisez l\u0026rsquo;échelle d\u0026rsquo;une image pour l\u0026rsquo;adapter aux dimensions données tout en conservant les proportions. Vous devez fournir à la fois la largeur et la hauteur.\n1![Fit Image](/featured-sample.webp?fit=[width]x[height]) Filtres Luminosité Le brightness doit être dans la plage (-100, 100).\n1![Image Brightness](/featured-sample.webp?brightness=-30) Balance des couleurs ColorBalance crée un filtre qui modifie la balance des couleurs d\u0026rsquo;une image. Les paramètres de pourcentage pour chaque canal de couleur (rouge, vert, bleu) doivent être dans la plage (-100, 500).\n1![Image ColorBalance](/featured-sample.webp?colorBalance=-50,50,150) Coloriser Colorize crée un filtre qui produit une version colorisée d\u0026rsquo;une image. Le paramètre de teinte est l\u0026rsquo;angle sur la roue chromatique, généralement dans la plage (0, 360). Le paramètre de saturation doit être dans la plage (0, 100). Le paramètre pourcentage spécifie la force de l\u0026rsquo;effet, il doit être dans la plage (0, 100).\n1![Image Colorize](/featured-sample.webp?colorize=-100,50,150) Contraste Le contrast doit être dans la plage (-100, 100).\n1![Image Contrast](/featured-sample.webp?contrast=50) Gamma Gamma crée un filtre qui effectue une correction gamma sur une image. Le paramètre gamma doit être positif. Gamma = 1 donne l\u0026rsquo;image originale. Un gamma inférieur à 1 assombrit l\u0026rsquo;image et un gamma supérieur à 1 l\u0026rsquo;éclaircit.\n1![Image Gamma](/featured-sample.webp?gamma=2) Flou gaussien Applique un flou gaussien à une image.\n1![Image GaussianBlur](/featured-sample.webp?gaussianBlur=2) Niveaux de gris Grayscale crée un filtre qui produit une version en niveaux de gris d\u0026rsquo;une image.\n1![Image Grayscale](/featured-sample.webp?grayscale) Teinte Hue crée un filtre qui fait pivoter la teinte d\u0026rsquo;une image. Le décalage de l\u0026rsquo;angle de teinte est généralement compris entre -180 et 180.\n1![Image Hue](/featured-sample.webp?hue=90) Inverser Inverser crée un filtre qui annule les couleurs d\u0026rsquo;une image.\n1![Image Invert](/featured-sample.webp?invert) Pixeliser Pixelate crée un filtre qui applique un effet de pixellisation à une image.\n1![Image Pixelate](/featured-sample.webp?pixelate=8) Saturation Saturation crée un filtre qui modifie la saturation d\u0026rsquo;une image.\n1![Image Saturation](/featured-sample.webp?saturation=100) Sépia Sépia crée un filtre qui produit une version sépia d\u0026rsquo;une image.\n1![Image Sepia](/featured-sample.webp?sepia=200) Sigmoïde Sigmoïde crée un filtre qui modifie le contraste d\u0026rsquo;une image à l\u0026rsquo;aide d\u0026rsquo;une fonction sigmoïde et renvoie l\u0026rsquo;image ajustée. Il s’agit d’un changement de contraste non linéaire utile pour les réglages des photos car il préserve les détails des hautes lumières et des ombres.\n1![Image Sigmoid](/featured-sample.webp?sigmoid=2,5) Masque flou UnsharpMask crée un filtre qui affine une image. Le paramètre sigma est utilisé dans une fonction gaussienne et affecte le rayon d\u0026rsquo;effet. Sigma doit être positif. Le rayon d\u0026rsquo;affûtage est à peu près égal à 3 * sigma. Le paramètre montant contrôle à quel point les bordures des bords deviennent plus sombres et plus claires. Généralement entre 0.5 et 1.5. Le paramètre de seuil contrôle le changement de luminosité minimum qui sera accentué. Généralement entre 0 et 0.05.\n1![Image UnsharpMask](/featured-sample.webp?unsharpMask=10,1,0.05) ","date":"15 août 2021","img":"/docs/image-processing/featured-sample.webp","lang":"fr","langName":"Français","largeImg":"/docs/image-processing/featured-sample_hu_1fde8481ba13bdfe.webp","permalink":"/fr/docs/image-processing/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"/docs/image-processing/featured-sample_hu_83bcf2b9437c7b6a.webp","tags":[{"title":"Image","url":"/fr/tags/image/"},{"title":"Caption","url":"/fr/tags/caption/"},{"title":"Resize","url":"/fr/tags/resize/"},{"title":"Crop","url":"/fr/tags/crop/"},{"title":"Fill","url":"/fr/tags/fill/"},{"title":"Fit","url":"/fr/tags/fit/"},{"title":"Brightness","url":"/fr/tags/brightness/"},{"title":"ColorBalance","url":"/fr/tags/colorbalance/"},{"title":"Colorize","url":"/fr/tags/colorize/"},{"title":"Contrast","url":"/fr/tags/contrast/"},{"title":"Gamma","url":"/fr/tags/gamma/"},{"title":"GaussianBlur","url":"/fr/tags/gaussianblur/"},{"title":"Grayscale","url":"/fr/tags/grayscale/"},{"title":"Hue","url":"/fr/tags/hue/"},{"title":"Invert","url":"/fr/tags/invert/"},{"title":"Pixelate","url":"/fr/tags/pixelate/"},{"title":"Saturation","url":"/fr/tags/saturation/"},{"title":"Sepia","url":"/fr/tags/sepia/"},{"title":"Sigmoid","url":"/fr/tags/sigmoid/"},{"title":"UnsharpMask","url":"/fr/tags/unsharpmask/"}],"timestamp":1629008346,"title":"Traitement D'images"},{"authors":[{"title":"Hugo Authors","url":"/fr/authors/hugo/"}],"categories":[],"content":"This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme.\nHeadings 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. Note 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 novembre 2020","img":"https://1552afcb.notes-6if.pages.dev/images/markdown.png","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/markdown-syntax/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Markdown","url":"/fr/tags/markdown/"},{"title":"CSS","url":"/fr/tags/css/"},{"title":"HTML","url":"/fr/tags/html/"}],"timestamp":1604880000,"title":"Markdown Syntax Guide"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Cet article montre comment utiliser le shortcode alert.\nImportant Depuis v1.8.0, vous pouvez créer des alertes sans shortcode, voir alertes de citation de bloc.\nSyntaxe En ligne 1{{\u0026lt; alert [type] \u0026gt;}}INLINE ALERT{{\u0026lt; /alert \u0026gt;}} Bloc 1{{\u0026lt; alert [type] \u0026gt;}} 2BLOCK ALERT 3{{\u0026lt; /alert \u0026gt;}} Le paramètre type est optionnel. Par défaut, info, valeurs disponibles : info, success, warning et danger.\nAvec titre 1{{\u0026lt; alert [type] \u0026gt;}} 2{{\u0026lt; alert-heading \u0026gt;}}Well Done!{{\u0026lt; /alert-heading \u0026gt;}} 3ALERT MESSAGE 4{{\u0026lt; /alert \u0026gt;}} Avec la syntaxe Markdown 1{{% alert warning %}} 2Alert Shortcode with Markdown Syntax: 3```bash 4$ echo \u0026#39;Un exemple de shortcode d\u0026#39;alerte avec la syntaxe 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; Veuillez noter que vous devrez activer la configuration 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} Exemples Primaire Infos Aww ouais, vous avez lu avec succès ce message d'alerte important. Cet exemple de texte va être un peu plus long afin que vous puissiez voir comment l'espacement dans une alerte fonctionne avec ce type de contenu. Avertissement Danger Bravo ! Aww ouais, vous avez lu avec succès ce message d'alerte important. Cet exemple de texte va être un peu plus long afin que vous puissiez voir comment l'espacement dans une alerte fonctionne avec ce type de contenu. ","date":"22 octobre 2020","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/alert/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Alert","url":"/fr/tags/alert/"}],"timestamp":1603324800,"title":"Code Court D'alerte"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Une description détaillée des codes courts des médias, tels que Bilibili, Tencent, Youku, iQiyi et 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\n1{{\u0026lt; iqiyi \u0026#34;vid\u0026#34; \u0026#34;tvid\u0026#34; \u0026gt;}} Musique Netease 1{{\u0026lt; neteasemusic \u0026#34;id\u0026#34; [auto [type]] \u0026gt;}} Paramètre Descriptif auto Le auto contrôle s\u0026rsquo;il faut lire automatiquement. Booléen et facultatif, par défaut false. type Le paramètre type est facultatif. Par défaut, 2. asciinema 1{{\u0026lt; asciinema id \u0026gt;}} ","date":"22 octobre 2020","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/media/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"Bilibili","url":"/fr/tags/bilibili/"},{"title":"Tencent","url":"/fr/tags/tencent/"},{"title":"Youku","url":"/fr/tags/youku/"},{"title":"IQiyi","url":"/fr/tags/iqiyi/"},{"title":"Netease Music","url":"/fr/tags/netease-music/"},{"title":"Asciinema","url":"/fr/tags/asciinema/"}],"timestamp":1603324800,"title":"Codes Courts Des Médias"},{"authors":[{"title":"Razon Yang","url":"/fr/authors/razonyang/"}],"categories":[{"title":"Shortcode","url":"/fr/categories/shortcode/"}],"content":"Une description détaillée des codes courts de l\u0026rsquo;IDE en ligne, tels que JSFiddle, CodePen, JSRun.\nJSFiddle 1{{\u0026lt; jsfiddle \u0026#34;user/id\u0026#34; \u0026gt;}} CodePen 1{{\u0026lt; codepen \u0026#34;id\u0026#34; \u0026gt;}} ##JSRun\n1{{\u0026lt; jsrun \u0026#34;id\u0026#34; \u0026gt;}} Résumé 1{{\u0026lt; gist razonyang f82a9399c2f682df36432f0ef828c451 \u0026gt;}} ","date":"22 octobre 2020","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/docs/shortcodes/online-ide/","series":[{"title":"Docs","url":"/fr/series/docs/"}],"smallImg":"","tags":[{"title":"JSFiddle","url":"/fr/tags/jsfiddle/"},{"title":"CodePen","url":"/fr/tags/codepen/"},{"title":"JSRun","url":"/fr/tags/jsrun/"}],"timestamp":1603324800,"title":"Codes Courts IDE en Ligne"},{"authors":[{"title":"Hugo Authors","url":"/fr/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 mars 2019","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/rich-content/","series":[],"smallImg":"","tags":[{"title":"Instagram","url":"/fr/tags/instagram/"},{"title":"YouTube","url":"/fr/tags/youtube/"},{"title":"Twitter","url":"/fr/tags/twitter/"},{"title":"Vimeo","url":"/fr/tags/vimeo/"},{"title":"Privacy","url":"/fr/tags/privacy/"}],"timestamp":1552176000,"title":"Rich Content"},{"authors":[{"title":"Hugo Authors","url":"/fr/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 mars 2019","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/placeholder-text/","series":[],"smallImg":"","tags":[{"title":"Markdown","url":"/fr/tags/markdown/"},{"title":"Text","url":"/fr/tags/text/"}],"timestamp":1552089600,"title":"Placeholder Text"},{"authors":[{"title":"Hugo Authors","url":"/fr/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 mars 2019","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/math-typesetting/","series":[],"smallImg":"","tags":[{"title":"Math","url":"/fr/tags/math/"}],"timestamp":1552003200,"title":"Math Typesetting"},{"authors":[{"title":"Hugo Authors","url":"/fr/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 mars 2019","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/posts/emoji-support/","series":[],"smallImg":"","tags":[{"title":"Emoji","url":"/fr/tags/emoji/"}],"timestamp":1551744000,"title":"Emoji Support"},{"authors":[],"categories":[],"content":"","date":"1 janvier 1","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/archive/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"Archives Des Messages"},{"authors":[],"categories":[],"content":"","date":"1 janvier 1","img":"","lang":"fr","langName":"Français","largeImg":"","permalink":"/fr/faq/","series":[],"smallImg":"","tags":[],"timestamp":-62135596800,"title":"FAQ"}]
