<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://guitehub.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://guitehub.github.io/" rel="alternate" type="text/html" /><updated>2026-09-18T01:48:05+00:00</updated><id>https://guitehub.github.io/feed.xml</id><title type="html">Le Hub de la Guite</title><subtitle>/dev/null</subtitle><entry><title type="html">gueathub</title><link href="https://guitehub.github.io/tool/2026/09/17/gueathub.html" rel="alternate" type="text/html" title="gueathub" /><published>2026-09-17T00:00:00+00:00</published><updated>2026-09-17T00:00:00+00:00</updated><id>https://guitehub.github.io/tool/2026/09/17/gueathub</id><content type="html" xml:base="https://guitehub.github.io/tool/2026/09/17/gueathub.html"><![CDATA[<h1 id="gueathub--livre-de-recettes-et-liste-de-courses">gueathub — livre de recettes et liste de courses</h1>

<p><a href="/outils/gueathub/" class="app-button">Ouvrir gueathub <i class="bi bi-arrow-right"></i></a></p>

<h2 id="à-quoi-ça-sert">À QUOI ÇA SERT</h2>
<p>gueathub est un livre de recettes qui fait aussi la liste de courses. On choisit
des recettes et un nombre de portions : l’app additionne les ingrédients de toutes
les recettes, les range par rayon du magasin, et on coche au fur et à mesure dans
les allées.</p>

<p>Elle sert aussi en cuisine : étapes à cocher, minuteurs, écran qui reste allumé.</p>

<h2 id="comment-on-lutilise">COMMENT ON L’UTILISE</h2>
<ol>
  <li>Dans « Recettes », on cherche une recette (par son nom ou un ingrédient), on
filtre si besoin, puis on touche « Ajouter » et on règle les portions avec − et +.</li>
  <li>Dans « Liste », tout est déjà additionné, converti et arrondi pour les courses
(75 cl de lait d’une recette + 100 ml d’une autre = « 85 cl »), puis rangé par
rayon. Les basiques qu’on a normalement chez soi (sel, huile, épices…) sont mis
à part dans « À vérifier au placard ».</li>
  <li>En magasin, on coche. Si on change ensuite les portions d’une recette, les
articles concernés se décochent et affichent « quantité modifiée ».</li>
  <li>On peut aussi ajouter des articles à la main (éponges, café…), copier la liste
pour l’envoyer, et ranger les rayons dans l’ordre de son magasin (« Réglages »).</li>
  <li>Sur la fiche d’une recette : quantités recalculées pour le nombre de portions,
étapes à cocher, minuteurs et « Garder l’écran allumé ».</li>
</ol>

<p>Rien n’est envoyé nulle part : pas de compte, la sélection et les coches restent
dans le navigateur de l’appareil. L’app s’installe sur l’écran d’accueil du
téléphone et fonctionne hors-ligne, pratique au fond d’un supermarché sans réseau.</p>

<h2 id="sur-quelle-techno-cest-bâti">SUR QUELLE TECHNO C’EST BÂTI</h2>
<p>C’est une page web statique servie par GitHub Pages, comme le reste du site, mais
sous forme de dossier (<code class="language-plaintext highlighter-rouge">outils/gueathub/</code>) plutôt qu’en un seul fichier :</p>

<ul>
  <li>HTML + JavaScript « vanilla » en modules ES, sans framework ni bundler ;</li>
  <li>Tailwind CSS v4, compilé à l’avance et branché sur les couleurs et le mode
clair/sombre du blog (les mêmes variables CSS, <code class="language-plaintext highlighter-rouge">assets/css/tokens.css</code>) ;</li>
  <li>la logique (portions, conversions d’unités, arrondis, addition des ingrédients)
est faite de fonctions pures, testées à 100 % avec <code class="language-plaintext highlighter-rouge">node --test</code> ;</li>
  <li>un service worker garde l’app en cache pour le hors-ligne et propose
« Recharger » quand une nouvelle version est publiée ;</li>
  <li>les icônes sont des SVG en ligne : aucune ressource chargée depuis un CDN.</li>
</ul>

<p>Les recettes sont de simples fichiers JSON dans le repo. Au moment de la
publication, Jekyll les rassemble en un seul <code class="language-plaintext highlighter-rouge">recettes.json</code> que l’app télécharge.</p>

<h2 id="ajouter-une-recette">AJOUTER UNE RECETTE</h2>
<p>Sans toucher au code :</p>

<ol>
  <li>Mettre la recette au format gueathub : un fichier JSON qui suit le schéma
<a href="/outils/gueathub/schema/recette.schema.json">recette.schema.json</a>. Je la fais
convertir par Claude à partir de la recette d’origine, en lui donnant le schéma
et la liste des ingrédients déjà utilisés
(<a href="/outils/gueathub/ingredients.txt">ingredients.txt</a>), pour réutiliser les
mêmes noms.</li>
  <li>L’enregistrer dans <code class="language-plaintext highlighter-rouge">_data/gueathub/recettes/</code> sous le nom de son identifiant
(par exemple <code class="language-plaintext highlighter-rouge">gratin-dauphinois.json</code>), avec si on veut une photo
<code class="language-plaintext highlighter-rouge">assets/gueathub/recettes/gratin-dauphinois.webp</code>.</li>
  <li>Lancer <code class="language-plaintext highlighter-rouge">npm run check</code> : le script vérifie le format, les rayons et les unités,
et repère les ingrédients presque en double (« tomate » et « tomates »).</li>
  <li>Pousser : la recette apparaît dans l’app. La même vérification tourne dans
