<?xml
version="1.0" encoding="utf-8"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:atom="http://www.w3.org/2005/Atom"
>

<channel xml:lang="fr">
	<title>Tech de Gamuza</title>
	<link>https://tech.gamuza.fr/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://tech.gamuza.fr/spip.php?id_auteur=1&amp;page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>Windows 11 : g&#233;rer le menu d&#233;marrer &#034;Redesign&#034;</title>
		<link>https://tech.gamuza.fr/Windows-11-desactiver-le-menu-demarrer-Redesign.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Windows-11-desactiver-le-menu-demarrer-Redesign.html</guid>
		<dc:date>2026-04-12T09:48:52Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>&lt;p&gt;Tutoriel : param&#233;trer le menu d&#233;marrer &#034;Redesign&#034; de Windows 11 ou utiliser &lt;strong&gt;ViVe Tool&lt;/strong&gt; pour le d&#233;sactiver&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-bricolages-Windows-.html" rel="directory"&gt;Windows&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Contexte&lt;/h2&gt;
&lt;p&gt;La mise &#224; jour &lt;strong&gt;KB5068861&lt;/strong&gt; de Windows 11 (version 25H2 et 24H2, novembre 2025) impose un changement du &lt;strong&gt;menu d&#233;marrer&lt;/strong&gt; qui :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; permet de supprimer le (parfois) p&#233;nible &#034;Nos recommandations&#034;&lt;/li&gt;&lt;li&gt; impose un affichage de l'acc&#232;s aux programmes g&#233;r&#233; uniquement par Windows 11 et donc &lt;strong&gt;non configurable&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Param&#233;trer le menu d&#233;marrer &#034;Redesign&#034;&lt;/h2&gt;
&lt;p&gt;La configuration du contenu de ce nouveau menu d&#233;marrer se fait dans les &lt;strong&gt;Param&#232;tres de l'ordinateur&lt;/strong&gt; accessible par le raccourci clavier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Windows + i&lt;/code&gt; &gt; &lt;strong&gt;Personnalisation&lt;/strong&gt; &gt; &lt;strong&gt;D&#233;marrer&lt;/strong&gt;&lt;br class='autobr' /&gt;
Les &#233;l&#233;ments configurables par activation / d&#233;sactivation sont nombreux : vous pouvez les utiliser pour vous d&#233;barrasser des plus &#034;intrusifs&#034; de Microsoft, &#224; savoir :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &#034;Afficher les fichiers recommand&#233;s&#034;&lt;/li&gt;&lt;li&gt; &#034;Afficher les recommandations pour les conseils, les raccourcis...&#034;&lt;/li&gt;&lt;li&gt; &#034;Afficher l'appareil mobile dans l'&#233;cran d'accueil&#034;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;La pr&#233;sentation des applications dans la partie &lt;strong&gt;Tout&lt;/strong&gt; est configur&#233;e via le menu &#034;Affichage&#034; directement dans le menu. Trois pr&#233;sentations sont possibles : &#034;Cat&#233;gorie&#034;, &#034;Grille&#034; ou &#034;Liste&#034; : &#224; priori seul le mode &lt;strong&gt;&#034;Liste&#034;&lt;/strong&gt; est envisageable si vous vous voulez &#233;viter les clics inutiles...&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Utilisation de ViVe Tool pour revenir au menu d&#233;marrer &#034;classique&#034;&lt;/h2&gt;
&lt;p&gt;Pour d&#233;sactiver ce menu &#034;Redesign&#034; et retrouver l'acc&#232;s au menu &lt;strong&gt;&#034;Toutes les applications&#034;&lt;/strong&gt; et votre organisation soigneusement optimis&#233;e &#224; l'ensemble des programmes, il est n&#233;cessaire d'utiliser l'outil &lt;strong&gt;ViVe Tool&lt;/strong&gt; &lt;a href=&#034;https://github.com/thebookisclosed/ViVe&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/thebookisclosed/ViVe&lt;/a&gt; outil en ligne de commande permettant d'activer/d&#233;sactiver des fonctionnalit&#233;s de Windows 11 :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; t&#233;l&#233;chargez la derni&#232;re version de l'outil depuis son repository Git : &lt;a href=&#034;https://github.com/thebookisclosed/ViVe/releases&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/thebookisclosed/ViVe/releases&lt;/a&gt;&lt;/li&gt;&lt;li&gt; d&#233;zippez son contenu dans le dossier de votre choix , par exemple : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;C:\Program Files\ViVeTool&lt;/code&gt;&lt;/li&gt;&lt;li&gt; ouvrez une fen&#234;tre de commande en mode administrateur : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Windows + S&lt;/code&gt; &gt; recherchez &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cmd&lt;/code&gt; &gt; clic sur &#034;Executer en tant qu'administrateur&#034;&lt;/li&gt;&lt;li&gt; lancez l'ex&#233;cutable &lt;strong&gt;ViVeTool.exe&lt;/strong&gt; en lui passant la commande de d&#233;sactivation de la fonctionnalit&#233; ayant le code &lt;strong&gt;47205210&lt;/strong&gt; :
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&#034;C:\Program Files\ViVeTool\ViVeTool.exe&#034; /disable /id:47205210&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Pour aller plus loin avec ViVe Tool :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un mode d'emploi (en fran&#231;ais) assez complet : &lt;a href=&#034;https://david-informaticien.com/blog/conseils-pratiques/3851-vivetool-guide-complet-pour-activer-les-fonctionnalites-cachees-de-windows-11&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://david-informaticien.com/blog/conseils-pratiques/3851-vivetool-guide-complet-pour-activer-les-fonctionnalites-cachees-de-windows-11&lt;/a&gt;&lt;/li&gt;&lt;li&gt; un site (en anglais) qui maintient &#224; jour une liste des ID des fonctionnalit&#233;s activables/d&#233;sactivables via &lt;strong&gt;ViVe Tool&lt;/strong&gt; : &lt;a href=&#034;https://pureinfotech.com/vivetool-codes-enable-features-windows-11/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://pureinfotech.com/vivetool-codes-enable-features-windows-11/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>One line pour mise &#224; jour Composer des sous-dossiers d'un r&#233;pertoire</title>
		<link>https://tech.gamuza.fr/One-line-pour-mise-a-jour-Composer-des-sous-dossiers-d-un-repertoire.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/One-line-pour-mise-a-jour-Composer-des-sous-dossiers-d-un-repertoire.html</guid>
		<dc:date>2024-08-25T12:10:11Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>&lt;p&gt;Script bash mono-ligne (&#034;one line&#034;) pour faire un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;composer install&lt;/code&gt; dans tous les sous-dossiers d'un r&#233;pertoire&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;strong&gt;M&#233;thode&lt;/strong&gt; : &#034;boucler&#034; dans la liste des sous-dossiers pour faire le &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;composer install&lt;/code&gt; dans chacun d'eux si il poss&#232;de un fichier &lt;strong&gt;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;composer.json&lt;/code&gt;&lt;/strong&gt;.&lt;br class='autobr' /&gt;
Afin de suivre le d&#233;roulement du processus on fait afficher chaque dossier mis &#224; jour.&lt;br class='autobr' /&gt;
Ce qui donne donc :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;for i in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ls ./&lt;/code&gt;;do if [ -e $i/composer.json ]; then echo &#034;&#034;; echo $i; cd $i; composer install; cd ../; fi; done&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Utiliser une sous-requ&#234;te MySQL pour compter le nombre de liaisons sur un &#233;l&#233;ment</title>
		<link>https://tech.gamuza.fr/Utiliser-une-sous-requete-MySQL-pour-compter-le-nombre-de-liaisons-sur-un.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Utiliser-une-sous-requete-MySQL-pour-compter-le-nombre-de-liaisons-sur-un.html</guid>
		<dc:date>2024-07-13T00:05:42Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>tutoriel</dc:subject>
		<dc:subject>MySQL</dc:subject>
		<dc:subject>COUNT</dc:subject>

		<description>&lt;p&gt;COUNT() qui permet de compter le nombre d'occurrences d'une valeur dans une table peut &#234;tre utilis&#233; en sous-requ&#234;te pour d&#233;nombrer, par exemple, le nombre de liaisons de l'&#233;l&#233;ment dans une autre table&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-formations-.html" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-tutoriel-+.html" rel="tag"&gt;tutoriel&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-mysql-+.html" rel="tag"&gt;MySQL&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-COUNT-+.html" rel="tag"&gt;COUNT&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Exemple en SPIP d'utilisation de &lt;strong&gt;COUNT()&lt;/strong&gt; en sous-requ&#234;te&lt;/h2&gt;
&lt;p&gt;La table &lt;strong&gt;spip_mots_liens&lt;/strong&gt; est utilis&#233;e pour stocker les liaisons des objets SPIP (articles, rubriques...) sur les mots cl&#233;s de la table &lt;strong&gt;spip_mots&lt;/strong&gt;.&lt;br class='autobr' /&gt;
On souhaite faire une liste des mots cl&#233;s du groupe 2 avec pour chacun le nombre de liaisons qu'il poss&#232;de :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;SELECT m.id_mot, m.titre, (SELECT COUNT(L.id_mot) FROM spip_mots_liens AS L WHERE L.id_mot = m.id_mot) AS nb FROM spip_mots AS m WHERE m.id_groupe=2 ORDER BY m.titre;&lt;/textarea&gt;
&lt;p&gt;on obtient un r&#233;sultat de la forme&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;| id_mot | titre | nb | | 122 | acceptability | 1 | |185 | adaptation | 1 | | 220 | agriculture | 1 |&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>One line pour conna&#238;tre la branche Git des repos dans les sous-dossiers d'un r&#233;pertoire</title>
		<link>https://tech.gamuza.fr/One-line-pour-connaitre-la-branche-Git-des-repos-dans-les-sous-dossiers-d-un.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/One-line-pour-connaitre-la-branche-Git-des-repos-dans-les-sous-dossiers-d-un.html</guid>
		<dc:date>2024-03-29T16:38:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>script sh</dc:subject>

		<description>&lt;p&gt;Script bash mono-ligne (&#034;one line&#034;) pour faire un &lt;i&gt;git branch -a&lt;/i&gt; et r&#233;cup&#233;rer uniquement la branche active dans tous les sous-dossiers d'un r&#233;pertoire&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-script-sh-+.html" rel="tag"&gt;script sh&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;on boucle dans les sous-dossiers d'un r&#233;pertoire et on joue un &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;git branch -a&lt;/code&gt; : la branche active est pr&#233;fix&#233;e par une &lt;strong&gt;*&lt;/strong&gt; ce qui permet de n'afficher qu'elle via un &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;|grep ...&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Ce qui donne donc :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;for i in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ls ./&lt;/code&gt;;do echo &#034;&#034;; echo $i; cd $i; git branch -a |grep '*'; cd ../; done&lt;/textarea&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Utiliser PHP_codeSniffer : les bases</title>
		<link>https://tech.gamuza.fr/Utiliser-PHP_codeSniffer-les-bases.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Utiliser-PHP_codeSniffer-les-bases.html</guid>
		<dc:date>2024-03-01T11:52:45Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>
&lt;p&gt;Usage : quelques exemples de commandes Tester un fichier php seul : phpcs dossier/fichier_truc.php &lt;br class='autobr' /&gt;
Tester un dossier complet : par ex &#224; la racine d'un r&#233;pertoire de plugin (/ !\ attention ! lancer phpcs sur un gros dossier avec beaucoup de fichiers (php / css / js) sans faire de restrictions via la configuration peut entra&#238;ner une GROSSE charge pour votre processeur !) phpcs dossier/ devrait retourner tout un tas d'erreurs &#224; corriger, pour &#224; peu pr&#232;s tous les types de fichiers (js, css, (&#8230;)&lt;/p&gt;


-
&lt;a href="https://tech.gamuza.fr/-formations-.html" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Usage : quelques exemples de commandes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Tester un fichier php seul :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs dossier/fichier_truc.php&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Tester un dossier complet : par ex &#224; la racine d'un r&#233;pertoire de plugin&lt;/strong&gt;&lt;br class='autobr' /&gt;
(/ !\ attention ! lancer phpcs sur un gros dossier avec beaucoup de fichiers (php / css / js) sans faire de restrictions via la configuration peut entra&#238;ner une GROSSE charge pour votre processeur !)&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs dossier/&lt;/textarea&gt;
&lt;p&gt;devrait retourner tout un tas d'erreurs &#224; corriger, pour &#224; peu pr&#232;s tous les types de fichiers (js, css, php)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Restreindre la port&#233;e du scan aux fichiers PHP, exclure des dossiers :&lt;/strong&gt;&lt;br class='autobr' /&gt;
En ajoutant le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;phpcs.xml&lt;/code&gt; &#224; la racine du r&#233;pertoire avec le contenu propos&#233; dans momh.fr, on doit restreindre la d&#233;tection des erreurs aux fichiers .html et .php&lt;br class='autobr' /&gt;
Le contenu du fichier :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='12' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;?xml version=&#034;1.0&#034;?&gt; &lt;ruleset&gt; &lt;file&gt;./&lt;/file&gt; &lt;exclude-pattern&gt;**/*.js&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;**/*.css&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;**/*.scss&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;node_modules/*&lt;/exclude-pattern&gt; &lt;exclude-pattern&gt;vendor/*&lt;/exclude-pattern&gt; &lt;arg name=&#034;colors&#034;/&gt; &lt;rule ref=&#034;SPIP41&#034;/&gt; &lt;/ruleset&gt;&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Tester uniquement avec les coding-standard de SPIP :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --standard=SPIP41 dossier/fichier_truc.php&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Ne pas afficher les warnings (uniquement les erreurs) :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs -n dossier/fichier_truc.php&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Colorer la sortie :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --colors dossier/fichier_truc.php&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Compl&#233;ments de configuration : l'option &#8212;config-set&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Utilisation de l'option &lt;strong&gt;&#8212;config-set&lt;/strong&gt; :&lt;/strong&gt;&lt;br class='autobr' /&gt;
par exemple si vous n'utilisez phpcs/phpcbf que pour les standards SPIP, pour &#233;viter d'ajouter l'option &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;--standard=SPIP41&lt;/code&gt; &#224; chaque appel de la commande, vous pouvez passer ce param&#232;tre en option par d&#233;faut avec :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --config-set default_standard SPIP41&lt;/textarea&gt;
&lt;p&gt;NB : cela donne une configuration &#233;crite dans le fichier &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;...Composer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf&lt;/code&gt; qu'il est possible de bricoler directement aussi&lt;br class='autobr' /&gt;
La syntaxe de cette option est de la forme :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --config-set cl&#233; valeur&lt;/textarea&gt;
&lt;p&gt;par ex pour avoir la coloration par d&#233;faut&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --config-set colors 1&lt;/textarea&gt;
&lt;p&gt;La documentation pour les configurations possibles avec l'option &#8212;config-set : &lt;br class='autobr' /&gt;
&lt;a href=&#034;https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/squizlabs/PHP_CodeSniffer/wiki/Configuration-Options&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Exemple de fichier de configuration CodeSniffer.conf pour colorer syst&#233;matiquement, utiliser les standards SPIP41 et ignorer les warnings :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='11' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;?php $phpCodeSnifferConfig = array ( 'installed_paths' =&gt; 'C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/phpcompatibility/php-compatibility,C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/spip/coding-standards/src', 'default_standard' =&gt; 'SPIP41', 'colors' =&gt; 1, 'show_warnings' =&gt; 0, ); ?&gt;&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;Sp&#233;cifique installation sous Windows :&lt;/h2&gt;
&lt;p&gt;Adaptations du post de &lt;a href=&#034;https://momh.fr/installer-globalement-php_codesniffer&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://momh.fr/installer-globalement-php_codesniffer&lt;/a&gt;&lt;br class='autobr' /&gt;
On suppose :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; l'utilisateur connect&#233; &#224; la session Windows est &lt;strong&gt;VOTRE_USER&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Composer&lt;/strong&gt; install&#233; sur la machine&lt;/li&gt;&lt;li&gt; on utilise &lt;strong&gt;Gitbash&lt;/strong&gt; comme interpr&#233;teur de commandes (cf &lt;a href=&#034;https://contrib.spip.net/SPIP-Cli#Specificites-d-installation-sous-Windows&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://contrib.spip.net/SPIP-Cli#Specificites-d-installation-sous-Windows&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;1/ Installation globale :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;composer global --dev require squizlabs/php_codesniffer composer global --dev require spip/coding-standards&lt;/textarea&gt; &lt;p&gt;Tester que c'est OK :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --help phpcbf --help&lt;/textarea&gt;
&lt;p&gt;doivent retourner le Help avec toutes les options de la commande&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2/ D&#233;clarer le r&#233;pertoire des standards SPIP &#224; PHP_CodeSniffer :&lt;/strong&gt;&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='4' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs --config-set installed_paths C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/phpcompatibility/php-compatibility,C:/Users/VOTRE_USER/AppData/Roaming/Composer/vendor/spip/coding-standards/src&lt;/textarea&gt;
&lt;p&gt;cette commande devrait retourner :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;Using config file: C:\Users\VOTRE_USER\AppData\Roaming\Composer\vendor\squizlabs\php_codesniffer\CodeSniffer.conf&lt;/textarea&gt;
&lt;p&gt;Pour tester que la config est OK la commande :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;phpcs -i&lt;/textarea&gt;
&lt;p&gt;devrait retourner quelque chose comme :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;The installed coding standards are MySource, PEAR, PSR1, PSR2, PSR12, Squiz, Zend, PHPCompatibility, SCS1, SPIP40 and SPIP41&lt;/textarea&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;f&#233;rences :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; pour l'installation le billet du blog momh.fr : &lt;a href=&#034;https://momh.fr/installer-globalement-php_codesniffer&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://momh.fr/installer-globalement-php_codesniffer&lt;/a&gt;&lt;/li&gt;&lt;li&gt; le Github de PHP_codeSniffer : &lt;a href=&#034;https://github.com/squizlabs/PHP_CodeSniffer&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/squizlabs/PHP_CodeSniffer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Utiliser la commande &#034;gpg&#034; dans des scripts</title>
		<link>https://tech.gamuza.fr/Utiliser-la-commande-gpg-dans-des-scripts.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Utiliser-la-commande-gpg-dans-des-scripts.html</guid>
		<dc:date>2023-06-30T19:29:37Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>&lt;p&gt;&#034;gpg&#034; est la commande utilis&#233;e pour le chiffrage de fichiers avec GnuPG : quelques syntaxes de base pour utilisation dans des scripts bash d'automatisation de t&#226;ches&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;&lt;strong&gt;NB :&lt;/strong&gt; ici (dans le cadre d'automatisation avec des scripts bash) on envisage uniquement une utilisation de GnuPG avec &lt;strong&gt;chiffrement sym&#233;trique&lt;/strong&gt; = avec une phrase de passe et non pas le syst&#232;me &#034;classique&#034; cl&#233; priv&#233;e/publique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Chiffrer un fichier avec un mot de passe :&lt;/h2&gt;
&lt;p&gt;Chiffrer &lt;strong&gt;le_fichier.txt&lt;/strong&gt; en &lt;strong&gt;le_fichier.txt.gpg&lt;/strong&gt; avec le mot de passe &lt;strong&gt;MonSuperPass_123&lt;/strong&gt; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;gpg -c --yes --batch --passphrase=MonSuperPass+123 le_fichier.txt&lt;/textarea&gt;
&lt;p&gt;&lt;strong&gt;Explication des options :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;c&lt;/strong&gt; : chiffrement sym&#233;trique (= utilisation d'une passe-phrase)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;batch&lt;/strong&gt; : mode non interactif (= ne rien demander : cf option &#034;yes&#034;)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;yes&lt;/strong&gt; : r&#233;pondre &#034;oui&#034; aux &#233;ventuelles questions&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;chiffrer un fichier avec son mot de passe :&lt;/h2&gt;
&lt;p&gt;D&#233;chiffrer &lt;strong&gt;le_fichier.txt.gpg&lt;/strong&gt; avec le mot de passe &lt;strong&gt;MonSuperPass_123&lt;/strong&gt; :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;gpg --batch --passphrase=MonSuperPass+123 le_fichier.txt.gpg&lt;/textarea&gt;
&lt;p&gt;cette commande va cr&#233;&#233; le fichier &lt;strong&gt;le_fichier.txt&lt;/strong&gt;&lt;br class='autobr' /&gt;
&lt;a id=&#034;oneline&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;One line pour d&#233;chiffrer puis re-chiffrer un ensemble de fichiers :&lt;/h2&gt;
&lt;p&gt;On veut am&#233;liorer la s&#233;curit&#233; d'un ensemble de fichiers pr&#233;c&#233;demment chiffr&#233;s avec le mot de passe &lt;strong&gt;le_passe&lt;/strong&gt; en les re-chiffrant avec le mot de passe &lt;strong&gt;MonSuperPass_123&lt;/strong&gt;&lt;br class='manualbr' /&gt;(ces fichiers sont tous situ&#233;s dans le r&#233;pertoire o&#249; est lanc&#233; la commande)&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='7' class='spip_cadre spip_cadre_block' dir='ltr'&gt;for i in &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ls *.gpg&lt;/code&gt;;do echo $i;tmp=&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;echo $i | sed 's/.gpg/ /g'&lt;/code&gt;;gpg --batch --passphrase=le_passe $i &amp;&amp; gpg -c --yes --batch --passphrase=MonSuperPass_123 $tmp &amp;&amp; rm $tmp; done&lt;/textarea&gt;&lt;hr&gt;&lt;h2 class=&#034;spip&#034;&gt;R&#233;f&#233;rences :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Man page de la commande &lt;strong&gt;gpg&lt;/strong&gt; : &lt;a href=&#034;https://man.docs.euro-linux.com/EL%207/man-pages-fr/gpg.1.fr.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://man.docs.euro-linux.com/EL%207/man-pages-fr/gpg.1.fr.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Le manuel officiel de GnuPG : &lt;a href=&#034;https://www.gnupg.org/gph/fr/manual.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.gnupg.org/gph/fr/manual.html&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>One line pour mise &#224; jour Git des sous-dossiers d'un r&#233;pertoire</title>
		<link>https://tech.gamuza.fr/One-line-pour-mise-a-jour-Git-des-sous-dossiers-d-un-repertoire.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/One-line-pour-mise-a-jour-Git-des-sous-dossiers-d-un-repertoire.html</guid>
		<dc:date>2023-05-18T14:08:15Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>&lt;p&gt;Script bash mono-ligne (&#034;one line&#034;) pour faire un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;git pull&lt;/code&gt; dans tous les sous-dossiers d'un r&#233;pertoire&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-scripts-et-commandes-sh-.html" rel="directory"&gt;Scripts sh&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Si ce n'est qu'il faut &#034;boucler&#034; dans la liste des sous-dossiers pour faire le &lt;code class='bash spip_code spip_code_inline' dir='ltr'&gt;git pull&lt;/code&gt; dans chacun d'eux, la complication suppl&#233;mentaire est de v&#233;rifier qu'ils sont bien des dossiers &#034;Git&#034; (c'est &#224; dire qu'ils ont eux-m&#234;me un sous-dossier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.git&lt;/code&gt;).&lt;br class='autobr' /&gt;
Afin de suivre le d&#233;roulement du processus on fait afficher chaque dossier mis &#224; jour.&lt;br class='autobr' /&gt;
Ce qui donne donc :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre data-language=&#034;bash&#034; class='spip_code spip_code_block language-bash' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for i in `ls ./`;do if [ -d $i/.git ]; then echo &#034;&#034;; echo $i; cd $i; git pull; cd ../; fi; done &lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Windows 11 : restaurer les menus contextuels &#034;directs&#034;</title>
		<link>https://tech.gamuza.fr/Windows-11-restaurer-les-menus-contextuels-directs.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Windows-11-restaurer-les-menus-contextuels-directs.html</guid>
		<dc:date>2023-02-17T18:11:40Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>


		<dc:subject>tutoriel</dc:subject>
		<dc:subject>Windows</dc:subject>
		<dc:subject>Window 11</dc:subject>
		<dc:subject>Regedit.exe</dc:subject>
		<dc:subject>registre</dc:subject>

		<description>&lt;p&gt;&lt;strong&gt;Tutoriel :&lt;/strong&gt; comment supprimer le menu contextuel en &#034;2 temps&#034; de Windows 11 et revenir &#224; un clic droit avec toutes les options.&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-bricolages-Windows-.html" rel="directory"&gt;Windows&lt;/a&gt;

/ 
&lt;a href="https://tech.gamuza.fr/+-tutoriel-+.html" rel="tag"&gt;tutoriel&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-windows-+.html" rel="tag"&gt;Windows&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-Window-11-+.html" rel="tag"&gt;Window 11&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-Regedit-exe-+.html" rel="tag"&gt;Regedit.exe&lt;/a&gt;, 
&lt;a href="https://tech.gamuza.fr/+-registre-+.html" rel="tag"&gt;registre&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Contexte :&lt;/h2&gt;
&lt;p&gt;Comme &#224; chaque nouvelle version de Windows, Microsoft a d&#233;cid&#233; (une fois de plus...) avec &lt;strong&gt;Windows 11&lt;/strong&gt; que les utilisateurs sont des d&#233;c&#233;r&#233;br&#233;s auxquels il faut &#233;viter toute possibilit&#233; d'utiliser intelligemment leur ordinateur. &lt;br class='autobr' /&gt;
Pour cela les concepteurs de cette version 11 ont choisit que dans l'explorateur de fichier (outil ultra-central pour les utilisateurs un peu efficaces), le &lt;strong&gt;menu contextuel&lt;/strong&gt; qui s'ouvre au clic droit se pr&#233;sente en version minimaliste (en gros toutes les fonctions qui sont en g&#233;n&#233;ral inutiles car assur&#233;e par les raccourcis claviers &#034;de base&#034; : &#034;ouvrir&#034;, &#034;propri&#233;t&#233;s&#034; + des ic&#244;nes pour &#034;copier&#034;, &#034;coller&#034;...). Pour avoir acc&#232;s &#224; l'ensemble des choix il faut cliquer sur le dernier item &#034;Afficher plus d'options&#034; (ou passer le raccourci clavier Maj + F10).&lt;/p&gt;
&lt;p&gt;Le but de ce tuto est donc de se d&#233;barrasser de cette infantilisation forc&#233;e pour redonner de l'efficaciit&#233; &#224; votre OS...&lt;br class='autobr' /&gt;
Plusieurs m&#233;thodes sont possibles pour cette modification mais elle aboutissent toutes au m&#234;me r&#233;sultat : ajouter une cl&#233; de registre (vide) :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&lt;/textarea&gt;
&lt;p&gt;Nous en verrons 2 ici.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;M&#233;thode 1 : utiliser l'interface graphique de Regedit&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; ouvrez une invite de commande avec le raccourci clavier &lt;strong&gt;Windows + R&lt;/strong&gt; puis appelez l'utilitaire d'&#233;dition du registre en saisissant &#034;regedit&#034; dans le champ &#034;Ouvrir&#034; propos&#233;.&lt;/li&gt;&lt;li&gt; dans l'&#233;diteur du registre ouvrez la &#034;ruche&#034; &lt;strong&gt;HKEY_CURRENT_USER&lt;/strong&gt; puis parcourez l'arborescence des cl&#233;s &lt;strong&gt;Software&lt;/strong&gt; &gt; &lt;strong&gt;Classes&lt;/strong&gt; &gt; &lt;strong&gt;CLSID&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; cr&#233;ez une nouvelle cl&#233; avec clic droit sur &lt;strong&gt;CLSID&lt;/strong&gt; que vous nommez &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}&lt;/code&gt;&lt;/li&gt;&lt;li&gt; validez la avec &#034;Entr&#233;e&#034; et cr&#233;ez dedans une nouvelle cl&#233; nomm&#233;e &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;InprocServer32&lt;/code&gt;&lt;/li&gt;&lt;li&gt; validez avec &#034;Entr&#233;e&#034; : vous devriez avoir une valeur par d&#233;faut vide dedans :
&lt;div class='spip_document_267 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;77&#034; data-legende-lenx=&#034;xx&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://tech.gamuza.fr/IMG/jpg/registre_menu_contextuel_windows-11.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://tech.gamuza.fr/local/cache-vignettes/L500xH120/registre_menu_contextuel_windows-11-0b349.jpg?1768434869' width='500' height='120' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre crayon document-titre-267 '&gt;&lt;strong&gt;Registre Windows 11 avec la cl&#233; de modification des menus contextuels cr&#233;&#233;e
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;/li&gt;&lt;li&gt; red&#233;marrez Windows : en principe le menu contextuel doit maintenant vous donner directement acc&#232;s &#224; la totalit&#233; des items !&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;M&#233;thode 2 : utiliser une commande de modification du registre&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; plus rapide mais pour le m&#234;me r&#233;sultat, vous pouvez faire la cr&#233;ation de la cl&#233; de registre et de sa sous-cl&#233; en une commande.&lt;/li&gt;&lt;li&gt; ouvrez une fen&#234;tre de commande en mode administrateur avec le raccourci clavier &lt;strong&gt;Windows + S&lt;/strong&gt; puis &lt;strong&gt;cmd&lt;/strong&gt; dans la zone de recherche et enfin &lt;strong&gt;&#034;Executer en tant qu'administrateur&#034;&lt;/strong&gt;.&lt;/li&gt;&lt;li&gt; dans cette fen&#234;tre ex&#233;cutez (apr&#232;s un habile copier/coller) la commande suivante : &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;reg.exe add &#034;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&#034; /f /ve&lt;/textarea&gt;&lt;/li&gt;&lt;li&gt; vous devriez obtenir le retour &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;L'op&#233;ration a r&#233;ussi.&lt;/code&gt;&lt;/li&gt;&lt;li&gt; red&#233;marrez la machine&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Tests de nom de classe CSS</title>
		<link>https://tech.gamuza.fr/Tests-de-nom-de-classe-CSS.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/Tests-de-nom-de-classe-CSS.html</guid>
		<dc:date>2022-12-14T19:01:39Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>
&lt;p&gt;Code : .test\.123 color : red ; &lt;br class='autobr' /&gt; .test#123 color : blue ; &lt;br class='autobr' /&gt; .test\@123 color : green ; &lt;br class='autobr' /&gt; .test\ test.123 test#123 test@123 test test123 test 123 _test123 -test123 123test &lt;br class='autobr' /&gt;
R&#233;sultat : .test\.123 color : red ;
&lt;br class='autobr' /&gt; .test\#123 color : blue ;
&lt;br class='autobr' /&gt; .test\@123 color : green ;
&lt;br class='autobr' /&gt; .test\ test.123 test#123 test@123 test test123 test 123 _test123 -test123 123test&lt;/p&gt;


-
&lt;a href="https://tech.gamuza.fr/-formations-.html" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Code :&lt;/h2&gt;&lt;cadre class=&#034;HTML&#034;&gt;
&lt;div class=&#034;test.123&#034;&gt;test.123&lt;/div&gt;
&lt;div class=&#034;test#123&#034;&gt;test#123&lt;/div&gt;
&lt;div class=&#034;test@123&#034;&gt;test@123&lt;/div&gt;
&lt;div class=&#034;test&lt;123&#034;&gt;test&lt;123&lt;/div&gt;
&lt;div class=&#034;test--123&#034;&gt;test&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;123&lt;/div&gt; &lt;div class=&#034;test~123&#034;&gt;test~123&lt;/div&gt; &lt;div class=&#034;_test123&#034;&gt;_test123&lt;/div&gt; &lt;div class=&#034;-test123&#034;&gt;-test123&lt;/div&gt; &lt;div class=&#034;123test &#034;&gt;123test &lt;/div&gt; &lt;/cadre&gt; {{{R&#233;sultat:}}} &lt;html&gt;&lt;style type=&#034;text/css&#034;&gt; .test\.123 { color: red; } .test\#123 { color: blue; } .test\@123 { color: green; } .test\&lt;123 { color: brown; } .test123 { color: purple; } .test\~123 { color: tomato; } ._test123 { color: violet; } .-test123 { color: yellow; } .\31 23test { color: orange; } &lt;/style&gt; &lt;div class=&#034;test.123&#034;&gt;test.123&lt;/div&gt; &lt;div class=&#034;test#123&#034;&gt;test#123&lt;/div&gt; &lt;div class=&#034;test@123&#034;&gt;test@123&lt;/div&gt; &lt;div class=&#034;test&lt;123&#034;&gt;test&lt;123&lt;/div&gt; &lt;div class=&#034;test&lt;/code&gt;123&#034;&gt;test`123&lt;/div&gt;
&lt;div class=&#034;test~123&#034;&gt;test 123&lt;/div&gt;
&lt;div class=&#034;_test123&#034;&gt;_test123&lt;/div&gt;
&lt;div class=&#034;-test123&#034;&gt;-test123&lt;/div&gt;
&lt;div class=&#034;123test &#034;&gt;123test &lt;/div&gt;
&lt;/html&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>ZZZ : URL canonique</title>
		<link>https://tech.gamuza.fr/ZZZ-URL-canonique.html</link>
		<guid isPermaLink="true">https://tech.gamuza.fr/ZZZ-URL-canonique.html</guid>
		<dc:date>2022-11-30T10:40:27Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>clem</dc:creator>



		<description>&lt;p&gt;Cet article est une copie de sauvegarde de l'article original de Fil sur le d&#233;sormais disparu : &lt;a href=&#034;http://zzz.rezo.net/URL-canonique.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://zzz.rezo.net/URL-canonique.html&lt;/a&gt;&lt;/p&gt;

-
&lt;a href="https://tech.gamuza.fr/-formations-.html" rel="directory"&gt;D&#233;veloppement web&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p&gt;Je demandais hier sur &lt;strong&gt;#spip&lt;/strong&gt; si quelqu'un connaissait un standard pour signaler l'URL canonique d'une page Web. S'koi ? Si on est en train de lire une page sur un site, on peut l'avoir abord&#233;e par plusieurs adresses :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='5' class='spip_cadre spip_cadre_block' dir='ltr'&gt;-&#160;http://monsite.tld/article12 -&#160;http://monsite.tld/Mon-titre-d-article -&#160;http://www.monsite.tld/article12.html?couleur=bleu -&#160;http://www.monsite.tld/article12.html?post=1 -&#160;http://www.monsite.tld/article12.html?PHPSESSID=a2c5fe78&lt;/textarea&gt;
&lt;p&gt;Tout &#231;a, ce sont des URLs valables, qui affichent bien le m&#234;me article. Mais si je veux mettre des gens (ou des robots) d'accord sur ce qu'est la &#171; vraie &#187; adresse de cet article, il faut que je l'annonce, d'une mani&#232;re ou d'une autre.&lt;/p&gt;
&lt;p&gt;Cette probl&#233;matique concerne au premier chef les moteurs de recherche et d'indexation (mais pas seulement). Or il se trouve que pas plus tard que la semaine derni&#232;re les trois poids lourds Google, Yahoo et Live (Microsoft) annon&#231;aient que leurs algorithmes allaient accepter qu'on leur parle de l'URL canonique d'une page.&lt;/p&gt;
&lt;p&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;a href=&#034;https://developers.google.com/search/blog/2009/02/specify-your-canonical&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://developers.google.com/search/blog/2009/02/specify-your-canonical&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;a href=&#034;https://moz.com/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://moz.com/blog/canonical-url-tag-the-most-important-advancement-in-seo-practices-since-sitemaps&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C'est bien fait, et c'est simple &#224; mettre en &#339;uvre. En gros, pour toute page HTML qui peut avoir plusieurs adresses, on va indiquer laquelle est la principale, en ins&#233;rant dans son &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;&lt;head&gt;...&lt;/head&gt;&lt;/code&gt; une balise :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='3' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;link rel=&#034;canonical&#034; href=&#034;http://www.monsite.tld/URL-canonique&#034; /&gt;&lt;/textarea&gt;
&lt;p&gt;Les algorithmes qui le souhaitent sauront donc que la page &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.monsite.tld/article12&lt;/code&gt; qui mentionne ce lien doit en fait &#234;tre consid&#233;r&#233;e comme &#233;tant &#224; l'adresse canonique &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.monsite.tld/URL-canonique&lt;/code&gt;. Et feront leurs calculs (PageRank...) et affichages (r&#233;sultats de recherche...) en tenant compte de cette information.&lt;br class='autobr' /&gt;
* * *&lt;/p&gt;
&lt;p&gt;Autre exemple d'usage (qui &#233;tait celui qui avait suscit&#233; ma question) : lorsqu'on veut participer aux sites de partage de bookmarks type delicious.com, il importe que les diff&#233;rents partageurs se mettent d'accord sur une adresse unique, de mani&#232;re &#224; pouvoir discuter de la m&#234;me chose, m&#234;me s'ils l'ont vue dans un contexte diff&#233;rent. Le plugin SPIP Social Tags en tient compte.&lt;/p&gt;
&lt;p&gt;Dans le squelette SPIP article.html, il suffit d'indiquer dans la partie &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;&lt;head&gt;..&lt;/head&gt;&lt;/code&gt; le code suivant [1] :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;&lt;link rel=&#034;canonical&#034; href=&#034;[(#URL_ARTICLE|url_absolue)]&#034; /&gt;&lt;/textarea&gt;
&lt;p&gt;Pour que Google consid&#232;re qu'un (vieux) lien vers &lt;a href=&#034;http://monsite.tld/a1.html&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;http://monsite.tld/a1.html&lt;/a&gt;&lt;/code&gt; pointe en fait vers &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.monsite.tld/Titre-article&lt;/code&gt; (URL canonique de l'article si on a activ&#233; les URLs &#171; propres &#187;). Ou que SocialTags indique le nouvel URL dans delicious quand on clique sur l'icone, m&#234;me si le navigateur indique &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.monsite.tld/Titre-article?PHPSESSID=12345&lt;/code&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div &lt;div class='rss_ps'&gt;&lt;h2 class=&#034;spip&#034;&gt;URL canonique et permalien&lt;/h2&gt;
&lt;p&gt;C'est bien gentil ces URLs canoniques, mais quelle est la diff&#233;rence avec le permalien ?&lt;/p&gt;
&lt;p&gt;L'id&#233;e du &#171; permalien &#187; d'un article, c'est d'avoir un lien qui r&#233;f&#233;rencera toujours cet article ; ainsi, sur un blog, on veut que les gens qui r&#233;f&#233;rencent un article ne fassent pas un lien vers la page d'accueil &#8212; alors que celle-ci va tourner au fur et &#224; mesure de l'ajout de nouveaux articles &#8212; mais plut&#244;t un lien vers une page pr&#233;cise qui affichera toujours l'article dans deux semaines, quand il ne sera plus sur la page d'accueil.&lt;/p&gt;
&lt;p&gt;Bien s&#251;r le permalien pointera en g&#233;n&#233;ral vers l'URL canonique de l'article, ce qui fait qu'en pratique, ces deux propri&#233;t&#233;s ont la m&#234;me valeur.&lt;/p&gt;
&lt;p&gt;Cependant, les deux notions ne sont pas identiques. On peut imaginer qu'un permalien nous redirige vers l'URL canonique, laquelle peut changer au cours du temps. Par exemple, lorsque SPIP sera rachet&#233; par la Mozilla Corp., l'URL canonique de l'article de l'article &#171; Est-ce que je peux... &#187;, qui est actuellement &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.spip.net/fr_article1475.html&lt;/code&gt;, deviendra (sur ordre du d&#233;partement marketing) &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;https://spip.mozcorp.world/Est-ce-que-je-peux.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;L'URL canonique de cet article aura donc chang&#233;. Mais &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;http://www.spip.net/fr_article1475.html&lt;/code&gt; est et restera un permalien : il affichera toujours le bon article (soit directement, soit en renvoyant le lecteur vers le site mozcorp.world).&lt;/p&gt;
&lt;p&gt;Autrement dit :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; un permalien (il peut y en avoir plusieurs pour un m&#234;me article) est un lien qui pointe toujours vers cet article (cette &#171; ressource &#187;, en jargon webique). On le code sous la forme &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;&lt;a rel=&#034;bookmark&#034; href=&#034;...&#034;&gt;&lt;/code&gt;. Tant qu'il permet de retrouver la ressource, f&#251;t-ce &#224; travers des modifications de formatage des URLs, des redirections et des changements de noms de domaine, c'est un permalien.&lt;/li&gt;&lt;li&gt; l'URL canonique d'une ressource quant &#224; elle est unique (mais pas forc&#233;ment permanente) : elle signale l'adresse &#171; standard &#187; o&#249; il faut aller chercher cette page, m&#234;me si on l'a trouv&#233;e ailleurs. On la r&#233;f&#233;rence &#224; l'int&#233;rieur de l'ent&#234;te de la page sous la forme &lt;code class='html spip_code spip_code_inline' dir='ltr'&gt;&lt;link rel=&#034;canonical&#034; href=&#034;...&#034; /&gt;&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