GitHub Actions à chaque push.</li>
</ol>]]></content><author><name>La Guite</name></author><category term="tool" /><summary type="html"><![CDATA[gueathub — livre de recettes et liste de courses]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/vignette-gueathub.ico" /><media:content medium="image" url="https://guitehub.github.io/vignette-gueathub.ico" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Fléchettes</title><link href="https://guitehub.github.io/project/2026/09/07/flechettes.html" rel="alternate" type="text/html" title="Fléchettes" /><published>2026-09-07T00:00:00+00:00</published><updated>2026-09-07T00:00:00+00:00</updated><id>https://guitehub.github.io/project/2026/09/07/flechettes</id><content type="html" xml:base="https://guitehub.github.io/project/2026/09/07/flechettes.html"><![CDATA[<h1 id="fléchettes--scoreur">Fléchettes — scoreur</h1>

<p><a href="/projets/flechettes.html" class="app-button">Ouvrir Fléchettes <i class="bi bi-arrow-right"></i></a></p>

<h2 id="à-quoi-ça-sert">À QUOI ÇA SERT</h2>
<p>Un scoreur de fléchettes qui remplace le tableau : on saisit les volées,
les scores et les fins de manche sont gérés tout seuls — plus besoin de
calculer de tête.</p>

<p>Plusieurs modes de jeu :</p>
<ul>
  <li>501 et 301 (x01, avec options double in / double out) ;</li>
  <li>Cricket (avec ou sans points, cut-throat possible) ;</li>
  <li>Horloge (tour de cadran).</li>
</ul>

<h2 id="comment-on-lutilise">COMMENT ON L’UTILISE</h2>
<ol>
  <li>On ajoute les joueurs et on choisit le mode.</li>
  <li>On saisit chaque volée de fléchettes.</li>
  <li>Les scores, marques et fins de manche se mettent à jour automatiquement.</li>
</ol>

<h2 id="sur-quelle-techno-cest-bâti">SUR QUELLE TECHNO C’EST BÂTI</h2>
<p>C’est une page web autonome, en un seul fichier (flechettes.html) :
HTML + CSS + JavaScript, sans aucune dépendance ni bibliothèque externe.</p>

<p>Tout se passe directement dans le navigateur — rien n’est envoyé sur un
serveur, donc ça fonctionne aussi hors-ligne.</p>

<p>L’habillage visuel reprend les couleurs, polices et le mode clair/sombre du
blog « Le Hub de la Guite » pour s’intégrer comme une page du site.</p>]]></content><author><name>La Guite</name></author><category term="project" /><summary type="html"><![CDATA[Fléchettes — scoreur]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/vignette-flechettes.ico" /><media:content medium="image" url="https://guitehub.github.io/vignette-flechettes.ico" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Yam’s</title><link href="https://guitehub.github.io/project/2026/09/07/yams.html" rel="alternate" type="text/html" title="Yam’s" /><published>2026-09-07T00:00:00+00:00</published><updated>2026-09-07T00:00:00+00:00</updated><id>https://guitehub.github.io/project/2026/09/07/yams</id><content type="html" xml:base="https://guitehub.github.io/project/2026/09/07/yams.html"><![CDATA[<h1 id="yams--feuille-de-score">Yam’s — feuille de score</h1>

<p><a href="/projets/yams.html" class="app-button">Ouvrir Yam’s <i class="bi bi-arrow-right"></i></a></p>

<h2 id="à-quoi-ça-sert">À QUOI ÇA SERT</h2>
<p>Une feuille de score de Yam’s (le jeu de dés) qui remplace le papier :
on saisit les points, les totaux se calculent tout seuls et la partie
se retrouve d’un appareil à l’autre… sans rien installer.</p>

<h2 id="comment-on-lutilise">COMMENT ON L’UTILISE</h2>
<ol>
  <li>On ajoute les joueurs.</li>
  <li>On remplit les cases au fil de la partie.</li>
  <li>Les sous-totaux, la prime et le total final se mettent à jour
automatiquement.</li>
</ol>

<h2 id="sur-quelle-techno-cest-bâti">SUR QUELLE TECHNO C’EST BÂTI</h2>
<p>C’est une page web autonome, en un seul fichier (yams.html) :
HTML + CSS + JavaScript, sans aucune dépendance ni bibliothèque externe.</p>

<p>Tout se passe directement dans le navigateur — rien n’est envoyé sur un
serveur, donc ça fonctionne aussi hors-ligne.</p>

<p>L’habillage visuel reprend les couleurs, polices et le mode clair/sombre du
blog « Le Hub de la Guite » pour s’intégrer comme une page du site.</p>]]></content><author><name>La Guite</name></author><category term="project" /><summary type="html"><![CDATA[Yam’s — feuille de score]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/vignette-yams.ico" /><media:content medium="image" url="https://guitehub.github.io/vignette-yams.ico" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Économie de consommation facile sur CPU AMD AM5 sans perte de performance</title><link href="https://guitehub.github.io/blog/guide/2026/07/04/economie_conso_cpu_am5_facile.html" rel="alternate" type="text/html" title="Économie de consommation facile sur CPU AMD AM5 sans perte de performance" /><published>2026-07-04T00:00:00+00:00</published><updated>2026-07-04T00:00:00+00:00</updated><id>https://guitehub.github.io/blog/guide/2026/07/04/economie_conso_cpu_am5_facile</id><content type="html" xml:base="https://guitehub.github.io/blog/guide/2026/07/04/economie_conso_cpu_am5_facile.html"><![CDATA[<h1 id="économie-de-consommation-facile-sur-cpu-amd-am5-sans-perte-de-performance">Économie de consommation facile sur CPU AMD AM5 sans perte de performance</h1>

<p>En jouant un peu avec le BIOS de la carte mère il est possible de baisser facilement la consommation brute du processeur sans perdre le moindre FPS en jeu. La manip est rapide et sûre.</p>

<h2 id="accéder-aux-bons-réglages">Accéder aux bons réglages</h2>

<p>À noter : ces réglages sont ici décrits pour une carte mère <strong>ASUS</strong>, mais l’idée et les menus sont très souvent similaires sur les autres marques.</p>

<p>Redémarrez sur le BIOS (touche en fonction du fabricant), puis appuyez sur <strong>F7</strong> pour passer en mode avancé. Rendez-vous ensuite dans :</p>

<p><strong>AI Tweaker → Precision Boost Overdrive</strong></p>

<h2 id="étape-1--activer-lamd-eco-mode">Étape 1 — Activer l’AMD Eco Mode</h2>

<blockquote>
  <p>L’Eco Mode impose au processeur une limite de puissance absolue plus basse, ce qui réduit sa consommation et sa chauffe. Comme les CPU modernes atteignent l’essentiel de leurs performances en jeu bien avant leur puissance maximale, on perd très peu, voire rien, en pratique.</p>
</blockquote>

<p>Dans <strong>Precision Boost Overdrive (PBO)</strong>, sélectionnez <strong>AMD Eco Mode</strong>.</p>

<p><img src="/assets/images/signal-2026-07-05-01-04-17-361_002.jpg" alt="ECO mode" /></p>

<p>Vous pouvez ensuite choisir le mode : <strong>105 W</strong> est un bon compromis pour un usage polyvalent. Personnellement je suis sur le mode <strong>65 W</strong>, mais c’est parce que ce PC est dédié aux LAN et ne sert qu’au jeu donc vraiment pas besoin de toute la puissance CPU.</p>

<p><img src="/assets/images/signal-2026-07-05-01-04-39-594_002.jpg" alt="ECO mode TDP 65W" /></p>

<p>Petit détail à garder en tête : ces valeurs (65, 105…) ne correspondent pas aux vrais watts consommés, c’est une estimation basée sur <a href="https://www.cowcotland.com/news/81556/amd-clarifie-les-notions-de-tdp-et-ppt-pour-les-processeurs-ryzen-7000.html" target="_blank">un calcul interne assez obscur</a>.</p>

<h2 id="étape-2--le-curve-optimizer">Étape 2 — Le Curve Optimizer</h2>

<blockquote>
  <p>Le Curve Optimizer applique un undervolting : il abaisse la tension fournie au processeur pour un même niveau de performance. Résultat, le CPU consomme et chauffe encore moins, et peut même se montrer plus stable en fréquence ; d’où l’intérêt de combiner les deux réglages.</p>
</blockquote>

<p>Un peu plus bas dans le menu, cherchez le <strong>Curve Optimizer</strong>.</p>

<p><img src="/assets/images/signal-2026-07-05-01-08-05-565_002.jpg" alt="Curve Optimizer" /></p>

<p>Si rien n’est configuré, mettez les valeurs suivantes :</p>

<ul>
  <li><strong>Curve Optimizer</strong> : All cores</li>
  <li><strong>All Core Curve Optimizer Sign</strong> : Negative</li>
  <li><strong>All Core Curve Optimizer Magnitude</strong> : 15 à 20 sans problème</li>
</ul>

<p>Au-delà de 20, il faut y aller progressivement : augmentez par petits crans et vérifiez la stabilité à chaque fois. Le jour où ça finit par crasher, revenez simplement à la dernière valeur stable.</p>

<p>Donc :</p>
<ul>
  <li>Si vous êtes <strong>en dessous</strong>, montez à 20.</li>
  <li>Si vous avez déjà une valeur <strong>supérieure à 20</strong>
    <ul>
      <li>soit ne touchez à rien, ça a probablement déjà été appliqué précédemment, auquel cas si ça fonctionnait jusque là c’est bon;</li>
      <li>soit, comme mentionné au dessus, essayez de rajouter juste un cran de plus (par exemple +2) : si ça crash prochainement à l’usage, revenez sur une valeur plus basse.</li>
    </ul>
  </li>
</ul>

<h2 id="le-résultat">Le résultat</h2>

<p>Une fois ces réglages appliqués, on obtient un CPU qui consomme nettement moins, chauffe moins… et tout ça sans le moindre impact sur les performances en jeu. Difficile de faire plus rentable comme optimisation.</p>]]></content><author><name>La Guite</name></author><category term="blog" /><category term="guide" /><summary type="html"><![CDATA[Économie de consommation facile sur CPU AMD AM5 sans perte de performance]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/255d9da4-914c-46ca-8e21-ef9ab599785a.webp" /><media:content medium="image" url="https://guitehub.github.io/255d9da4-914c-46ca-8e21-ef9ab599785a.webp" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">icomkr</title><link href="https://guitehub.github.io/tool/2026/06/13/icomkr.html" rel="alternate" type="text/html" title="icomkr" /><published>2026-06-13T00:00:00+00:00</published><updated>2026-06-13T00:00:00+00:00</updated><id>https://guitehub.github.io/tool/2026/06/13/icomkr</id><content type="html" xml:base="https://guitehub.github.io/tool/2026/06/13/icomkr.html"><![CDATA[<h1 id="icomkr--petit-convertisseur-dicônes">icomkr — petit convertisseur d’icônes</h1>

<p><a href="/outils/icomkr.html" class="app-button">Ouvrir icomkr <i class="bi bi-arrow-right"></i></a></p>

<h2 id="à-quoi-ça-sert">À QUOI ÇA SERT</h2>
<p>icomkr transforme une image JPG ou PNG (ou WebP, GIF…) en un fichier
d’icône .ico, utilisable comme :</p>
<ul>
  <li>favicon d’un site web (l’icône dans l’onglet du navigateur) ;</li>
  <li>icône de dossier sous Windows.</li>
</ul>

<h2 id="comment-on-lutilise">COMMENT ON L’UTILISE</h2>
<ol>
  <li>On glisse-dépose une image dans la page (ou on clique pour la choisir).</li>
  <li>On coche les tailles à inclure dans le .ico (16, 32, 48, 256 px…).</li>
  <li>Si l’image n’est pas carrée, on choisit « Marges » (ajout d’un fond,
transparent ou coloré) ou « Rogner » (recadrage au centre).</li>
  <li>On clique sur « Générer le .ico » et le fichier se télécharge.</li>
</ol>

<p>Un seul .ico est produit, contenant toutes les tailles choisies à la fois,
comme l’exige le format.</p>

<h2 id="sur-quelle-techno-cest-bâti">SUR QUELLE TECHNO C’EST BÂTI</h2>
<p>C’est une page web autonome, en un seul fichier (icomkr.html) :
HTML + CSS + JavaScript, sans aucune dépendance ni bibliothèque externe.</p>

<p>Tout se passe directement dans le navigateur — aucune image n’est envoyée
sur un serveur, donc ça fonctionne aussi hors-ligne :</p>
<ul>
  <li>l’image est dessinée et redimensionnée pour chaque taille via l’élément
&lt; canvas &gt; du navigateur, puis exportée en PNG ;</li>
  <li>le fichier .ico est ensuite assemblé « à la main » en JavaScript, en
écrivant directement les octets du format ICO (en-tête + table des
images + données PNG empilées).</li>
</ul>

<p>L’habillage visuel reprend les couleurs, polices et le mode clair/sombre du
blog « Le Hub de la Guite » pour s’intégrer comme une page du site.</p>]]></content><author><name>La Guite</name></author><category term="tool" /><summary type="html"><![CDATA[icomkr — petit convertisseur d’icônes]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/1f5bc_color-737917129.png" /><media:content medium="image" url="https://guitehub.github.io/1f5bc_color-737917129.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Sécuriser Windows : mot de passe admin et UAC</title><link href="https://guitehub.github.io/guide/sysadm/2024/12/09/elevation_privilege_windows_like_linux.html" rel="alternate" type="text/html" title="Sécuriser Windows : mot de passe admin et UAC" /><published>2024-12-09T00:00:00+00:00</published><updated>2024-12-09T00:00:00+00:00</updated><id>https://guitehub.github.io/guide/sysadm/2024/12/09/elevation_privilege_windows_like_linux</id><content type="html" xml:base="https://guitehub.github.io/guide/sysadm/2024/12/09/elevation_privilege_windows_like_linux.html"><![CDATA[<h3 id="donner-un-comportement-linux-like-à-windows-pour-les-élévations-de-privilèges">Donner un Comportement “Linux-like” à Windows pour les Élévations de Privilèges</h3>

<p>Si vous êtes administrateur système et que vous trouvez le comportement par défaut de l’UAC (User Account Control) sous Windows un peu trop permissif, voici un petit conseil pour sécuriser un peu plus vos sessions. L’idée est de rapprocher Windows d’un comportement typique des systèmes Linux (Debian-like) : même depuis une session avec des droits administrateurs, toute action nécessitant une élévation demandera la saisie du mot de passe administrateur.</p>

<h4 id="pourquoi-faire-ça-">Pourquoi faire ça ?</h4>
<p>Par défaut, Windows affiche un simple pop-up UAC avec une question “Oui/Non” pour confirmer les actions nécessitant des droits élevés. Cela peut laisser la porte ouverte à des erreurs ou des abus si quelqu’un accède temporairement à votre poste. En exigeant la saisie du mot de passe, vous ajoutez une couche de sécurité et rendez l’accès administratif plus intentionnel, comme avec <code class="language-plaintext highlighter-rouge">sudo</code> sous Linux.</p>

<h4 id="configuration">Configuration</h4>
<p>Pour activer cette fonctionnalité, il suffit de modifier une clé de registre :</p>

<ol>
  <li>
    <p><strong>Ouvrez l’éditeur de registre</strong> :<br />
Exécutez <code class="language-plaintext highlighter-rouge">regedit</code> via le menu Démarrer ou en appuyant sur <code class="language-plaintext highlighter-rouge">Win + R</code>.</p>
  </li>
  <li><strong>Naviguez à la clé suivante</strong> :
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
</code></pre></div>    </div>
  </li>
  <li><strong>Modifiez la valeur</strong> :
    <ul>
      <li>Localisez (ou créez) une clé DWORD nommée <code class="language-plaintext highlighter-rouge">ConsentPromptBehaviorAdmin</code>.</li>
      <li>Définissez sa valeur à <code class="language-plaintext highlighter-rouge">1</code>.</li>
    </ul>
  </li>
  <li><strong>Redémarrez la machine</strong> pour appliquer le changement.</li>
</ol>

<h4 id="résultat-attendu">Résultat attendu</h4>
<p>Avec cette configuration, chaque demande d’élévation affichera une invite vous demandant de saisir le mot de passe d’un compte administrateur valide, même si vous êtes déjà connecté avec des droits élevés.</p>

<h4 id="et-pour-les-fans-du-timeout-sudo-">Et pour les fans du “timeout sudo” ?</h4>
<p>Malheureusement, Windows ne propose pas de mécanisme natif permettant de “mémoriser” la saisie du mot de passe pour quelques minutes, comme <code class="language-plaintext highlighter-rouge">sudo</code>. Une alternative consiste à utiliser un terminal PowerShell ou CMD élevé pour exécuter plusieurs commandes successives nécessitant des privilèges, mais cela reste une contrainte de l’écosystème Windows.</p>

<h2 id="pour-renforcer-la-sécurité-dune-session-windows">Pour renforcer la sécurité d’une session Windows</h2>

<p>En complément de la modification de la clé de registre <code class="language-plaintext highlighter-rouge">ConsentPromptBehaviorAdmin</code>, il est recommandé de régler l’UAC (User Account Control) au niveau maximum. Cela garantit que Windows vous avertira toujours lorsqu’une application ou un processus tente de modifier des paramètres système ou d’effectuer des actions nécessitant des privilèges élevés.</p>

<h3 id="étapes-pour-régler-luac-au-maximum-">Étapes pour régler l’UAC au maximum :</h3>

<ol>
  <li><strong>Accédez aux paramètres de l’UAC</strong> :
    <ul>
      <li>Ouvrez le menu Démarrer et tapez <strong>“UAC”</strong>.</li>
      <li>Cliquez sur <strong>“Modifier les paramètres de contrôle de compte d’utilisateur”</strong>.</li>
    </ul>
  </li>
  <li><strong>Réglez le curseur sur le niveau le plus élevé</strong> :
    <ul>
      <li>Faites glisser le curseur vers le haut, jusqu’à <strong>“Toujours m’avertir”</strong>.</li>
    </ul>
  </li>
  <li><strong>Validez le changement</strong> :
    <ul>
      <li>Cliquez sur <strong>OK</strong> et acceptez l’élévation de privilège si une invite UAC apparaît.</li>
    </ul>
  </li>
</ol>

<hr />

<h3 id="résultat-attendu-">Résultat attendu :</h3>
<ul>
  <li>Vous serez averti chaque fois qu’une application tente d’apporter des modifications à votre système.</li>
  <li>Toute modification nécessitant des privilèges administratifs vous affichera une boîte de dialogue sur le <strong>bureau sécurisé</strong>, empêchant les interactions malveillantes d’autres applications.</li>
</ul>

<h3 id="pourquoi-cest-important-">Pourquoi c’est important ?</h3>
<p>Cette configuration :</p>
<ul>
  <li>Ajoute une couche de protection contre les logiciels malveillants.</li>
  <li>Vous donne un contrôle total sur les actions qui touchent le système.</li>
  <li>Est particulièrement utile dans des environnements critiques ou partagés, où le risque d’exécution non intentionnelle de logiciels malveillants est plus élevé.</li>
</ul>]]></content><author><name>La Guite</name></author><category term="guide" /><category term="sysadm" /><summary type="html"><![CDATA[Donner un Comportement “Linux-like” à Windows pour les Élévations de Privilèges]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/uac-windows-10.png" /><media:content medium="image" url="https://guitehub.github.io/uac-windows-10.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mise en place d’un environnement de développement Jekyll</title><link href="https://guitehub.github.io/guide/dev/2024/12/09/setup_env_dev_jekyll.html" rel="alternate" type="text/html" title="Mise en place d’un environnement de développement Jekyll" /><published>2024-12-09T00:00:00+00:00</published><updated>2024-12-09T00:00:00+00:00</updated><id>https://guitehub.github.io/guide/dev/2024/12/09/setup_env_dev_jekyll</id><content type="html" xml:base="https://guitehub.github.io/guide/dev/2024/12/09/setup_env_dev_jekyll.html"><![CDATA[<h3 id="guide-pratique--mise-en-place-dun-environnement-de-développement-jekyll"><strong>Guide pratique : Mise en place d’un environnement de développement Jekyll</strong></h3>

<p>Ce guide explique comment configurer un environnement de développement pour un site Jekyll sur Windows, en tenant compte des spécificités de cet OS et des éventuels problèmes liés aux dépendances.</p>

<hr />

<h3 id="1-pré-requis"><strong>1. Pré-requis</strong></h3>
<p>Avant de commencer, assurez-vous d’avoir installé :</p>
<ol>
  <li><strong>Ruby</strong> :<br />
Téléchargez Ruby <strong>avec DevKit</strong> depuis <a href="https://rubyinstaller.org/">rubyinstaller.org</a>.
    <ul>
      <li>Choisissez la version 3.2.x (recommandée pour Jekyll).</li>
      <li>Pendant l’installation, activez l’option pour configurer <strong>MSYS2</strong>.</li>
    </ul>
  </li>
  <li>
    <p><strong>Node.js</strong> (optionnel, pour certains plugins) :<br />
Installez la version LTS depuis <a href="https://nodejs.org/">nodejs.org</a>.</p>
  </li>
  <li>
    <p><strong>Git</strong> :<br />
Téléchargez et installez depuis <a href="https://git-scm.com/">git-scm.com</a>.</p>
  </li>
  <li><strong>Navigateur web</strong> :<br />
Pour prévisualiser le site (par défaut, disponible à <code class="language-plaintext highlighter-rouge">http://localhost:4000</code>).</li>
</ol>

<hr />

<h3 id="2-configuration-initiale"><strong>2. Configuration initiale</strong></h3>

<h4 id="a-installer-ruby-et-vérifier-les-outils">a. Installer Ruby et vérifier les outils</h4>
<ol>
  <li>
    <p><strong>Installer Ruby avec DevKit</strong>.<br />
Pendant l’installation, suivez les instructions pour configurer MSYS2.</p>
  </li>
  <li><strong>Mettre à jour RubyGems et Bundler</strong> :
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem update <span class="nt">--system</span>
gem <span class="nb">install </span>bundler
</code></pre></div>    </div>
  </li>
  <li><strong>Vérifier les outils de développement (Windows)</strong> :<br />
Assurez-vous que les outils nécessaires sont installés avec MSYS2 :
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ridk <span class="nb">install
</span>ridk <span class="nb">exec </span>pacman <span class="nt">-Syu</span>
ridk <span class="nb">exec </span>pacman <span class="nt">-S</span> <span class="nt">--needed</span> base-devel mingw-w64-x86_64-toolchain
</code></pre></div>    </div>
  </li>
</ol>

<hr />

<h3 id="3-créer-un-nouveau-site-jekyll"><strong>3. Créer un nouveau site Jekyll</strong></h3>

<h4 id="a-installation-de-jekyll">a. Installation de Jekyll</h4>
<p>Installez Jekyll globalement :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem <span class="nb">install </span>jekyll
</code></pre></div></div>

<h4 id="b-créer-un-nouveau-projet">b. Créer un nouveau projet</h4>
<p>Générez un nouveau site Jekyll :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>jekyll new mon-site
<span class="nb">cd </span>mon-site
</code></pre></div></div>

<h4 id="c-installer-les-dépendances-du-projet">c. Installer les dépendances du projet</h4>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">install</span>
</code></pre></div></div>

<h4 id="d-démarrer-le-serveur-jekyll">d. Démarrer le serveur Jekyll</h4>
<p>Lancez le serveur de développement :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>jekyll serve
</code></pre></div></div>

<p>Visitez le site dans votre navigateur à <a href="http://localhost:4000">http://localhost:4000</a>.</p>

<hr />

<h3 id="4-travailler-sur-un-site-existant"><strong>4. Travailler sur un site existant</strong></h3>

<h4 id="a-récupérer-le-dépôt">a. Récupérer le dépôt</h4>
<p>Clonez le dépôt de votre site :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/votre-utilisateur/votre-repo.git
<span class="nb">cd </span>votre-repo
</code></pre></div></div>

<h4 id="b-installer-les-dépendances">b. Installer les dépendances</h4>
<p>Assurez-vous d’avoir le fichier <code class="language-plaintext highlighter-rouge">Gemfile</code> et exécutez :</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">install</span>
</code></pre></div></div>

<h4 id="c-résolution-des-problèmes-courants">c. Résolution des problèmes courants</h4>
<ul>
  <li><strong>Erreur avec <code class="language-plaintext highlighter-rouge">wdm</code> sous Windows</strong> :<br />
Si vous rencontrez des erreurs liées à <code class="language-plaintext highlighter-rouge">wdm</code>, commentez cette ligne dans le <code class="language-plaintext highlighter-rouge">Gemfile</code> :
    <div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># gem "wdm", "~&gt; 0.1.1", platforms: [:mingw, :x64_mingw, :mswin]</span>
</code></pre></div>    </div>
    <p>Relancez l’installation :</p>
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">install</span>
</code></pre></div>    </div>
  </li>
  <li><strong>Dépendances obsolètes ou en conflit</strong> :<br />
Si une erreur persiste, essayez :
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle update
</code></pre></div>    </div>
  </li>
</ul>

<hr />

<h3 id="5-notes-et-astuces-importantes"><strong>5. Notes et astuces importantes</strong></h3>

<h4 id="a-contexte-windows">a. Contexte Windows</h4>
<ul>
  <li><strong>Compatibilité des gems</strong> :<br />
Certains gems nécessitent des compilations natives (ex. : <code class="language-plaintext highlighter-rouge">ffi</code>, <code class="language-plaintext highlighter-rouge">wdm</code>). Assurez-vous que MSYS2 est correctement installé.</li>
  <li><strong>Pas de <code class="language-plaintext highlighter-rouge">wdm</code> ?</strong> : Utilisez cette commande pour éviter les problèmes de rechargement automatique :
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bundle <span class="nb">exec </span>jekyll serve <span class="nt">--no-watch</span>
</code></pre></div>    </div>
  </li>
</ul>

<h4 id="b-verrouiller-les-versions">b. Verrouiller les versions</h4>
<p>Pour éviter les conflits futurs, utilisez des versions précises dans votre <code class="language-plaintext highlighter-rouge">Gemfile</code>. Par exemple :</p>
<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">gem</span> <span class="s2">"jekyll"</span><span class="p">,</span> <span class="s2">"~&gt; 4.3.4"</span>
<span class="n">gem</span> <span class="s2">"minima"</span><span class="p">,</span> <span class="s2">"~&gt; 2.5.2"</span>
</code></pre></div></div>

<h4 id="c-résolution-des-warnings-sass">c. Résolution des warnings Sass</h4>
<p>Vous pouvez migrer vos fichiers Sass pour remplacer les règles <code class="language-plaintext highlighter-rouge">@import</code> par <code class="language-plaintext highlighter-rouge">@use</code> :</p>
<ul>
  <li>Remplacez :
    <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">@import</span> <span class="s2">"minima"</span><span class="p">;</span>
</code></pre></div>    </div>
  </li>
  <li>Par :
    <div class="language-scss highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">@use</span> <span class="s2">"minima"</span><span class="p">;</span>
</code></pre></div>    </div>
  </li>
</ul>

<hr />

<h3 id="6-ressources-supplémentaires"><strong>6. Ressources supplémentaires</strong></h3>

<ul>
  <li><a href="https://jekyllrb.com/docs/">Documentation officielle de Jekyll</a></li>
  <li><a href="https://github.com/jekyll/jekyll">Dépôt GitHub de Jekyll</a></li>
  <li><a href="https://github.com/Maher4Ever/wdm">Dépôt GitHub pour <code class="language-plaintext highlighter-rouge">wdm</code></a></li>
</ul>

<hr />

<p>En suivant ce guide, vous devriez pouvoir configurer un environnement fonctionnel pour travailler avec Jekyll, même sur Windows. En cas de problème, les logs d’erreur sont souvent très utiles pour identifier et résoudre les conflits. 😊</p>]]></content><author><name>La Guite</name></author><category term="guide" /><category term="dev" /><summary type="html"><![CDATA[Guide pratique : Mise en place d’un environnement de développement Jekyll]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/jekyll-logo-dark-solid.jpg" /><media:content medium="image" url="https://guitehub.github.io/jekyll-logo-dark-solid.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mise hors tension d’un hôte de vSAN stretched cluster</title><link href="https://guitehub.github.io/guide/sysadm/2024/12/08/poweroff_vsan_node_stretched_cluster.html" rel="alternate" type="text/html" title="Mise hors tension d’un hôte de vSAN stretched cluster" /><published>2024-12-08T00:00:00+00:00</published><updated>2024-12-08T00:00:00+00:00</updated><id>https://guitehub.github.io/guide/sysadm/2024/12/08/poweroff_vsan_node_stretched_cluster</id><content type="html" xml:base="https://guitehub.github.io/guide/sysadm/2024/12/08/poweroff_vsan_node_stretched_cluster.html"><![CDATA[<p>Ce tutoriel détaille les étapes nécessaires pour éteindre temporairement un hôte ESXi dans un cluster vSAN stretched avec un witness. Nous intégrons les éléments critiques liés aux politiques de tolérance (FTT), aux pré-checks vSAN, et aux opérations vSAN (rebuild, santé du cluster, etc.).</p>

<h2 id="1-préparation-et-vérifications-initiales">1. Préparation et vérifications initiales</h2>

<h3 id="11-vérifier-la-santé-du-cluster-vsan">1.1 Vérifier la santé du cluster vSAN</h3>
<ol>
  <li>Accédez à vSAN Health dans vSphere Web Client.</li>
  <li>Confirmez que toutes les vérifications sont au vert :
    <ul>
      <li>Pas d’alertes critiques.</li>
      <li>Le Witness Appliance est pleinement opérationnel.</li>
    </ul>
  </li>
  <li>Vérifiez que la connectivité réseau (vSAN et Witness) est fonctionnelle.</li>
</ol>

<h3 id="12-vérifier-la-politique-de-stockage-appliquée">1.2 Vérifier la politique de stockage appliquée</h3>
<p>Pour garantir que les données restent accessibles, assurez-vous que la politique de stockage permet au cluster de tolérer une défaillance :</p>
<ol>
  <li>Accédez à vSAN Cluster → Configuration → vSAN Policies.
2.Vérifiez que le paramètre “Failures to Tolerate (FTT)” est réglé sur 1.
    <ul>
      <li>Si FTT=1, cela signifie qu’une copie des données est disponible sur l’autre nœud (ou sur le Witness) et que le cluster peut tolérer l’arrêt d’un hôte.
        <blockquote>
          <p>Exemple : Une configuration stretch cluster avec Fault domain failures to tolerate = 1 est conforme pour ce scénario.</p>
        </blockquote>
      </li>
    </ul>
  </li>
</ol>

<p><img src="/assets/images/241208-cap1.png" alt="vsan storage policies" class="img-fluid rounded mx-auto d-block" /></p>

<h3 id="13-vérifier-et-ajuster-le-timer-des-rebuilds">1.3 Vérifier et ajuster le timer des rebuilds</h3>
<p>Par défaut, vSAN déclenche une reconstruction des données non conformes si un hôte reste hors ligne plus de 360 minutes (6 heures).
Si l’hôte doit être éteint pour 8 heures, modifiez ce timer pour éviter un rebuild inutile :</p>
<ol>
  <li>Accédez à vSAN Cluster → Advanced Options.</li>
  <li>Recherchez le paramètre VSAN.ClomRepairDelay.</li>
  <li>Changez sa valeur pour 600 minutes (ou une durée supérieure à votre fenêtre de maintenance).</li>
</ol>

<p><img src="/assets/images/241208-cap2.png" alt="vsan cluster configuration" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="/assets/images/241208-cap3.png" alt="vsan cluster advanced options" class="img-fluid rounded mx-auto d-block" /></p>

<h2 id="2-pré-check-et-mise-en-mode-maintenance">2. Pré-check et mise en mode maintenance</h2>

<h3 id="21-migrer-toutes-les-vm">2.1 Migrer toutes les VM</h3>
<p>Migrer manuellement les VM de l’hôte à éteindre vers l’hôte restant :
Utilisez vMotion pour déplacer les VM vers l’hôte actif.
Confirmez que toutes les VM sont opérationnelles sur l’autre hôte avant de continuer.</p>

<h3 id="22-effectuer-le-pré-check-dans-vsan">2.2 Effectuer le pré-check dans vSAN</h3>
<p>Avant de passer en mode maintenance, utilisez l’outil de pré-check intégré dans vSphere pour garantir que toutes les conditions sont réunies.</p>
<ol>
  <li>Accédez à l’hôte concerné → Cliquez sur Enter Maintenance Mode.</li>
  <li>Choisissez l’option “Ensure Accessibility” (recommandé pour votre configuration).</li>
  <li>Laissez le système effectuer un pré-check automatique :
    <ul>
      <li>Ce pré-check vérifie :
Que toutes les données resteront accessibles avec l’option choisie.
Que la politique FTT sera respectée (si ce n’est pas le cas, une migration ou un rebuild peut être suggéré).</li>
      <li>Un message similaire à ceci pourrait apparaître :
“A rebuild operation for any non-compliant objects will be triggered in 360 minutes, unless the host is taken out of maintenance mode. You can change this timer for the cluster in the vSAN advanced settings.”</li>
    </ul>
  </li>
  <li>Si le pré-check est OK, confirmez la mise en mode maintenance directement depuis cette fenêtre.
    <blockquote>
      <p>Note : Si le pré-check identifie des problèmes, réglez-les avant de poursuivre (par exemple, ajuster la politique de stockage ou déplacer manuellement des objets critiques).</p>
    </blockquote>
  </li>
</ol>

<p><img src="/assets/images/241208-cap4.png" alt="vsan data migration pre-check" class="img-fluid rounded mx-auto d-block" /></p>

<h2 id="3-mise-hors-tension-de-lhôte">3. Mise hors tension de l’hôte</h2>
<p>Une fois que l’hôte est en mode maintenance, procédez à son extinction via l’interface vSphere.
Confirmez que l’hôte est éteint dans l’interface.
##4. Surveiller le cluster pendant la maintenance
Vérifiez régulièrement la santé du cluster dans vSAN Health.
Assurez-vous que :
Le cluster reste accessible et opérationnel.
Aucune alerte critique ne survient pendant les 8 heures.</p>

<h2 id="4-surveiller-le-cluster-pendant-la-maintenance">4. Surveiller le cluster pendant la maintenance</h2>

<ol>
  <li>Vérifiez régulièrement la santé du cluster dans vSAN Health.</li>
  <li>Assurez-vous que :
    <ul>
      <li>Le cluster reste accessible et opérationnel.</li>
      <li>Aucune alerte critique ne survient pendant les 8 heures.</li>
    </ul>
  </li>
</ol>

<p><img src="/assets/images/241208-cap4.png" alt="vsan cluster node offline" class="img-fluid rounded mx-auto d-block" /></p>

<h2 id="5-remise-en-ligne-de-lhôte">5. Remise en ligne de l’hôte</h2>

<h3 id="51-redémarrer-lhôte">5.1 Redémarrer l’hôte</h3>
<p>Allumez l’hôte via la console iDRAC, iLO, ou l’interface distante appropriée.
Attendez que l’hôte réintègre le cluster.</p>

<h3 id="52-résynchronisation-des-données-si-nécessaire">5.2 Résynchronisation des données (si nécessaire)</h3>
<p>Si un rebuild a été déclenché, vSAN synchronisera automatiquement les données entre les nœuds pour restaurer leur conformité.
Vérifiez l’état de la synchronisation dans vSAN Health → Resyncing Objects.</p>

<h2 id="6-étape-finale--sortir-du-mode-maintenance">6. Étape finale : Sortir du mode maintenance</h2>
<p>Une fois que l’hôte est pleinement opérationnel et synchronisé :
Désactivez le mode maintenance.
Confirmez que l’hôte participe activement au cluster et que toutes les données sont conformes à la politique de stockage.
Résumé des points importants
Pré-check critique : Effectuez un pré-check vSAN pour valider que l’option “Ensure Accessibility” est suffisante pour votre configuration.
FTT=1 : Assurez-vous que la politique de stockage garantit une tolérance adéquate.
Ajustement du timer rebuild : Évitez des rebuilds inutiles en augmentant le délai (VSAN.ClomRepairDelay) si l’hôte est éteint plus de 6 heures.
Surveillez activement la santé du cluster avant, pendant, et après la maintenance.</p>

<p>Avec cette méthodologie, l’opération sera sécurisée, optimisée, et sans impact majeur.</p>]]></content><author><name>La Guite</name></author><category term="guide" /><category term="sysadm" /><summary type="html"><![CDATA[Ce tutoriel détaille les étapes nécessaires pour éteindre temporairement un hôte ESXi dans un cluster vSAN stretched avec un witness. Nous intégrons les éléments critiques liés aux politiques de tolérance (FTT), aux pré-checks vSAN, et aux opérations vSAN (rebuild, santé du cluster, etc.).]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/VMwarevSAN.png" /><media:content medium="image" url="https://guitehub.github.io/VMwarevSAN.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Workstation d’imagerie médical #2 : Intel i7 13gen - RTX 3060</title><link href="https://guitehub.github.io/build/2023/04/18/PRIMEINT2304.html" rel="alternate" type="text/html" title="Workstation d’imagerie médical #2 : Intel i7 13gen - RTX 3060" /><published>2023-04-18T00:00:00+00:00</published><updated>2023-04-18T00:00:00+00:00</updated><id>https://guitehub.github.io/build/2023/04/18/PRIMEINT2304</id><content type="html" xml:base="https://guitehub.github.io/build/2023/04/18/PRIMEINT2304.html"><![CDATA[<h2 id="spécifications-du-pc-">Spécifications du PC :</h2>

<ul>
  <li>Processeur : Intel Core i7-13700 13ème génération, 2,10 GHz de base, 16 cœurs, 24 processeurs logiques, 1,4 Mo de cache L1, 24 Mo de cache L2 et 30 Mo de cache L3.</li>
  <li>Mémoire : 32 Go de RAM, 3200 MHz, 2 emplacements utilisés sur 4, format DIMM.
Stockage :</li>
  <li>Disque 0 (C:) : Samsung SSD 970 EVO Plus 500GB, capacité de 466 Go.</li>
  <li>Disque 1 (D:) : Samsung SSD 970 EVO Plus 2TB, capacité de 1,8 To.</li>
  <li>Carte réseau sans fil : Intel Wi-Fi 6 AX201 160MHz, connexion 802.11ac.</li>
  <li>Carte graphique : NVIDIA GeForce RTX 3060, DirectX 12, 12 Go de mémoire dédiée.</li>
</ul>

<h2 id="résumé">Résumé</h2>

<h3 id="pourquoi-ce-pc-est-adapté-pour-un-usage-comme-workstation-">Pourquoi ce PC est adapté pour un usage comme workstation :</h3>

<p>Processeur puissant : Avec un processeur Intel Core i7-13700 de 13ème génération, ce PC dispose de 16 cœurs et 24 processeurs logiques. Cela signifie qu’il peut gérer efficacement les tâches lourdes et les applications à forte demande en ressources, comme le rendu 3D, la compilation de code ou les simulations complexes.</p>

<p>Grande quantité de mémoire vive (RAM) : Avec 32 Go de RAM, ce PC peut gérer plusieurs applications simultanément sans ralentir. La mémoire vive est cruciale pour les applications de conception graphique, de montage vidéo et d’autres tâches professionnelles qui nécessitent de manipuler de gros fichiers ou de nombreuses données.</p>

<p>Stockage SSD rapide : Les deux disques SSD (Samsung SSD 970 EVO Plus 500GB et 2TB) offrent des vitesses de lecture et d’écriture rapides, ce qui réduit les temps de chargement et d’enregistrement des fichiers. Les SSD sont également plus fiables et durables que les disques durs traditionnels.</p>

<p>Carte graphique performante : La NVIDIA GeForce RTX 3060 est une carte graphique de qualité qui prend en charge les dernières technologies graphiques, telles que DirectX 12. Elle dispose de 12 Go de mémoire dédiée, ce qui est suffisant pour gérer des tâches graphiquement exigeantes, telles que la conception 3D, le rendu de vidéos et l’édition de photos en haute résolution.</p>

<p>Connectivité sans fil rapide : La carte réseau Intel Wi-Fi 6 AX201 160MHz prend en charge les connexions sans fil 802.11ac, offrant une connectivité sans fil rapide et fiable pour le transfert de fichiers volumineux, les réunions en ligne et d’autres tâches professionnelles.</p>

<p>En résumé, ce PC est adapté comme workstation en raison de sa combinaison de processeur puissant, de grande quantité de mémoire vive, de stockage SSD rapide, de carte graphique performante et de connectivité sans fil rapide. Ces caractéristiques permettent aux professionnels de travailler efficacement sur des projets exigeants et d’utiliser des applications gourmandes en ressources sans rencontrer de problèmes de performance.</p>

<h2 id="benchmarks">Benchmarks</h2>

<p>Voici un résumé des résultats du benchmark pour ce SSD Samsung 970 EVO Plus 500GB :</p>

<p>SEQ Read: 2645,072 Mo/s
RND Read: 51,088 Mo/s (12 472,7 IOPS)
SEQ Write: 2625,545 Mo/s
RND Write: 252,625 Mo/s (61 676,0 IOPS)
Mix Read/Write (70%/30%):
SEQ: 2129,084 Mo/s
RND: 70,432 Mo/s (17 195,3 IOPS)</p>

<p>les SSD Samsung 970 EVO Plus présentent d’excellentes performances en matière de lecture et d’écriture séquentielles et aléatoires, ainsi qu’en lecture/écriture mixte. Ces résultats indiquent que ces SSD sont très bien adapté pour les applications exigeantes en termes de performances de stockage, telles que le montage vidéo, les jeux, les applications de réalité virtuelle et les charges de travail professionnelles.</p>

<h2 id="photos">Photos</h2>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.38a57b531a328c78377fda34cd412257.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.9d3ebdb081f64d531d7d03a9482ff7b7.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.da5e52bdf2386302ea1abefc46c31b5e.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.dc8b1b9ed74004fc7f1ada7831a7aff0.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.90793881d0a9742ceb7ca4b4caa446de.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.acc3ac0c0eb655df24e2f35f21739d17.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>

<p><img src="https://cdna.pcpartpicker.com/static/forever/images/userbuild/428044.7b534fe0c3986504796876d24ce4ef82.1600.jpg" alt="" class="img-fluid rounded mx-auto d-block" /></p>]]></content><author><name>La Guite x GPT4</name></author><category term="build" /><summary type="html"><![CDATA[Spécifications du PC :]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/PXL_20230418_162955431-Grande.jpg" /><media:content medium="image" url="https://guitehub.github.io/PXL_20230418_162955431-Grande.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tableau dynamique de vue des utilisateurs d’un AD.</title><link href="https://guitehub.github.io/sysadm/2023/04/01/AD-users-mgmt_GUI.html" rel="alternate" type="text/html" title="Tableau dynamique de vue des utilisateurs d’un AD." /><published>2023-04-01T00:00:00+00:00</published><updated>2023-04-01T00:00:00+00:00</updated><id>https://guitehub.github.io/sysadm/2023/04/01/AD-users-mgmt_GUI</id><content type="html" xml:base="https://guitehub.github.io/sysadm/2023/04/01/AD-users-mgmt_GUI.html"><![CDATA[<h1 id="tableau-dynamique-de-vue-des-utilisateurs-dun-ad">Tableau dynamique de vue des utilisateurs d’un AD</h1>

<p>PowerShell qui récupère une liste d’utilisateurs à partir d’Active Directory et affiche les informations dans une interface graphique basée sur WPF (Windows Presentation Foundation). Voici un résumé des principales fonctionnalités du script :</p>

<p>Importe les assemblies nécessaires pour utiliser WPF et Windows Forms.
Crée une fenêtre WPF contenant une zone de texte (TextBox) pour filtrer les résultats et une grille de données (DataGrid) pour afficher les informations des utilisateurs.
Crée un DataTable pour stocker les informations des utilisateurs avec les propriétés “Name”, “SamAccountName”, “UserPrincipalName”, “EmailAddress”, “Department”, “lastLogon”, “pwdLastSet”, “whenCreated” et “whenChanged”.
Récupère les utilisateurs depuis Active Directory en incluant toutes les propriétés spécifiées.
Parcourt les utilisateurs récupérés et ajoute leurs informations au DataTable.
Associe le DataTable à la DataGrid pour afficher les informations des utilisateurs dans l’interface graphique.
Ajoute un événement “TextChanged” à la TextBox pour filtrer les résultats affichés dans la DataGrid en fonction du texte saisi par l’utilisateur. La recherche s’effectue sur les colonnes “Name”, “UserPrincipalName”, “SamAccountName”, “EmailAddress” et “Department”.
Affiche la fenêtre WPF et attend que l’utilisateur la ferme.
En résumé, ce script récupère les informations des utilisateurs à partir d’Active Directory, les stocke dans un DataTable, les affiche dans une interface graphique basée sur WPF et permet à l’utilisateur de filtrer les résultats en fonction de certaines propriétés.</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Importez les assembly nécessaires pour utiliser WPF et Windows Forms</span><span class="w">
</span><span class="n">Add-Type</span><span class="w"> </span><span class="nt">-AssemblyName</span><span class="w"> </span><span class="nx">PresentationFramework</span><span class="w">
</span><span class="p">[</span><span class="n">System.Windows.Forms.Application</span><span class="p">]::</span><span class="n">EnableVisualStyles</span><span class="p">()</span><span class="w">

</span><span class="c"># Créez une fenêtre WPF</span><span class="w">
</span><span class="p">[</span><span class="n">xml</span><span class="p">]</span><span class="nv">$xaml</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="sh">@"
&lt;Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Name="Window" Title="Liste des Utilisateurs AD" WindowStartupLocation="CenterScreen" Width="800" Height="600"&gt;
    &lt;Grid&gt;
        &lt;Grid.RowDefinitions&gt;
            &lt;RowDefinition Height="Auto" /&gt;
            &lt;RowDefinition Height="*" /&gt;
        &lt;/Grid.RowDefinitions&gt;
        &lt;TextBox x:Name="FilterBox" Grid.Row="0" Margin="5" /&gt;
        &lt;DataGrid x:Name="DataGrid" Grid.Row="1" Margin="5" AutoGenerateColumns="True" /&gt;
    &lt;/Grid&gt;
&lt;/Window&gt;
"@</span><span class="w">

</span><span class="nv">$reader</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">New-Object</span><span class="w"> </span><span class="nx">System.Xml.XmlNodeReader</span><span class="w"> </span><span class="nv">$xaml</span><span class="p">)</span><span class="w">
</span><span class="nv">$window</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">Windows.Markup.XamlReader</span><span class="p">]::</span><span class="n">Load</span><span class="p">(</span><span class="nv">$reader</span><span class="p">)</span><span class="w">

</span><span class="c"># Créez un DataTable pour stocker les informations des utilisateurs</span><span class="w">
</span><span class="nv">$usersTable</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">New-Object</span><span class="w"> </span><span class="nx">System.Data.DataTable</span><span class="w">
</span><span class="nv">$properties</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">@(</span><span class="s2">"Name"</span><span class="p">,</span><span class="w"> </span><span class="s2">"SamAccountName"</span><span class="p">,</span><span class="w"> </span><span class="s2">"UserPrincipalName"</span><span class="p">,</span><span class="w"> </span><span class="s2">"EmailAddress"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Department"</span><span class="p">,</span><span class="w"> </span><span class="s2">"lastLogon"</span><span class="p">,</span><span class="w"> </span><span class="s2">"pwdLastSet"</span><span class="p">,</span><span class="w"> </span><span class="s2">"whenCreated"</span><span class="p">,</span><span class="w"> </span><span class="s2">"whenChanged"</span><span class="p">)</span><span class="w">

</span><span class="kr">foreach</span><span class="w"> </span><span class="p">(</span><span class="nv">$property</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nv">$properties</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nv">$usersTable</span><span class="o">.</span><span class="nf">Columns</span><span class="o">.</span><span class="nf">Add</span><span class="p">(</span><span class="nv">$property</span><span class="p">)</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Out-Null</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c"># Récupérez les utilisateurs depuis Active Directory</span><span class="w">
</span><span class="nv">$users</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Get-ADUser</span><span class="w"> </span><span class="nt">-Filter</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="nt">-Properties</span><span class="w"> </span><span class="nv">$properties</span><span class="w">

</span><span class="c"># Ajoutez les utilisateurs au DataTable</span><span class="w">
</span><span class="kr">foreach</span><span class="w"> </span><span class="p">(</span><span class="nv">$user</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nv">$users</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
    </span><span class="nv">$userRow</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">$usersTable</span><span class="o">.</span><span class="nf">NewRow</span><span class="p">()</span><span class="w">
    </span><span class="kr">foreach</span><span class="w"> </span><span class="p">(</span><span class="nv">$property</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="nv">$properties</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
        </span><span class="kr">if</span><span class="w"> </span><span class="p">(</span><span class="nv">$property</span><span class="w"> </span><span class="o">-eq</span><span class="w"> </span><span class="s2">"lastLogon"</span><span class="w"> </span><span class="o">-or</span><span class="w"> </span><span class="nv">$property</span><span class="w"> </span><span class="o">-eq</span><span class="w"> </span><span class="s2">"pwdLastSet"</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w">
            </span><span class="nv">$userRow</span><span class="p">[</span><span class="nv">$property</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="n">DateTime</span><span class="p">]::</span><span class="n">FromFileTime</span><span class="p">(</span><span class="nv">$user</span><span class="o">.</span><span class="nv">$property</span><span class="p">)</span><span class="o">.</span><span class="nf">ToString</span><span class="p">(</span><span class="s2">"yyyy-MM-dd - HH:mm:ss"</span><span class="p">)</span><span class="w">
        </span><span class="p">}</span><span class="w"> </span><span class="kr">else</span><span class="w"> </span><span class="p">{</span><span class="w">
            </span><span class="nv">$userRow</span><span class="p">[</span><span class="nv">$property</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">$user</span><span class="o">.</span><span class="nv">$property</span><span class="w">
        </span><span class="p">}</span><span class="w">
    </span><span class="p">}</span><span class="w">
    </span><span class="nv">$usersTable</span><span class="o">.</span><span class="nf">Rows</span><span class="o">.</span><span class="nf">Add</span><span class="p">(</span><span class="nv">$userRow</span><span class="p">)</span><span class="w">
</span><span class="p">}</span><span class="w">

</span><span class="c"># Associez le DataTable à la DataGrid</span><span class="w">
</span><span class="nv">$window</span><span class="o">.</span><span class="nf">FindName</span><span class="p">(</span><span class="s2">"DataGrid"</span><span class="p">)</span><span class="o">.</span><span class="nf">ItemsSource</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">$usersTable</span><span class="o">.</span><span class="nf">DefaultView</span><span class="w">

</span><span class="c"># Ajoutez un événement pour filtrer les résultats lorsque l'utilisateur tape dans la TextBox</span><span class="w">
</span><span class="nv">$window</span><span class="o">.</span><span class="nf">FindName</span><span class="p">(</span><span class="s2">"FilterBox"</span><span class="p">)</span><span class="o">.</span><span class="nf">Add_TextChanged</span><span class="p">({</span><span class="w">
    </span><span class="nv">$filterText</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nv">$window</span><span class="o">.</span><span class="nf">FindName</span><span class="p">(</span><span class="s2">"FilterBox"</span><span class="p">)</span><span class="o">.</span><span class="nf">Text</span><span class="w">
    </span><span class="nv">$window</span><span class="o">.</span><span class="nf">FindName</span><span class="p">(</span><span class="s2">"DataGrid"</span><span class="p">)</span><span class="o">.</span><span class="nf">ItemsSource</span><span class="o">.</span><span class="nf">RowFilter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s2">"Name LIKE '%</span><span class="nv">$filterText</span><span class="s2">%' OR UserPrincipalName LIKE '%</span><span class="nv">$filterText</span><span class="s2">%' OR SamAccountName LIKE '%</span><span class="nv">$filterText</span><span class="s2">%' OR EmailAddress LIKE '%</span><span class="nv">$filterText</span><span class="s2">%' OR Department LIKE '%</span><span class="nv">$filterText</span><span class="s2">%'"</span><span class="w">
</span><span class="p">})</span><span class="w">

</span><span class="c"># Affichez la fenêtre WPF</span><span class="w">
</span><span class="nv">$window</span><span class="o">.</span><span class="nf">ShowDialog</span><span class="p">()</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">Out-Null</span><span class="w">

</span></code></pre></div></div>]]></content><author><name>La Guite</name></author><category term="sysadm" /><summary type="html"><![CDATA[Tableau dynamique de vue des utilisateurs d’un AD]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://guitehub.github.io/f45feba6-c09f-4e6a-99ce-32b9b0c79e77.png" /><media:content medium="image" url="https://guitehub.github.io/f45feba6-c09f-4e6a-99ce-32b9b0c79e77.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>