<?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>Guillaume Orsal</title>
	<link>https://www.orsal.fr/</link>
	<description>Ing&#233;nieur informatique, d&#233;veloppeur Web Freelance, cr&#233;ation site Internet, conseil en r&#233;f&#233;rencement, expert Laravel, SEO, Intelligence Artificielle</description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.orsal.fr/spip.php?page=backend" rel="self" type="application/rss+xml" />




<item xml:lang="fr">
		<title>R&#233;g&#233;n&#233;rer les permaliens WordPress apr&#232;s une mise &#224; jour</title>
		<link>https://www.orsal.fr/Regenerer-les-permaliens-WordPress</link>
		<guid isPermaLink="true">https://www.orsal.fr/Regenerer-les-permaliens-WordPress</guid>
		<dc:date>2026-01-11T15:29:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Apr&#232;s une mise &#224; jour ou un d&#233;ploiement WordPress, il peut arriver que les permaliens cessent de fonctionner. Une simple commande en ligne de commande permet de corriger le probl&#232;me sans acc&#233;der au back-office.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Developpement-Web" rel="directory"&gt;D&#233;veloppement Web&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton75-00d22.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff75-db3ba.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton75-00d22.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Apr&#232;s une mise &#224; jour ou un d&#233;ploiement WordPress, il peut arriver que les permaliens cessent de fonctionner. Une simple commande en ligne de commande permet de corriger le probl&#232;me sans acc&#233;der au back-office.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Quand WordPress est mis &#224; jour, certains sites se retrouvent avec des erreurs 404 ou des messages du type :
&lt;strong&gt;Not Found &#8211; no results were found for the requested archive&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Dans la majorit&#233; des cas, rien n'a disparu. C'est simplement le syst&#232;me des permaliens qui ne correspond plus &#224; la configuration effective du serveur.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Pourquoi les permaliens doivent &#234;tre r&#233;g&#233;n&#233;r&#233;s ?&lt;/h2&gt;
&lt;p&gt;WordPress conserve sa structure d'URL dans sa base et part du principe que l'environnement ne change pas. Or il suffit d'un d&#233;placement de dossier, d'une migration, d'un changement subtil sur Apache, pour que le syst&#232;me perde ses rep&#232;res. Quand cela arrive, les requ&#234;tes ne sont plus r&#233;&#233;crites correctement, ce qui se traduit par des pages introuvables alors que le contenu est bien l&#224;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Solution sans interface : une commande shell&lt;/h2&gt;
&lt;p&gt;Quand on a acc&#232;s &#224; l'administration WordPress, le passage par R&#233;glages &gt; Permaliens suffit &#8212; mais si l'on travaille en SSH ou en d&#233;ploiement automatis&#233;, une commande r&#233;sout le probl&#232;me plus proprement :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; &lt;br /&gt; cd /chemin/vers/mon/site/wordpress \&lt;br /&gt; &amp;&amp; php -r &quot;define('WP_USE_THEMES', false); require('./wp-load.php'); flush_rewrite_rules();&quot; \&lt;br /&gt; &amp;&amp; echo &quot;Permaliens r&#233;g&#233;n&#233;r&#233;s avec succ&#232;s&quot; &lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Elle charge WordPress, force la r&#233;g&#233;n&#233;ration de la structure d'URL et s'arr&#234;te l&#224;, sans n&#233;cessiter d'acc&#232;s au back-office.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Quand l'utiliser ?&lt;/h2&gt;
&lt;p&gt;Ce petit flush devient utile apr&#232;s un changement de domaine, une mise &#224; jour majeure, l'ajout ou la suppression d'un plugin qui modifie les URLs, ou tout simplement apr&#232;s un d&#233;ploiement CI/CD qui recopie le site sur un serveur neuf.&lt;/p&gt; &lt;p&gt;Si l'erreur se reproduit, il est possible de l'int&#233;grer dans un script de maintenance ou un hook post-d&#233;ploiement.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Bonnes pratiques et limites&lt;/h2&gt;
&lt;p&gt;La commande est efficace, mais ce n'est pas un bouton magique &#224; actionner en continu. R&#233;g&#233;n&#233;rer les permaliens demande &#224; WordPress de reconstruire sa m&#233;canique interne. Cela reste une op&#233;ration raisonnablement lourde en fonction du nombre de contenu sur le site.&lt;/p&gt; &lt;p&gt;Si apr&#232;s ex&#233;cution les erreurs persistent, le probl&#232;me est probablement ailleurs : mod_rewrite peut &#234;tre d&#233;sactiv&#233;, le .htaccess mal plac&#233;, ou le virtual host trop restrictif. Une v&#233;rification rapide de ces points r&#233;sout la plupart des cas t&#234;tus.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;En r&#233;sum&#233;, forcer WordPress &#224; reconstruire ses permaliens r&#232;gle en quelques secondes un probl&#232;me qui peut faire perdre des heures si l'on cherche trop loin. C'est une astuce simple, propre, et id&#233;ale quand l'acc&#232;s au tableau de bord n'est pas pratique ou quand on automatise ses d&#233;ploiements.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>llms.txt : un standard de documentation pour l'usage des contenus par les mod&#232;les d'IA</title>
		<link>https://www.orsal.fr/llms-txt-un-standard-de</link>
		<guid isPermaLink="true">https://www.orsal.fr/llms-txt-un-standard-de</guid>
		<dc:date>2025-12-30T14:03:07Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Faut-il mettre en place un fichier llms.txt sur son site ? &#192; quoi sert-il vraiment, et est-ce que les IA le respectent ? Tour d'horizon concret de ce standard &#233;mergent, entre bonnes pratiques, limites r&#233;elles et usages possibles.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Referencement-SEO-GEO" rel="directory"&gt;R&#233;f&#233;rencement SEO/GEO&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton71-fcc41.png' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff71-83c70.png'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton71-fcc41.png'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;llms.txt est un standard &#233;mergent qui permet d'indiquer aux mod&#232;les d'IA comment les contenus d'un site web peuvent &#234;tre utilis&#233;s. Cette page d&#233;taille le r&#244;le du fichier llms.txt, son fonctionnement, ses principaux cas d'usage, ainsi que ses implications pour l'IA g&#233;n&#233;rative, le droit d'auteur et la notion de consentement des donn&#233;es.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Faut-il mettre en place un fichier &lt;strong&gt;llms.txt&lt;/strong&gt; sur son site ? &#192; quoi sert-il vraiment, et est-ce que les IA le respectent ? Tour d'horizon concret de ce standard &#233;mergent, entre bonnes pratiques, limites r&#233;elles et usages possibles.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; TL ;DR &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt; est un &lt;strong&gt;fichier texte&lt;/strong&gt; plac&#233; &#224; la racine d'un site web (&lt;strong&gt;/llms.txt&lt;/strong&gt;) permettant de documenter, de fa&#231;on d&#233;clarative, les conditions d'utilisation de ses contenus par des &lt;strong&gt;mod&#232;les d'IA&lt;/strong&gt; (LLMs). Ce standard &#233;mergent vise &#224; am&#233;liorer la transparence entre cr&#233;ateurs de contenu et d&#233;veloppeurs d'IA, &lt;strong&gt;sans m&#233;canisme technique contraignant&lt;/strong&gt;. Il permet notamment d'autoriser l'entra&#238;nement des mod&#232;les tout en en fixant les limites (usage commercial, attribution, donn&#233;es sensibles). Il s'inscrit dans la continuit&#233; des standards du web ouvert comme &lt;strong&gt;robots.txt&lt;/strong&gt; ou &lt;a href='https://www.orsal.fr/Humans-txt-creer-un-fichier-de' class='spip_in'&gt;Humans.txt&lt;/a&gt;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Introduction : llms.txt, un standard &#233;mergent pour l'&#232;re de l'IA g&#233;n&#233;rative &lt;/h2&gt;
&lt;p&gt;Avec la g&#233;n&#233;ralisation des mod&#232;les de langage de grande taille (Large Language Models, ou LLMs), une question devient centrale : comment les cr&#233;ateurs de contenu peuvent-ils indiquer aux syst&#232;mes d'IA les conditions d'utilisation de leurs donn&#233;es ?&lt;/p&gt; &lt;p&gt;Le fichier &lt;strong&gt;llms.txt&lt;/strong&gt; est une proposition de standard visant &#224; r&#233;pondre &#224; ce besoin. Il permet &#224; un site web de documenter, de mani&#232;re lisible par des agents automatis&#233;s, ses pr&#233;f&#233;rences concernant l'utilisation de ses contenus par des mod&#232;les d'IA.&lt;/p&gt; &lt;p&gt;L'objectif n'est pas d'imposer un m&#233;canisme technique de contr&#244;le, mais de fournir un cadre d&#233;claratif, simple et d&#233;centralis&#233;, que les d&#233;veloppeurs d'IA peuvent choisir de respecter.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Contexte : pourquoi llms.txt a &#233;merg&#233; &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;L'explosion des LLMs et des donn&#233;es d'entra&#238;nement&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Depuis 2023, avec la d&#233;mocratisation de mod&#232;les comme ChatGPT, les LLMs sont entra&#238;n&#233;s sur des volumes massifs de donn&#233;es issues du web public.&lt;/p&gt; &lt;p&gt;Concr&#232;tement, cela signifie que des contenus peuvent &#234;tre r&#233;utilis&#233;s pour entra&#238;ner des mod&#232;les sans que leurs auteurs aient forc&#233;ment &#233;t&#233; inform&#233;s, ni m&#234;me qu'ils aient eu l'occasion d'exprimer une position sur cet usage.&lt;/p&gt; &lt;p&gt;Ce flou pose un probl&#232;me assez basique : il n'existe pas vraiment de moyen standard pour dire ce qui est acceptable ou non. C&#244;t&#233; cr&#233;ateurs, difficile d'indiquer des conditions d'utilisation claires. Et c&#244;t&#233; d&#233;veloppeurs, tout aussi difficile de savoir sur quelles bases ils peuvent s'appuyer pour utiliser ces contenus.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;L'insuffisance des outils existants&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;robots.txt&lt;/strong&gt; permet de r&#233;guler l'exploration des pages par des moteurs de recherche, mais ne s'applique pas explicitement aux usages li&#233;s &#224; l'entra&#238;nement des mod&#232;les d'IA. Les balises &lt;strong&gt;&lt;meta&gt;&lt;/strong&gt; offrent une granularit&#233; limit&#233;e et ne couvrent pas les cas d'usage sp&#233;cifiques aux LLMs.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt; propose une approche compl&#233;mentaire : un fichier plac&#233; &#224; la racine du site (&lt;strong&gt;/llms.txt&lt;/strong&gt;), destin&#233; &#224; &#234;tre consult&#233; par des agents IA pour comprendre les r&#232;gles d'usage d&#233;clar&#233;es par le propri&#233;taire du contenu.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Qu'est-ce que llms.txt et comment l'utiliser &lt;/h2&gt;
&lt;p&gt;Le fichier &lt;strong&gt;llms.txt&lt;/strong&gt; est un document texte simple, accessible publiquement, qui permet de documenter les politiques d'utilisation des contenus d'un site par des syst&#232;mes d'IA et des LLMs.&lt;/p&gt; &lt;p&gt;Il ne constitue ni une obligation l&#233;gale, ni une barri&#232;re technique, mais un m&#233;canisme de transparence destin&#233; &#224; faciliter le respect des pr&#233;f&#233;rences exprim&#233;es par les cr&#233;ateurs.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Ce que permet concr&#232;tement llms.txt &lt;/h2&gt;
&lt;p&gt;Contrairement &#224; une id&#233;e assez r&#233;pandue, &lt;strong&gt;llms.txt&lt;/strong&gt; ne sert pas uniquement &#224; interdire l'entra&#238;nement.&lt;/p&gt; &lt;p&gt;Son int&#233;r&#234;t est justement de permettre des positions plus nuanc&#233;es. On peut tr&#232;s bien &lt;strong&gt;autoriser l'entra&#238;nement des mod&#232;les&lt;/strong&gt;, tout en encadrant les usages qui en sont faits ensuite. Par exemple, accepter un usage dans un cadre de recherche ou d'indexation, mais refuser une exploitation commerciale directe ou une &lt;strong&gt;int&#233;gration dans un mod&#232;le propri&#233;taire&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;De la m&#234;me mani&#232;re, il devient possible de poser des conditions d'attribution explicites, ou d'exclure certaines cat&#233;gories de donn&#233;es, notamment lorsqu'elles sont personnelles ou sensibles.&lt;/p&gt; &lt;p&gt;Selon les cas, on peut aussi aller plus loin et d&#233;finir des r&#232;gles diff&#233;rentes en fonction des acteurs ou des types de mod&#232;les, m&#234;me si ce point reste encore assez informel aujourd'hui.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Structure recommand&#233;e (exemple indicatif) &lt;/h2&gt;
&lt;p&gt;Le format suivant est une proposition illustrative, inspir&#233;e de mises en &#339;uvre r&#233;elles. Il ne s'agit pas d'une sp&#233;cification officielle et peut &#233;voluer.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;# llms.txt &#8211; AI usage policy (example)&lt;br /&gt; &lt;br /&gt; [Preferences]&lt;br /&gt; Allow-LLM-Training: true&lt;br /&gt; Allow-Document-Indexing: true&lt;br /&gt; Allow-LLM-Scraping: true&lt;br /&gt; Allow-Embedded-LLM-Training: false&lt;br /&gt; &lt;br /&gt; [Restrictions]&lt;br /&gt; Content-Restrictions: commercial-use-restriction, copyright-sensitive&lt;br /&gt; Sensitive-Data: excluded&lt;br /&gt; &lt;br /&gt; [Rules]&lt;br /&gt; GPT-4: allow-training, allow-indexing&lt;br /&gt; Claude: allow-training, allow-indexing&lt;br /&gt; OpenSource-Models: allow-training&lt;br /&gt; &lt;br /&gt; [Attribution-Requirements]&lt;br /&gt; Citation-Required: true&lt;br /&gt; Attribution-Format: Author, Date, URL&lt;br /&gt; &lt;br /&gt; [Contact]&lt;br /&gt; Email: contact@example.com&lt;br /&gt; &lt;br /&gt; [Last-Updated]&lt;br /&gt; Date: 2026-01-04&lt;br /&gt; Version: 1.1&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt; Explication des principaux champs &lt;/h2&gt;
&lt;p&gt;Les principaux champs utilis&#233;s restent assez simples &#224; comprendre, m&#234;me sans sp&#233;cification formelle :&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Allow-LLM-Training&lt;/strong&gt; : autorise l'utilisation du contenu pour l'entra&#238;nement des mod&#232;les d'IA
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Allow-Embedded-LLM-Training&lt;/strong&gt; : interdit l'int&#233;gration directe du contenu dans des mod&#232;les propri&#233;taires ferm&#233;s
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Allow-Document-Indexing&lt;/strong&gt; : autorise l'usage pour des syst&#232;mes de r&#233;cup&#233;ration de documents (RAG)
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Sensitive-Data&lt;/strong&gt; : exclut explicitement toute donn&#233;e personnelle ou sensible
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Rules&lt;/strong&gt; : permet de d&#233;finir des r&#232;gles sp&#233;cifiques par acteur ou type de mod&#232;le
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Citation-Required&lt;/strong&gt; : rend l'attribution obligatoire pour tout usage&lt;/p&gt; &lt;p&gt;L'ensemble reste volontairement simple, l'objectif &#233;tant d'&#234;tre lisible plut&#244;t qu'exhaustif.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Pourquoi impl&#233;menter llms.txt &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pour les cr&#233;ateurs de contenu&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Pour un cr&#233;ateur de contenu, l'int&#233;r&#234;t de &lt;strong&gt;llms.txt&lt;/strong&gt; est surtout de pouvoir reprendre la main sur quelque chose qui, jusqu'ici, restait implicite.&lt;/p&gt; &lt;p&gt;On peut autoriser l'entra&#238;nement sans pour autant accepter tous les usages derri&#232;re. Cela permet par exemple de poser des limites sur l'exploitation commerciale, de clarifier les conditions d'attribution, ou simplement d'exprimer une position sur la mani&#232;re dont ses contenus peuvent &#234;tre r&#233;utilis&#233;s.&lt;/p&gt; &lt;p&gt;Au-del&#224; de l'aspect juridique, il y a aussi une logique de transparence. Formaliser ces r&#232;gles, m&#234;me de mani&#232;re d&#233;clarative, revient &#224; rendre explicite ce qui ne l'&#233;tait pas.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pour les d&#233;veloppeurs d'IA&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;C&#244;t&#233; d&#233;veloppeurs, l'int&#233;r&#234;t est diff&#233;rent mais compl&#233;mentaire.&lt;/p&gt; &lt;p&gt;Disposer d'un fichier &lt;strong&gt;llms.txt&lt;/strong&gt; permet d'identifier plus facilement les contenus qui peuvent &#234;tre utilis&#233;s, et dans quelles conditions. Dans un contexte o&#249; les questions de droit d'auteur et de responsabilit&#233; sont de plus en plus pr&#233;sentes, ce type d'information devient utile pour cadrer les pratiques.&lt;/p&gt; &lt;p&gt;Cela ouvre aussi la voie &#224; des processus plus tra&#231;ables, o&#249; les sources et les conditions d'utilisation ne sont plus compl&#232;tement implicites.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Bonnes pratiques &lt;/h2&gt;
&lt;p&gt;Dans la pratique, l'enjeu principal est d'&#233;viter toute ambigu&#239;t&#233;.&lt;/p&gt; &lt;p&gt;Un &lt;strong&gt;llms.txt&lt;/strong&gt; efficace est d'abord un fichier explicite et coh&#233;rent. Il doit distinguer clairement les diff&#233;rents usages &#8212; entra&#238;nement, indexation, int&#233;gration &#8212; sans introduire de contradictions.&lt;/p&gt; &lt;p&gt;Lorsque le contenu est amen&#233; &#224; &#234;tre r&#233;utilis&#233;, il est g&#233;n&#233;ralement pertinent de pr&#233;ciser les attentes en mati&#232;re d'attribution. De la m&#234;me mani&#232;re, les donn&#233;es sensibles devraient &#234;tre exclues sans ambigu&#239;t&#233;.&lt;/p&gt; &lt;p&gt;Enfin, comme pour les autres fichiers de ce type, il est utile de maintenir le document &#224; jour et de l'inscrire dans un ensemble plus large, aux c&#244;t&#233;s de &lt;strong&gt;robots.txt&lt;/strong&gt;, &lt;a href='https://www.orsal.fr/Humans-txt-creer-un-fichier-de' class='spip_in'&gt;Humans.txt&lt;/a&gt; ou &lt;a href=&quot;https://securitytxt.org/&quot; class='spip_out' rel='external'&gt;security.txt&lt;/a&gt;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Impl&#233;mentation technique &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cr&#233;ation du fichier&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Cr&#233;er un fichier texte nomm&#233; &lt;strong&gt;llms.txt&lt;/strong&gt; &#224; la racine du site (&lt;strong&gt;/llms.txt&lt;/strong&gt;).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;V&#233;rification de l'accessibilit&#233;&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;curl -I https://www.example.com/llms.txt&lt;br /&gt; # Doit retourner : 200 OK&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Lien optionnel depuis le site&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;link rel=&quot;llms-policy&quot; href=&quot;/llms.txt&quot; /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ou via un lien visible :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;a href=&quot;/llms.txt&quot;&gt;Politique d'utilisation IA (llms.txt)&lt;/a&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt; Adoption et perspectives &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt; reste aujourd'hui un &lt;strong&gt;standard &#233;mergent&lt;/strong&gt;, apparu autour de 2023&#8211;2024, et dont l'adoption est encore assez h&#233;t&#233;rog&#232;ne.&lt;/p&gt; &lt;p&gt;Il n'existe pas, &#224; ce stade, de reconnaissance formelle par un organisme de standardisation. Pour autant, la dynamique n'est pas nouvelle : on retrouve un sch&#233;ma assez proche de celui de &lt;strong&gt;robots.txt&lt;/strong&gt; &#224; ses d&#233;buts, avec une adoption progressive port&#233;e par les usages, avant une &#233;ventuelle normalisation.&lt;/p&gt; &lt;p&gt;Dans le m&#234;me temps, les &#233;volutions r&#233;glementaires, notamment en Europe avec l'&lt;a href=&quot;https://artificial-intelligence-act.eu/&quot; class='spip_out' rel='external'&gt;AI Act&lt;/a&gt;, pourraient renforcer l'int&#233;r&#234;t de ce type de m&#233;canisme d&#233;claratif. Sans forc&#233;ment le rendre obligatoire, elles contribuent &#224; installer l'id&#233;e qu'une certaine transparence sur l'usage des donn&#233;es devient n&#233;cessaire.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Limitations et consid&#233;rations &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt; pr&#233;sente aujourd'hui des limites qu'il vaut mieux avoir en t&#234;te d&#232;s le d&#233;part.&lt;/p&gt; &lt;p&gt;D'abord, son respect repose enti&#232;rement sur la bonne volont&#233; des acteurs qui choisissent de le consulter. Il n'existe aucun m&#233;canisme technique permettant de s'assurer qu'un agent s'y conforme r&#233;ellement.&lt;/p&gt; &lt;p&gt;Ensuite, le fichier ne pr&#233;voit pas de syst&#232;me d'authentification. En pratique, il est donc impossible de distinguer de mani&#232;re fiable les diff&#233;rents types d'agents ou de v&#233;rifier leur identit&#233;.&lt;/p&gt; &lt;p&gt;Enfin, la granularit&#233; reste assez limit&#233;e. Les r&#232;gles s'appliquent globalement au site, sans possibilit&#233; fine de d&#233;finir des politiques diff&#233;rentes selon les pages ou les sections.&lt;/p&gt; &lt;p&gt;Ces limites n'enl&#232;vent pas tout int&#233;r&#234;t au fichier, mais elles rappellent qu'il s'agit avant tout d'un outil de transparence, et non d'un dispositif de contr&#244;le.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Conclusion : une ouverture encadr&#233;e plut&#244;t qu'un refus global &lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;llms.txt&lt;/strong&gt; n'est pas un outil de blocage, mais un moyen d'exprimer clairement des conditions d'utilisation raisonn&#233;es.&lt;/p&gt; &lt;p&gt;Il permet d'autoriser l'entra&#238;nement des mod&#232;les d'IA tout en en fixant les limites : attribution, respect du droit d'auteur, exclusion des donn&#233;es sensibles et refus de certaines int&#233;grations propri&#233;taires.&lt;/p&gt; &lt;p&gt;&#192; l'image de &lt;strong&gt;robots.txt&lt;/strong&gt; ou &lt;a href='https://www.orsal.fr/Humans-txt-creer-un-fichier-de' class='spip_in'&gt;Humans.txt&lt;/a&gt;, &lt;strong&gt;llms.txt&lt;/strong&gt; s'inscrit dans la tradition du web ouvert : un &#233;cosyst&#232;me fond&#233; sur des conventions partag&#233;es, la transparence et la responsabilit&#233;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Ressources et r&#233;f&#233;rences &lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;a href=&quot;https://llmstxt.org/&quot; class='spip_out' rel='external'&gt;Site officiel llmstxt.org&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt; Voir aussi &lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;a href='https://www.orsal.fr/Humans-txt-creer-un-fichier-de' class='spip_in'&gt;Humans.txt&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Obfuscation d'email : CSS vs JavaScript, am&#233;lioration des performances SEO (LCP, CLS)</title>
		<link>https://www.orsal.fr/Obfuscation-d-email-CSS-vs</link>
		<guid isPermaLink="true">https://www.orsal.fr/Obfuscation-d-email-CSS-vs</guid>
		<dc:date>2025-12-06T17:20:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Lors d'une analyse de performance web, un JavaScript charg&#233; uniquement pour l'obfuscation d'une adresse email a &#233;t&#233; identifi&#233; comme inutile. Cet article pr&#233;sente une alternative bas&#233;e sur du CSS pur, puis une solution c&#244;t&#233; serveur permettant d'am&#233;liorer les performances SEO (LCP, CLS) tout en pr&#233;servant l'exp&#233;rience utilisateur, notamment sur mobile.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Referencement-SEO-GEO" rel="directory"&gt;R&#233;f&#233;rencement SEO/GEO&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton72-eb5a9.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff72-85da7.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton72-eb5a9.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Lors d'une analyse de performance web, un JavaScript charg&#233; uniquement pour l'obfuscation d'une adresse email a &#233;t&#233; identifi&#233; comme inutile. Cet article pr&#233;sente une alternative bas&#233;e sur du CSS pur, puis une solution c&#244;t&#233; serveur permettant d'am&#233;liorer les performances SEO (LCP, CLS) tout en pr&#233;servant l'exp&#233;rience utilisateur, notamment sur mobile.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Pourquoi l'obfuscation d'email pose un probl&#232;me de performance&lt;/h2&gt;
&lt;p&gt;L'&lt;strong&gt;obfuscation d'email&lt;/strong&gt;, qui d&#233;signe les techniques utilis&#233;es pour rendre une adresse moins directement exploitable par des robots tout en restant lisible pour un humain, est une probl&#233;matique ancienne du web. Historiquement, elle a souvent &#233;t&#233; trait&#233;e via du JavaScript charg&#233; au runtime pour reconstruire une adresse ou un lien &lt;code class='spip_code' dir='ltr'&gt;mailto:&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;M&#234;me si ce type de script n'a pas toujours un impact mesurable imm&#233;diat sur les &lt;strong&gt;Core Web Vitals&lt;/strong&gt;, il alourdit la page en ajoutant une &lt;strong&gt;ressource non essentielle&lt;/strong&gt;. Il complexifie le rendu c&#244;t&#233; client, introduit des d&#233;pendances &#233;vitables et peut d&#233;grader marginalement le LCP sur des pages simples. &#192; cela s'ajoute un effet sur la lisibilit&#233; du code, ce qui nuit &#224; long terme &#224; la maintenabilit&#233;.&lt;/p&gt; &lt;p&gt;Dans une d&#233;marche d'&lt;strong&gt;optimisation SEO moderne&lt;/strong&gt;, chaque ressource doit justifier sa pr&#233;sence.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Rappel : Core Web Vitals et performance per&#231;ue&lt;/h2&gt;
&lt;p&gt;Les Core Web Vitals sont un ensemble d'indicateurs d&#233;finis par Google pour &#233;valuer la qualit&#233; de l'exp&#233;rience utilisateur r&#233;elle. Ils ne mesurent pas uniquement la rapidit&#233; brute, mais la perception du chargement et la stabilit&#233; de l'interface.&lt;/p&gt; &lt;p&gt;Le &lt;strong&gt;LCP (Largest Contentful Paint)&lt;/strong&gt; refl&#232;te la vitesse d'affichage du contenu principal.&lt;/p&gt; &lt;p&gt;Le &lt;strong&gt;CLS (Cumulative Layout Shift)&lt;/strong&gt; mesure la stabilit&#233; visuelle de la page.&lt;/p&gt; &lt;p&gt;Un script JavaScript non essentiel peut retarder l&#233;g&#232;rement le rendu initial ou provoquer des recalculs inutiles.&lt;/p&gt; &lt;p&gt;M&#234;me lorsqu'un script n'entra&#238;ne pas de d&#233;gradation mesurable imm&#233;diate, sa suppression simplifie la cha&#238;ne de rendu et am&#233;liore la performance per&#231;ue, en particulier sur mobile. Ces principes s'inscrivent dans les recommandations de Google pour favoriser des pages rapides, stables et adapt&#233;es &#224; l'&lt;strong&gt;indexation mobile-first&lt;/strong&gt;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;R&#233;duire le JavaScript pour am&#233;liorer le SEO technique&lt;/h2&gt;
&lt;p&gt;La performance web ne se r&#233;sume pas &#224; un score PageSpeed. Elle repose sur plusieurs principes cl&#233;s : limiter le JavaScript non essentiel, r&#233;duire le travail du navigateur, stabiliser l'affichage pour &#233;viter les d&#233;calages visuels (CLS) et am&#233;liorer la performance per&#231;ue, notamment sur mobile.&lt;/p&gt; &lt;p&gt;Supprimer un script inutile est souvent l'une des optimisations les plus simples et les plus efficaces.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Obfuscation d'email sans JavaScript : approche CSS&lt;/h2&gt;
&lt;p&gt;Il est possible d'afficher une adresse email sans qu'elle soit directement exploitable dans le code source, en utilisant uniquement du HTML et du &lt;strong&gt;CSS&lt;/strong&gt;, sans JavaScript c&#244;t&#233; client.&lt;/p&gt; &lt;p&gt;La technique consiste &#224; d&#233;couper l'email dans des attributs &lt;code class='spip_code' dir='ltr'&gt;data-*&lt;/code&gt;. Le CSS se charge ensuite de masquer le placeholder, et de reconstituer le contenu visible &#224; partir des attributs. Ainsi, il n'y a plus de code c&#244;t&#233; client qui r&#233;alise le masquage de l'information.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Structure HTML&lt;/h2&gt;
&lt;p&gt;L'email est d&#233;coup&#233; en deux parties stock&#233;es dans des attributs &lt;code class='spip_code' dir='ltr'&gt;data-*&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Il n'appara&#238;t jamais directement sous forme exploitable dans le HTML.&lt;/p&gt; &lt;p&gt;L'application de la classe de style masque le contenu initial et reconstruit l'affichage via le CSS.&lt;/p&gt; &lt;p&gt;Le texte pr&#233;sent dans le &lt;code class='spip_code' dir='ltr'&gt;&lt;span&gt;&lt;/code&gt; reste dans le DOM mais n'est plus visible.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;span class=&quot;protected-email&quot;&lt;br /&gt; data-email-user=&quot;guillaume&quot;&lt;br /&gt; data-email-domain=&quot;orsal.net&quot;&gt;&lt;br /&gt; [email protected]&lt;br /&gt; &lt;/span&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Feuille de style CSS&lt;/h2&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;/* Masque le contenu initial du bloc */&lt;br /&gt; .protected-email {&lt;br /&gt; font-size: 0;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; /* Reconstruit visuellement l'email &#224; partir des attributs data-* */&lt;br /&gt; .protected-email::before {&lt;br /&gt; font-size: 14px;&lt;br /&gt; content: attr(data-email-user) &quot;@&quot; attr(data-email-domain);&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le choix de &lt;code class='spip_code' dir='ltr'&gt;font-size: 0&lt;/code&gt; masque le texte sans modifier la structure du DOM ni provoquer de recalcul de layout.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;B&#233;n&#233;fices en termes de performance et de r&#233;f&#233;rencement&lt;/h2&gt;
&lt;p&gt;Cette solution pr&#233;sente plusieurs avantages du point de vue SEO et performance.&lt;/p&gt; &lt;p&gt;Il n'y a aucun JavaScript &#224; charger ou ex&#233;cuter, l'impact est donc nul sur le LCP et le CLS, le rendu est imm&#233;diat sans recalcul.&lt;/p&gt; &lt;p&gt;La compatibilit&#233; est maximale avec les navigateurs et la lecture reste possible par les moteurs de recherche.&lt;/p&gt; &lt;p&gt;Enfin, elle continue d'offrir une protection suffisante contre les collectes automatis&#233;es basiques des robots et s'inscrit dans une logique de sobri&#233;t&#233; et d'optimisation structurelle du front-end.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Limite fonctionnelle : l'exp&#233;rience utilisateur sur mobile&lt;/h2&gt;
&lt;p&gt;Cette approche purement CSS pr&#233;sente toutefois une limite : l'adresse email affich&#233;e n'est pas cliquable.&lt;/p&gt; &lt;p&gt;Sur desktop, cela peut &#234;tre acceptable. Sur mobile, l'utilisateur s'attend &#224; ce qu'un email soit interactif et ouvre son client de messagerie.&lt;/p&gt; &lt;p&gt;Une optimisation technique ne doit pas se faire au d&#233;triment de l'exp&#233;rience utilisateur.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;R&#233;tablir l'UX sans JavaScript : redirection c&#244;t&#233; serveur&lt;/h2&gt;
&lt;p&gt;Pour concilier performance, UX et protection minimale contre les bots, une solution consiste &#224; utiliser une redirection c&#244;t&#233; serveur vers un lien &lt;code class='spip_code' dir='ltr'&gt;mailto:&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;L'email n'est jamais expos&#233; sous forme de lien dans le HTML, et aucune logique JavaScript n'est ajout&#233;e.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Script de redirection contact.php&lt;/h2&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;?php&lt;br /&gt; // D&#233;sactivation explicite du cache HTTP&lt;br /&gt; header('Cache-Control: no-cache, no-store, must-revalidate');&lt;br /&gt; header('Pragma: no-cache');&lt;br /&gt; header('Expires: 0');&lt;br /&gt; &lt;br /&gt; // Redirection vers le mailto&lt;br /&gt; header('Location: mailto:email@example.com?subject=contact');&lt;br /&gt; exit;&lt;br /&gt; ?&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Les en-t&#234;tes HTTP d&#233;sactivant le cache sont essentiels. Une redirection mise en cache par un navigateur, un proxy ou un CDN pourrait conserver un comportement obsol&#232;te, ignorer une &#233;volution future ou introduire des effets de bord difficiles &#224; diagnostiquer.&lt;/p&gt; &lt;p&gt;Le script ne prend volontairement aucun param&#232;tre utilisateur afin de limiter les risques d'abus, de d&#233;tournement, ou d'envoi involontaire vers un point d'entr&#233;e exploitable.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Utilisation c&#244;t&#233; HTML&lt;/h2&gt;
&lt;p&gt;L'email masqu&#233; est ensuite encapsul&#233; dans un lien pointant vers le script de redirection.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;a href=&quot;/contact.php&quot; title=&quot;Me contacter par email&quot; rel=&quot;nofollow&quot;&gt;&lt;br /&gt; &lt;span class=&quot;protected-email&quot; data-email-user=&quot;guillaume&quot; data-email-domain=&quot;orsal.net&quot;&gt;&lt;br /&gt; [email protected]&lt;br /&gt; &lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le lien est marqu&#233; en &lt;code class='spip_code' dir='ltr'&gt;nofollow&lt;/code&gt; car l'objectif est uniquement l'action utilisateur, pas le r&#233;f&#233;rencement du script.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Cette approche supprime une d&#233;pendance JavaScript inutile, ce qui contribue &#224; pr&#233;server des indicateurs tels que le LCP et le CLS. L'interactivit&#233; attendue sur mobile est &#233;galement pr&#233;serv&#233;e, tout comme la limitation de l'exposition de l'adresse email. Le code obtenu est simple, maintenable et &#233;l&#233;gant.&lt;/p&gt; &lt;p&gt;L'optimisation des performances web et du r&#233;f&#233;rencement repose parfois sur des choix simples et structurants.&lt;/p&gt; &lt;p&gt;R&#233;duire le JavaScript non essentiel en exploitant les capacit&#233;s du CSS aura permis ici d'am&#233;liorer &#224; la fois le SEO technique et la performance per&#231;ue, sans modifier l'exp&#233;rience utilisateur.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Installer et utiliser Ollama : l'intelligence artificielle locale sous Linux</title>
		<link>https://www.orsal.fr/Installer-et-utiliser-Ollama-l</link>
		<guid isPermaLink="true">https://www.orsal.fr/Installer-et-utiliser-Ollama-l</guid>
		<dc:date>2025-11-02T20:21:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Dans cet article, je vous guide pas &#224; pas : installation d'Ollama sous Linux, choix et t&#233;l&#233;chargement de mod&#232;les open source comme Mistral ou Phi-3, tests de l'API REST et int&#233;gration dans Laravel pour b&#233;n&#233;ficier d'une IA locale rapide, &#233;conomique et respectueuse de vos donn&#233;es.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Data-Mining-IA-Decisionnel" rel="directory"&gt;Data Mining, IA, D&#233;cisionnel&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton70-c33a4.png' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff70-25ae0.png'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton70-c33a4.png'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Dipl&#244;m&#233; d'un &lt;a href='https://www.orsal.fr/Ingenieur-Informatique-Freelance' class='spip_in'&gt;master en Intelligence Artificielle&lt;/a&gt;, je suis aujourd'hui &lt;strong&gt;d&#233;veloppeur web fullstack&lt;/strong&gt; sp&#233;cialis&#233; en &lt;strong&gt;Laravel, Livewire, React&lt;/strong&gt;. J'int&#232;gre l'&lt;strong&gt;IA g&#233;n&#233;rative&lt;/strong&gt; dans les projets web modernes pour cr&#233;er des solutions intelligentes, sans d&#233;pendance aux API propri&#233;taires.&lt;/p&gt; &lt;p&gt;Dans cet article, je vous guide pas &#224; pas : &lt;strong&gt;installation d'Ollama sous Linux&lt;/strong&gt;, choix et t&#233;l&#233;chargement de &lt;strong&gt;mod&#232;les open source&lt;/strong&gt; comme Mistral ou Phi-3, tests de l'API REST et int&#233;gration dans &lt;strong&gt;Laravel&lt;/strong&gt; pour b&#233;n&#233;ficier d'une &lt;strong&gt;IA locale&lt;/strong&gt; rapide, &#233;conomique et respectueuse de vos donn&#233;es.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Installation d'Ollama sous Linux&lt;/h2&gt;
&lt;p&gt;L'installation d'Ollama sous Linux (Debian/Ubuntu) est tr&#232;s simple gr&#226;ce au script officiel fourni par l'&#233;quipe Ollama :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;curl -fsSL https://ollama.com/install.sh | sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Une fois install&#233;, la commande &lt;strong&gt;ollama&lt;/strong&gt; devient disponible et le service syst&#232;me d&#233;marre automatiquement. Par d&#233;faut, &lt;strong&gt;Ollama &#233;coute uniquement en local&lt;/strong&gt; sur 127.0.0.1:11434, ce qui garantit qu'aucune requ&#234;te externe ne peut atteindre votre instance tant que vous ne modifiez pas la config r&#233;seau.&lt;/p&gt; &lt;p&gt;Pour v&#233;rifier le statut du service :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;systemctl status ollama&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le service doit afficher &lt;strong&gt;active (running)&lt;/strong&gt;.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;V&#233;rifier l'&#233;coute du service&lt;/h2&gt;
&lt;p&gt;V&#233;rifier que le serveur Ollama &#233;coute bien sur son port par d&#233;faut avec :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ss -tulpen | grep 11434&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Vous devez obtenir une ligne similaire :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;tcp LISTEN 0 4096 127.0.0.1:11434 ...&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cette configuration emp&#234;che toute exposition r&#233;seau accidentelle.&lt;/p&gt; &lt;p&gt;Si le port n'est pas visible, le service n'est probablement pas d&#233;marr&#233; ou le firewall local bloque l'acc&#232;s.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;T&#233;l&#233;charger les mod&#232;les d'IA&lt;/h2&gt;
&lt;p&gt;Voici une &lt;a href=&quot;https://skywork.ai/blog/llm/ollama-models-list-2025-100-models-compared/&quot; class='spip_out' rel='external'&gt;s&#233;lection de mod&#232;les open-source adapt&#233;s &#224; diff&#233;rents usages&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ces mod&#232;les sont quantifi&#233;s (Q4/Q8), c'est-&#224;-dire que leur pr&#233;cision num&#233;rique interne est r&#233;duite pour occuper moins de VRAM et calculer plus vite, tout en gardant une qualit&#233; de g&#233;n&#233;ration tr&#232;s proche du mod&#232;le d'origine.&lt;/p&gt; &lt;p&gt;Ollama n'embarque aucun mod&#232;le par d&#233;faut : vous devrez donc t&#233;l&#233;charger ceux dont vous avez besoin via &lt;code class='spip_code' dir='ltr'&gt;{{ollama pull}}&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ollama pull mistral&lt;br /&gt; ollama pull phi3&lt;br /&gt; ollama pull neural-chat&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Mistral&lt;/strong&gt; : excellentes performances en g&#233;n&#233;ration de texte
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Phi 3&lt;/strong&gt; : l&#233;ger et performant
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;NeuralChat&lt;/strong&gt; : ton conversationnel naturel&lt;/p&gt; &lt;p&gt;Pour lister les mod&#232;les install&#233;s :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ollama list&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Premier test de g&#233;n&#233;ration&lt;/h2&gt;
&lt;p&gt;Vous pouvez interroger Ollama directement via son &lt;strong&gt;API REST locale&lt;/strong&gt;. Par exemple, pour tester la g&#233;n&#233;ration avec Mistral :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;curl http://127.0.0.1:11434/api/generate -d '{&quot;model&quot;:&quot;mistral&quot;,&quot;prompt&quot;:&quot;Dis bonjour&quot;}'&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ollama renvoie la r&#233;ponse sous forme de tokens JSON en streaming, comme une API OpenAI.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Obtenir uniquement le texte final&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;jq&lt;/strong&gt; est indispensable si vous souhaitez parser proprement les r&#233;ponses JSON en ligne de commande ou dans vos scripts Bash.&lt;/p&gt; &lt;p&gt;L'outil s'installe avec la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get install jq -y&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Puis, un nouvel appel &#224; l'API d'Ollama, cha&#238;n&#233; &#224; jq :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;curl -sN http://127.0.0.1:11434/api/generate -d '{&quot;model&quot;:&quot;mistral&quot;,&quot;prompt&quot;:&quot;Dis bonjour&quot;}' | jq -rj --unbuffered 'select(.response) | .response';echo&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le texte s'affiche sans formatage JSON.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Une fonction Bash pour simplifier l'usage&lt;/h2&gt;
&lt;p&gt;Pour simplifier vos tests sans r&#233;&#233;crire la commande curl, voici une fonction shell utilitaire &#224; ajouter &#224; vos alias dans &lt;strong&gt;.bash_aliases&lt;/strong&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ollama-say() {&lt;br /&gt; if [ -z &quot;$1&quot; ]; then&lt;br /&gt; echo &quot;Usage: ollama-say \&quot;prompt\&quot; [model]&quot;&lt;br /&gt; return 1&lt;br /&gt; fi&lt;br /&gt; local PROMPT=&quot;$1&quot;&lt;br /&gt; local MODEL=&quot;${2:-mistral}&quot;&lt;br /&gt; curl -sN http://127.0.0.1:11434/api/generate \&lt;br /&gt; -d &quot;{\&quot;model\&quot;:\&quot;$MODEL\&quot;,\&quot;prompt\&quot;:\&quot;$PROMPT\&quot;}&quot; \&lt;br /&gt; | jq -rj --unbuffered 'select(.response) | .response'&lt;br /&gt; echo&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Recharger les alias :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;source ~/.bash_aliases&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Vous pouvez maintenant appeler Ollama comme une mini-API locale directement depuis le terminal, en pr&#233;cisant dans la ligne de commande le prompt suivi du mod&#232;le :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ollama-say &quot;Dis bonjour!&quot; mistral&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s quelques secondes, vous obtiendrez la r&#233;ponse sans formatage.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Acc&#232;s distant via tunnel SSH&lt;/h2&gt;
&lt;p&gt;Ollama n'&#233;coute par d&#233;faut que l'IP &lt;strong&gt;127.0.0.1&lt;/strong&gt; pour des raisons de s&#233;curit&#233;. &lt;strong&gt;Evitez absolument d'exposer le port 11434 directement sur Internet.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Si le service tourne sur une autre machine, par exemple un serveur disposant de meilleures capacit&#233;s de calcul, vous pourrez cr&#233;er un tunnel SSH.&lt;/p&gt; &lt;p&gt;Remplacez &lt;i&gt;user&lt;/i&gt; par le login et &lt;i&gt;serveur&lt;/i&gt; par l'IP ou le nom du serveur.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ssh -L 11434:localhost:11434 user@serveur&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le mod&#232;le devient alors accessible sur votre poste via &lt;strong&gt;http://localhost:11434&lt;/strong&gt;. Le port local 11434 &#233;tant d&#233;sormais redirig&#233; vers le m&#234;me port sur le serveur.&lt;/p&gt; &lt;p&gt;Pour lancer le tunnel SSH en arri&#232;re-plan :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;ssh -N -f -L 11434:localhost:11434 user@serveur&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Pour fermer le tunnel, il faudra s'attaquer directement au processus :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;pkill -f &quot;ssh -L 11434&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cette approche permet un acc&#232;s distant tout en conservant le niveau de s&#233;curit&#233; d'un service local.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Int&#233;gration d'Ollama dans Laravel : cas d'usage concrets&lt;/h2&gt;
&lt;p&gt;L'API d'Ollama est compatible avec n'importe quel framework backend.&lt;/p&gt; &lt;p&gt;Ollama devient puissant lorsqu'il est int&#233;gr&#233; dans une architecture web moderne. Quelques applications concr&#232;tes :&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;G&#233;n&#233;ration de contenu&lt;/strong&gt; : Articles, descriptions produit, r&#233;sum&#233;s
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Analyse de texte&lt;/strong&gt; : Cat&#233;gorisation de commentaires, d&#233;tection de spam
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Suggestions intelligentes&lt;/strong&gt; : Recommandations, auto-compl&#233;tion
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Recherche s&#233;mantique&lt;/strong&gt; : Au-del&#224; des mots-cl&#233;s, recherche contextuelle via embeddings&lt;/p&gt; &lt;p&gt;Voici comment l'utiliser facilement dans Laravel via Http ::post() :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;php&lt;br /&gt; $response = Http::post('http://localhost:11434/api/generate', [&lt;br /&gt; 'model' =&gt; 'mistral',&lt;br /&gt; 'prompt' =&gt; 'G&#233;n&#232;re une description produit concise pour : ' . $product-&gt;name,&lt;br /&gt; 'stream' =&gt; false,&lt;br /&gt; ]);&lt;br /&gt; &lt;br /&gt; $description = $response-&gt;json()['response'];&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cela r&#233;duit drastiquement vos co&#251;ts API (OpenAI, Gemini) en gardant le contr&#244;le total de vos donn&#233;es.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Performances et optimisation GPU&lt;/h2&gt;
&lt;p&gt;Bien que Ollama fonctionne sans GPU, les performances augmentent significativement avec une carte graphique support&#233;e.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Sans GPU&lt;/strong&gt; : 5-30 secondes par r&#233;ponse selon le mod&#232;le
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Avec GPU NVIDIA&lt;/strong&gt; : Acc&#233;l&#233;ration de &lt;strong&gt;5 &#224; 20x&lt;/strong&gt;, r&#233;ponses en 1-5 secondes
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;VRAM n&#233;cessaire&lt;/strong&gt; : Mistral ( 4GB), Phi 3 ( 2GB), Llama 2 ( 7GB)&lt;/p&gt; &lt;p&gt;Benchmark simple :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;time ollama-say &quot;&#201;cris un email pour remercier un client&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;En production avec une application Laravel, placer Ollama sur un serveur distinct, id&#233;alement avec GPU, afin d'&#233;viter de saturer votre serveur web.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Alternatives : Ollama vs llama.cpp vs LocalAI&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ollama&lt;/strong&gt; : Installation simple, gestion facile des mod&#232;les, API REST standard. Meilleur pour d&#233;buter.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;llama.cpp&lt;/strong&gt; : Plus l&#233;ger, excellente performance CPU. Id&#233;al pour machines peu puissantes, mais installation plus complexe.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;LocalAI&lt;/strong&gt; : Interface web compl&#232;te, compatible avec OpenAI API. Meilleur si vous migrez depuis OpenAI.&lt;/p&gt; &lt;p&gt;Pour un d&#233;veloppeur fullstack Laravel cherchant du &lt;strong&gt;plug &amp; play&lt;/strong&gt; sans complexit&#233;, Ollama me semble le meilleur choix.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Erreurs courantes et d&#233;pannage&lt;/h2&gt;
&lt;p&gt;Ces erreurs sont les plus fr&#233;quentes lors d'un premier d&#233;ploiement d'Ollama sur un serveur Linux.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Erreur &#171; connection refused &#187;&lt;/strong&gt; : Ollama &#233;coute uniquement sur localhost par d&#233;faut. V&#233;rifier : `systemctl status ollama`. Pour l'acc&#232;s distant, utiliser obligatoirement un tunnel SSH.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Mod&#232;le qui ne r&#233;pond pas&lt;/strong&gt; : Il calcule toujours. Attendre plus longtemps la premi&#232;re fois. Pour des timeouts, augmenter : `curl &#8212;max-time 300`.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;VRAM satur&#233;e&lt;/strong&gt; : Un mod&#232;le trop gros pour votre GPU. V&#233;rifier : `nvidia-smi`. R&#233;duire la taille du prompt ou utiliser un mod&#232;le plus l&#233;ger.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Quantization confusion&lt;/strong&gt; : Ollama g&#232;re automatiquement. Q4 = rapide mais moins pr&#233;cis, Q8 = plus lent mais meilleur. Aucune action requise sauf pour tirage manuel.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Ollama permet d'ex&#233;cuter des mod&#232;les d'IA directement sur un serveur Linux, &lt;strong&gt;sans GPU obligatoire&lt;/strong&gt;, sans d&#233;pendance tierce ni co&#251;ts r&#233;currents.&lt;/p&gt; &lt;p&gt;L'installation est rapide, la configuration s&#251;re, et la flexibilit&#233; excellente pour le d&#233;veloppement, les tests et et la g&#233;n&#233;ration de contenu automatis&#233;e.&lt;/p&gt; &lt;p&gt;Une solution robuste et respectueuse des donn&#233;es, id&#233;ale pour d&#233;veloppeurs et passionn&#233;s d'IA locale.&lt;/p&gt; &lt;p&gt;Ollama s'int&#232;gre parfaitement dans un workflow moderne Laravel/Livewire/React, que ce soit pour prototyper en local, automatiser des t&#226;ches &#233;ditoriales ou alimenter une plateforme SaaS interne.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Int&#233;grer Ollama &#224; votre stack full-stack : expertise et services&lt;/h2&gt;
&lt;p&gt;Int&#233;grer Ollama dans une architecture web (Laravel, React, Livewire, Tailwind) demande une bonne compr&#233;hension du code m&#233;tier, du traitement de texte g&#233;n&#233;ratif et des flux applicatifs.&lt;/p&gt; &lt;p&gt;Si vous envisagez d'&lt;strong&gt;ajouter de l'IA g&#233;n&#233;rative locale&lt;/strong&gt; &#224; votre application, je peux vous accompagner sur :&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Int&#233;gration Laravel / API&lt;/strong&gt; : prompts, streaming, validation, performances
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Automatisation &amp; file de jobs&lt;/strong&gt; : t&#226;ches lourdes, ex&#233;cution asynchrone
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;Choix et gestion des mod&#232;les&lt;/strong&gt; : Mistral, Phi-3, formats d'entr&#233;e/sortie
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &lt;strong&gt;D&#233;ploiement sur serveur Linux&lt;/strong&gt; : installation, configuration et supervision de base&lt;/p&gt; &lt;p&gt;Je suis &lt;strong&gt;d&#233;veloppeur web fullstack sp&#233;cialis&#233; Laravel et IA g&#233;n&#233;rative locale&lt;/strong&gt;, avec une solide pratique Linux. Mon objectif : livrer des solutions &lt;strong&gt;fonctionnelles, maintenables et utilement assist&#233;es par l'IA&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;a href='https://www.orsal.fr/Ingenieur-Informatique-Freelance' class='spip_in'&gt;Parlons de votre projet&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Ing&#233;nieur Informatique Freelance | Laravel, IA, SEO, Linux</title>
		<link>https://www.orsal.fr/Ingenieur-Informatique-Freelance</link>
		<guid isPermaLink="true">https://www.orsal.fr/Ingenieur-Informatique-Freelance</guid>
		<dc:date>2025-06-24T05:55:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Ing&#233;nieur informatique, je con&#231;ois et r&#233;alise des sites Web et j'apporte une expertise en r&#233;f&#233;rencement Web naturel (SEO) &#224; vos projets. Artisan du Web, je r&#233;alise site vitrine, installation et configuration de CMS comme Wordpress ou Spip, mais ma pr&#233;f&#233;rence va au d&#233;veloppement d'applications Web back-end et front-end en TALL stack compos&#233;e de TailwindCSS, AlpineJs, Laravel, Livewire.&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/rubrique11" rel="directory"&gt;CV&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton6-56203.jpg' width='150' height='150' style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;&lt;span itemprop=&quot;description&quot;&gt;&lt;a href=&quot;https://www.orsal.fr/CV-Ingenieur-informatique&quot; itemprop=&quot;url&quot; class=&quot;u-url&quot;&gt;&lt;span class=&quot;role&quot; itemprop=&quot;jobTitle&quot;&gt;&lt;strong&gt;Ing&#233;nieur informatique&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;, je con&#231;ois et &lt;strong&gt;r&#233;alise des sites Web&lt;/strong&gt; et j'apporte une &lt;strong&gt;expertise en r&#233;f&#233;rencement Web naturel (SEO)&lt;/strong&gt; &#224; vos projets.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Artisan du Web, je r&#233;alise site vitrine, installation et configuration de CMS comme Wordpress ou Spip, mais ma pr&#233;f&#233;rence va au &lt;strong&gt;d&#233;veloppement d'applications Web&lt;/strong&gt; back-end et front-end en &lt;strong&gt;TALL stack&lt;/strong&gt; compos&#233;e de &lt;strong&gt;TailwindCSS&lt;/strong&gt;, &lt;strong&gt;AlpineJs&lt;/strong&gt;, &lt;strong&gt;Laravel&lt;/strong&gt;, &lt;strong&gt;Livewire&lt;/strong&gt;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Contact&lt;/h2&gt;
&lt;p&gt;mobile : &lt;span class=&quot;tel&quot; itemprop=&quot;telephone&quot; title=&quot;Me contacter par t&#233;l&#233;phone&quot;&gt;&lt;a href='https://www.orsal.fr/tel:+33 6 60 31 47 57'&gt;+33 6 60 31 47 57&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;courriel : &lt;a href='https://www.orsal.fr/email.php' title=&quot;M'envoyer un email&quot; rel=&quot;nofollow&quot;&gt;&lt;span class=&quot;protected-email&quot; data-email-user=&quot;guillaume&quot; data-email-domain=&quot;orsal.net&quot;&gt;[email protected]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span itemprop=&quot;url&quot;&gt;&lt;a href=&quot;https://github.com/Gallyan&quot; target=&quot;_blank&quot; rel=&quot;me&quot; title=&quot;Mon profil Github&quot;&gt;Github&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L20xH16/activateur-f2f58-beab5.jpg' alt=&quot;Logo Activateur France Num&#233;rique&quot; width='20' height='16' style='height:16px;width:20px;' /&gt;&lt;span itemprop=&quot;url&quot;&gt; &lt;a href=&quot;https://www.francenum.gouv.fr/activateurs/guillaume-orsal&quot; target=&quot;_blank&quot; rel=&quot;me&quot; title=&quot;Mon profil Activateur France num&#233;rique&quot;&gt;Activateur France Num&#233;rique&lt;/a&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;localisation : &lt;span itemprop=&quot;workLocation homeLocation&quot; itemscope itemtype=&quot;https://schema.org/Place&quot;&gt;&lt;span itemprop=&quot;name&quot;&gt;Nogent-le-Rotrou&lt;/span&gt;&lt;/span&gt;, full remote ou presque
&lt;time itemprop=&quot;birthDate&quot; datetime=&quot;1977-12-21T00:00&quot; class=&quot;dt-bday&quot;&gt;&lt;/time&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Exp&#233;rience Professionnelle&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;D&#233;veloppeur Web Full-Stack Laravel / React / IA Expert, Com&#232;te&lt;/strong&gt;&lt;i&gt;, depuis septembre 2024&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;veloppement d'application Web &amp; Mobile pour le &lt;a href=&quot;https://logiciel-comete.fr/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;logiciel Com&#232;te&lt;/a&gt; en PHP / &lt;strong&gt;Laravel&lt;/strong&gt; / React JS&lt;/li&gt;&lt;li&gt; Conception et d&#233;veloppement d'outil d'&lt;strong&gt;Intelligence Artificielle&lt;/strong&gt; pour de la planification automatique par algorithme g&#233;n&#233;tique&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span itemprop=&quot;makesOffer&quot;&gt;D&#233;veloppeur Web &lt;span class=&quot;org&quot;&gt;Freelance&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;i&gt;, depuis d&#233;cembre 2012&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;Cr&#233;ation de sites Internet&lt;/span&gt; - &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;PHP&lt;/strong&gt;&lt;/span&gt;, &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;Laravel&lt;/strong&gt;&lt;/span&gt;, &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;Livewire&lt;/strong&gt;&lt;/span&gt;, &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;JavaScript&lt;/strong&gt;&lt;/span&gt;, Vue.js, MySQL, WordPress, Spip&lt;/li&gt;&lt;li&gt; Optimisation de site pour la performance ou les mobiles (&lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;Responsive Design&lt;/strong&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;Conseil en &lt;strong&gt;r&#233;f&#233;rencement naturel&lt;/strong&gt;&lt;/span&gt; sur les moteurs de recherche (&lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;strong&gt;SEO&lt;/strong&gt;)&lt;/span&gt;&lt;/li&gt;&lt;li&gt; Clients : &lt;a href=&quot;https://www.cnrs.fr/fr&quot; class='spip_out' rel='external'&gt;CNRS&lt;/a&gt;, &lt;a href=&quot;https://www.euris.com/&quot; class='spip_out' rel='external'&gt;Euris&lt;/a&gt;, &lt;a href=&quot;https://www.inrae.fr/&quot; class='spip_out' rel='external'&gt;INRAe&lt;/a&gt;, &lt;a href=&quot;https://www.cnr.it/&quot; class='spip_out' rel='external'&gt;CNR&lt;/a&gt;, &lt;a href=&quot;https://www.sym.place/&quot; class='spip_out' rel='external'&gt;Sym.place&lt;/a&gt;, &lt;a href=&quot;https://www.fugustructures.com/&quot; class='spip_out' rel='external'&gt;Fugu&lt;/a&gt;, &lt;a href=&quot;https://www.univ-gustave-eiffel.fr/&quot; class='spip_out' rel='external'&gt;Universit&#233; Gustave Eiffel&lt;/a&gt;, &lt;a href=&quot;http://www.arttic.eu/&quot; class='spip_out' rel='external'&gt;Arttic&lt;/a&gt;, &lt;a href=&quot;https://www.tightr.com/&quot; class='spip_out' rel='external'&gt;TightR&lt;/a&gt;, &lt;a href=&quot;https://research-and-innovation.ec.europa.eu/funding/funding-opportunities/funding-programmes-and-open-calls/horizon-europe_en&quot; class='spip_out' rel='external'&gt;Union Europ&#233;nne&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Principaux projets r&#233;alis&#233;s :&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href='https://gsis.orsal.net/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Outil de gestion des missions et commandes du personnel&quot;&gt;Gsis&lt;/a&gt; : D&#233;veloppement Web avec &lt;strong&gt;Laravel&lt;/strong&gt; / &lt;strong&gt;Livewire&lt;/strong&gt;, AlpineJs, Tailwind d'un outil de gestion des missions et commandes du personnel&lt;/li&gt;&lt;li&gt; Pseudonymisation de donn&#233;es de sant&#233; : Construction d'une plateforme HDS avec Apache Nifi, Python &lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://flavescence.cortext.net/bourgogne&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Etude de la lutte contre la Flavescence Dor&#233;e&quot;&gt;Flavescence&lt;/a&gt; : D&#233;veloppement Web avec &lt;strong&gt;Laravel&lt;/strong&gt; / &lt;strong&gt;Livewire&lt;/strong&gt;, PHP, AlpineJs, TailwindCSS, &lt;strong&gt;TALL stack&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; Ekrin Renovation : D&#233;veloppement Back-End avec &lt;strong&gt;Laravel&lt;/strong&gt;, PHP, Alpine.js, email responsive sign&#233; &lt;a href=&quot;https://fr.wikipedia.org/wiki/DomainKeys_Identified_Mail&quot; class='spip_out' rel='external'&gt;dkim&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://luttefontromeu.fr/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;P&#244;le Espoir Lutte&quot;&gt;P&#244;le Espoir Lutte&lt;/a&gt; : Maintenance Web&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://health-datatrust.org/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Health DataTrust&quot;&gt;Health DataTrust&lt;/a&gt; : Site Wordpress&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://eds-gfpc.euris.com/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;EDS GFPC&quot;&gt;EDS GFPC&lt;/a&gt; : Site Wordpress&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://www.itekcom.com/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Agence digitale marketing et communication&quot;&gt;itekcom&lt;/a&gt; : Conseil en s&#233;curit&#233; Wordpress&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://www.goodcorporation.fr/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Ethique des affaires, &#233;thique et gouvernance&quot;&gt;Good Corporation&lt;/a&gt; : Accompagnement SEO&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://www.euris.com/fr/hebergement-donnees-sante/cloud-sante-hebergement/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;H&#233;bergeur certifi&#233; HDS&quot;&gt;Euris&lt;/a&gt; : Audit et accompagnement SEO pour am&#233;liorer le positionnement de cet &lt;a href=&quot;https://www.euris.com/fr/hebergement-donnees-sante/cloud-sante-hebergement/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;H&#233;bergeur certifi&#233; HDS&quot;&gt;h&#233;bergeur certifi&#233; HDS&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://football-global-strategy.com/&quot; target=&quot;_bank&quot; itemprop=&quot;worksFor&quot; title=&quot;Football Global Strategy&quot;&gt;Football Global Strategy&lt;/a&gt; : D&#233;veloppement avec &lt;strong&gt;Laravel&lt;/strong&gt;, PHP, Javascript, Bootstrap, Ing&#233;nierie informatique.&lt;/li&gt;&lt;li&gt; &lt;a href='https://managerv2.cortext.net/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Cortext Manager&quot;&gt;API Cortext Manager&lt;/a&gt; : Cr&#233;ation d'une API pour acc&#233;der aux fonctions de la plateforme Cortext Manager dans le cadre du projet europ&#233;en d'infrastructure &lt;a href='https://risis2.eu/' class='spip_out' rel='external'&gt;RISIS 2&lt;/a&gt;.&lt;/li&gt;&lt;li&gt; &lt;a href='https://raid-transmauritania.com/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Raid TransMauritania&quot;&gt;Raid TransMauritania&lt;/a&gt; : Cr&#233;ation d'une comp&#233;tition et du site Web qui l'accompagne.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://fr.tightr.com/martin-fourcade/shop&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Boutique en ligne de Martin Fourcade&quot;&gt;Martin Fourcade, boutique officielle&lt;/a&gt; : D&#233;veloppement Web PHP, administration Linux et BDD, SEO, ing&#233;nierie informatique pour la conception et l'&#233;volution de la market place.&lt;/li&gt;&lt;li&gt; &lt;a href='https://gestemerge.cortext.net/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;GestEmerge&quot;&gt;GestEmerge&lt;/a&gt; : Cr&#233;ation du logo, du site Web et d'un outil communautaire avec Wordpress et Elgg.&lt;/li&gt;&lt;li&gt; &lt;a href='https://euspri2018.ifris.org/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Eu-SPRI Conference 2018 Paris&quot;&gt;Eu-SPRI Conference 2018&lt;/a&gt; : Site Web &lt;strong&gt;TailwindCSS&lt;/strong&gt;, mobile first, responsive design, seo.&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.summitcairn.com/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;Summit Cairn - Carnets de voyages&quot;&gt;Summit Cairn&lt;/a&gt; : Conseil en r&#233;f&#233;rencement Web, campagne SEA.&lt;/li&gt;&lt;li&gt; &lt;a href='https://sti2017.paris/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot; title=&quot;STI Conference 2017 Paris, Science, Technology and Innovation indicators&quot;&gt;STI Conference 2017&lt;/a&gt; : Site Web Wordpress, responsive design, seo.&lt;/li&gt;&lt;li&gt; &lt;u&gt;Community Management Tool&lt;/u&gt; : D&#233;veloppement de plugins pour le r&#233;seau social open source &lt;a href=&quot;https://elgg.org/&quot; class='spip_out' rel='external'&gt;ELGG&lt;/a&gt;, pour &lt;a href='http://www.arttic.eu/' class='spip_out' rel='external'&gt;Arttic&lt;/a&gt; puis pour SymPlace, startup que j'ai co-fond&#233;. &lt;strong&gt;Ing&#233;nierie informatique&lt;/strong&gt; pour la conception d'outils innovants.&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;Stage Image&lt;/u&gt; : Site Web e-commerce de vente en ligne, Prestashop + Wordpress, d&#233;veloppement de plugin Prestahop, r&#233;f&#233;rencement Web, SEO, Web s&#233;mantique&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;Nuits franciliennes&lt;/u&gt; : D&#233;veloppement site, conception du design du site, s&#233;curisation du site, mise en place du r&#233;f&#233;rencement, &lt;a href=&quot;http://fr.wikipedia.org/wiki/Web_s%C3%A9mantique&quot; class='spip_glossaire' rel='external'&gt;Web s&#233;mantique&lt;/a&gt; schema.org et microformats.org&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;https://frequence-running.com/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;Frequence Running&lt;/a&gt; : Formation au r&#233;f&#233;rencement Web / SEO / &lt;span itemprop=&quot;makesOffer&quot;&gt;Semantic Web&lt;/span&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.acbbtri.org/' target=&quot;_blank&quot; itemprop=&quot;memberOf&quot;&gt;acbbtri.org&lt;/a&gt; : Site d'actualit&#233; et communautaire, Wordpress + PhpBB + Responsive Design + Community management&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.raid-runners.fr/' target=&quot;_blank&quot; itemprop=&quot;memberOf&quot;&gt;raid-runners.fr&lt;/a&gt; : SPIP&lt;/li&gt;&lt;li&gt; Audit r&#233;f&#233;rencement &lt;a href='https://fugufurniture.com/' rel=&quot;nofollow&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;FUGU&lt;/a&gt; : conseil SEO / SMO&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;cicprp.fr&lt;/u&gt; : Cr&#233;ation de site Web en PHP, Javascript, Ajax, MySQL, Framework Zend, Administration Linux, Maintenance, R&#233;f&#233;rencement Web&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.traductrice-independante.fr/' target=&quot;_blank&quot;&gt;traductrice-independante.fr&lt;/a&gt; : Wordpress, R&#233;f&#233;rencement&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;A Fleur d'O&lt;/u&gt; : Site Web vitrine, Wordpress, apport d'une expertise SEO&lt;/li&gt;&lt;li&gt; &lt;a href='https://fugufurniture.com/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;FUGU&lt;/a&gt; : Site Web, Wordpress, R&#233;f&#233;rencement / SEO, PHP, Javascript, SSL, i18n, L10n&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;tentegonflablesecours.com&lt;/u&gt; : Installation et configuration Wordpress, s&#233;curisation du site, conseil en r&#233;f&#233;rencement SEO&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;domelodge.com&lt;/u&gt; : Installation et configuration Wordpress, s&#233;curisation du site&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;Ishtar Intelligence&lt;/u&gt; : Site web vitrine, HTML5, PHP, CSS3, R&#233;f&#233;rencement SEO, Web s&#233;mantique, JQuery&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;Sublime Day Event&lt;/u&gt; : Installation et configuration Wordpress, s&#233;curisation du site, conseil en r&#233;f&#233;rencement SEO&lt;/li&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;Vespa Mining&lt;/u&gt; : Portage sous Linux Debian, Apache, PHP/MySQL, JavaScript, Silex (Symfony 2) et d&#233;veloppement de la &lt;strong&gt;plateforme Web&lt;/strong&gt; de &lt;strong&gt;datamining&lt;/strong&gt; Vespa pour l'&lt;a href=&quot;https://www.inrae.fr/&quot; class='spip_out' rel='external'&gt;INRAE&lt;/a&gt;. Optimisation de requ&#234;tes SQL complexes.&lt;/li&gt;&lt;li&gt; &lt;a href=&quot;http://umr-lisis.fr/&quot; target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;UMR LISIS&lt;/a&gt; : Formation au d&#233;veloppement Web de la plateforme &lt;a href=&quot;https://www.cortext.net/&quot; class='spip_out' rel='external'&gt;Cortext&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Co-founder &amp; Lead Dev, Football Global Strategy&lt;/strong&gt;&lt;i&gt;, depuis octobre 2019&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href=&quot;https://football-global-strategy.com/&quot; target=&quot;_bank&quot; itemprop=&quot;memberOf&quot; title=&quot;Football Global Strategy&quot;&gt;Football Global Strategy&lt;/a&gt; : D&#233;veloppement avec Laravel, PHP, Javascript, Bootstrap&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Co-fondateur, symPlace&lt;/strong&gt;&lt;i&gt;, f&#233;vrier &#224; septembre 2019&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;u itemprop=&quot;memberOf&quot;&gt;symPlace&lt;/a&gt; : D&#233;veloppement de fonctionnalit&#233;s de collaboration pour la plateforme Web.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Lead Dev, tightR&lt;/strong&gt;&lt;i&gt;, juillet &#224; d&#233;cembre 2017&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;u itemprop=&quot;worksFor&quot;&gt;tightR&lt;/u&gt; : D&#233;veloppement d'une &lt;strong&gt;market place&lt;/strong&gt; pour Martin Fourcade, Conception, Architecture, API, PHP, Javascript, Paiement en ligne&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ing&#233;nieur Web, INRA&lt;/strong&gt;&lt;i&gt;, novembre 2014 &#224; novembre 2016&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;a href='https://managerv2.cortext.net/' target=&quot;_blank&quot; itemprop=&quot;worksFor&quot;&gt;RISIS Cortext&lt;/a&gt; : D&#233;veloppement de la &lt;strong&gt;plateforme Web&lt;/strong&gt; de &lt;strong&gt;datamining&lt;/strong&gt; &lt;a href=&quot;https://www.cortext.net/&quot; class='spip_out' rel='external'&gt;Cortext&lt;/a&gt;. &lt;a href=&quot;https://risis2.eu/&quot; class='spip_out' rel='external'&gt;RISIS&lt;/a&gt; est un &lt;a href=&quot;https://cordis.europa.eu/project/id/313082&quot; class='spip_out' rel='external'&gt;projet d'infrastructure dans le cadre du programme de recherche FP7&lt;/a&gt; de l'Union Europ&#233;enne. Utilisation des technologies : PHP, JavaScript, Meteor, NodeJS, MySQL, Apache, Vagrant, R, Silex/Symfony, Git&lt;/li&gt;&lt;li&gt; &lt;strong&gt;D&#233;veloppement d'API&lt;/strong&gt; d'acc&#232;s &#224; des entrep&#244;ts de donn&#233;es europ&#233;ens : &lt;a href=&quot;https://github.com/risis-eu/access-control-point&quot; class='spip_out' rel='external'&gt;Access Control Point&lt;/a&gt;, et de leur documentation sous &lt;a href=&quot;https://swagger.io/&quot; class='spip_out' rel='external'&gt;Swagger&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Ing&#233;nierie informatique&lt;/strong&gt; pour la conception de l'infrastructure regroupant les syst&#232;mes techniques de plusieurs universit&#233;s europ&#233;ennes.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ing&#233;nieur logiciel, Bouygues Telecom&lt;/strong&gt;&lt;i&gt;, juillet 2011 &#224; novembre 2012&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;veloppement des outils de mesure de la performance du r&#233;seau mobile&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span itemprop=&quot;makesOffer&quot;&gt;Data scientist&lt;/span&gt;, Bouygues Telecom&lt;/strong&gt;&lt;i&gt;, juillet 2007 &#224; juin 2011&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; R&#233;alisation d'&#233;tudes statistiques sur les comportements de contacts des clients&lt;/li&gt;&lt;li&gt; Utilisation de SAS, Hyp&#233;rion, Teradata, SQL Server&lt;/li&gt;&lt;li&gt; D&#233;veloppement d'outils de filtrage et pr&#233;-traitement de l'information en Java&lt;/li&gt;&lt;li&gt; Accompagnement des clients internes dans l'&#233;laboration des axes d'analyses&lt;/li&gt;&lt;li&gt; Restitution des r&#233;sultats dans les diff&#233;rents comit&#233;s internes&lt;/li&gt;&lt;li&gt; Mod&#233;lisation du comportement utilisateur et segmentation de la base clients&lt;/li&gt;&lt;li&gt; D&#233;veloppement de l'environnement de donn&#233;es&lt;/li&gt;&lt;li&gt; Mise en place d'hypercubes OLAP&lt;/li&gt;&lt;li&gt; Introduction d'indicateurs qualitatifs de suivi de la gestion de la relation client (CRM)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Mission de Responsable du reporting iPhone, Bouygues Telecom&lt;/strong&gt;&lt;i&gt;, mars &#224; juin 2009&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Interface avec Apple pour tout le sujet reporting d'activit&#233;&lt;/li&gt;&lt;li&gt; Coordination des chantiers internes de suivi des activit&#233;s li&#233;es &#224; l'iPhone&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Ing&#233;nieur informatique en &#233;ditique, Bouygues Telecom&lt;/strong&gt;&lt;i&gt;, juin 2003 &#224; juin 2007&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Conception graphique et fonctionnelle des documents de gestion sous Dialogue&lt;/li&gt;&lt;li&gt; D&#233;veloppement des &#233;volutions de tri des flux de donn&#233;es, comme TemPost, sous StreamWeaver et Unix&lt;/li&gt;&lt;li&gt; Programmation du pilote d'ordonnancement en Shell Unix et C&lt;/li&gt;&lt;li&gt; D&#233;veloppement d'outils de suivi et de synth&#232;se de l'activit&#233; en Java, PHP et MySQL&lt;/li&gt;&lt;li&gt; Pilotage des projets de composition&lt;/li&gt;&lt;li&gt; Support technique aupr&#232;s des &#233;quipes MOE, MOA, qualification, production, et prestataires &#233;ditiques&lt;/li&gt;&lt;li&gt; R&#233;daction de la documentation technique, validation des sp&#233;cifications techniques&lt;/li&gt;&lt;li&gt; Formation de l'&#233;quipe de composition&lt;/li&gt;&lt;li&gt; Veille technologique&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Recherche en informatique, Laboratoire d'Informatique de Paris 6&lt;/strong&gt;&lt;i&gt;, mars 2002 &#224; septembre 2002&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Sujet de recherche : &#171; D&#233;termination d'arbres d'&#233;valuations optimaux pour les syst&#232;mes de recommandations &#187;&lt;/li&gt;&lt;li&gt; Etat de l'art sur les techniques d'apprentissage artificiel&lt;/li&gt;&lt;li&gt; Mise en &#339;uvre d'algorithmes de filtrage collaboratif&lt;/li&gt;&lt;li&gt; Etude des crit&#232;res de controverse et de popularit&#233;&lt;/li&gt;&lt;li&gt; Programmation R, Java, et administration Unix&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span itemprop=&quot;makesOffer&quot;&gt;D&#233;veloppeur d'applications web&lt;/span&gt;, LIP6&lt;/strong&gt;&lt;i&gt;, mars 2001 &#224; juillet 2001&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Participation au projet de syst&#232;me de recommandation &#171; Film Conseil &#187;&lt;/li&gt;&lt;li&gt; Programmation html, java, servlet, et administration Unix&lt;/li&gt;&lt;li&gt; D&#233;veloppement de nouvelles fonctionnalit&#233;s m&#233;tier de conseil &#224; l'utilisateur&lt;/li&gt;&lt;li&gt; Am&#233;lioration de l'ergonomie de l'interface web&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Employ&#233; administratif, Axa Assurances&lt;/strong&gt;&lt;i&gt;, ao&#251;t 97, 98 et 99, juillet 2000&lt;/i&gt;&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;veloppement Visual Basic&lt;/li&gt;&lt;/ul&gt;
&lt;h2 class='h3 spip'&gt;Engagements &amp; Aventures&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href='https://www.raid-transmauritania.com/' class='spip_out' rel='external'&gt;Raid TransMauritania&lt;/a&gt;&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Participer &#224; l'organisation d'un raid annuel en Mauritanie (VTT et d&#233;sert)&lt;/li&gt;&lt;li&gt; Assurer la gestion technique, le soutien logistique et l'appui op&#233;rationnel sur le terrain&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Raids aventures multisport (depuis 2010)&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Constituer et guider des &#233;quipes sur des &#233;preuves longues et engag&#233;es&lt;/li&gt;&lt;li&gt; Exercer un leadership op&#233;rationnel en situation&lt;/li&gt;&lt;li&gt; Amener r&#233;guli&#232;rement les &#233;quipes au podium et &#224; la victoire&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Gestion &#233;lectronique de course&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Assurer le chronom&#233;trage sur des &#233;preuves de course d'orientation&lt;/li&gt;&lt;li&gt; Mettre en place la mat&#233;riel, suivre les donn&#233;es et publier les r&#233;sultats&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Exp&#233;ditions arctiques (Spitzberg, Groenland)&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Progresser en autonomie dans des milieux isol&#233;s&lt;/li&gt;&lt;li&gt; Evoluer et d&#233;cider dans un contexte incertain&lt;/li&gt;&lt;li&gt; Maintenir la dynamique du groupe et coop&#233;rer en conditions extr&#234;mes&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Exp&#233;ditions en haute altitude (Andes &#8212; P&#233;rou, Bolivie, Argentine)&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; R&#233;aliser des ascensions jusqu'&#224; tr&#232;s haute altitude&lt;/li&gt;&lt;li&gt; G&#233;rer acclimatation, mat&#233;riel et s&#233;curit&#233; en environnements exigeants&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Voyages &#224; v&#233;lo &#8212; itin&#233;rance longue distance&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Planifier et r&#233;aliser des travers&#233;es en autonomie sur plusieurs jours ou semaines&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Triathlon (depuis l'adolescence)&lt;/strong&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; D&#233;velopper endurance, discipline et gestion de l'effort long&lt;/li&gt;&lt;/ul&gt;
&lt;h2 class='h3 spip'&gt;Formation Continue&lt;/h2&gt;
&lt;p&gt;2023 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Monitorat de Raid Multisports BF3 (suite et fin)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2022 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Apache Nifi&lt;/li&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;a href=&quot;https://laravel-livewire.com/&quot; class='spip_out' rel='external'&gt;Livewire&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2021 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;a href=&quot;https://vuejs.org/&quot; class='spip_out' rel='external'&gt;Vue.js&lt;/a&gt;&lt;/span&gt;, framework Javascript&lt;/li&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;a href=&quot;https://tailwindcss.com/&quot; class='spip_out' rel='external'&gt;TailWind CSS&lt;/a&gt;&lt;/span&gt;, framework CSS&lt;/li&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;a href=&quot;https://tallstack.dev/&quot; class='spip_out' rel='external'&gt;TALL stack&lt;/a&gt;&lt;/span&gt;, (Tailwind Alpine.js Laravel Livewire), full-stack de d&#233;veloppement r&#233;actif&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2020 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;&lt;a href=&quot;https://laravel.com/&quot; class='spip_out' rel='external'&gt;Laravel&lt;/a&gt;&lt;/span&gt; avanc&#233;, framework de d&#233;veloppement PHP&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2019 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Laravel&lt;/li&gt;&lt;li&gt; Monitorat de Raid Multisports (en cours)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2018 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Initiateur Raid Multisports (BF2 Raid)&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2017 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Formation au marketing num&#233;rique Digital Active par Google&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2016 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Angular&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2015 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;Web Form Design and Development with jQuery&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2014 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;span itemprop=&quot;makesOffer&quot;&gt;R&#233;f&#233;rencement naturel&lt;/span&gt;, SEO/SMO&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2013 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Initiateur Triathlon BF5&lt;/li&gt;&lt;li&gt; Programmation Android avanc&#233;e&lt;/li&gt;&lt;li&gt; Programmation Android&lt;/li&gt;&lt;li&gt; Responsive Design / Media queries CSS3&lt;/li&gt;&lt;li&gt; Framework PHP Symfony 2&lt;/li&gt;&lt;li&gt; Pratique de la vente&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2012 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Administration de base de donn&#233;es Oracle 11g&lt;/li&gt;&lt;li&gt; Technologies GSM, UMTS, 3G, 4G et LTE&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2011 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Gestion de projet pour chef de projet&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2009 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; OBIEE : Oracle Business Intelligence Enterprise Edition&lt;/li&gt;&lt;li&gt; SQL Teradata&lt;/li&gt;&lt;li&gt; Dynamiser ses relations&lt;/li&gt;&lt;li&gt; Business Objects&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2008 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; SAS Programmation II : Manipulation de donn&#233;es avec l'&#233;tape Data&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2007 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Prise de parole en public&lt;/li&gt;&lt;li&gt; Formateur occasionnel&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2006 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Bases de la relation, ou comment faire du gagnant-gagnant&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2005 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Connaissance de la cha&#238;ne graphique, Ecole des Gobelins, Paris&lt;/li&gt;&lt;li&gt; Gestion de la couleur sur Exstream Dialogue, Astron - Lasercom&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2004 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Management de projet pour acteur projet&lt;/li&gt;&lt;li&gt; Exstream Dialogue Avanc&#233; (Administration), Astron - Lasercom&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2003 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; PitneyBowes StreamWeaver, Astron - Lasercom&lt;/li&gt;&lt;li&gt; Exstream Dialogue : Formation &#224; l'outil de composition Dialogue d'exStream, aujourd'hui &lt;a href=&quot;http://welcome.hp.com/country/fr/fr/prodserv/software/eda/products/dialogue-live.html&quot; rel=&quot;nofollow&quot;&gt;HP Dialogue Live&lt;/a&gt; par la soci&#233;t&#233; Astron - Lasercom, int&#233;gratrice du logiciel.&lt;/li&gt;&lt;/ul&gt;
&lt;h2 class='h3 spip'&gt;Formation Initiale&lt;/h2&gt;
&lt;p&gt;2002 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;Master en Intelligence Artificielle, Reconnaissance des Formes et Applications&lt;/strong&gt; &#224; l'&lt;a href=&quot;https://sciences.sorbonne-universite.fr/formation-sciences/masters/master-informatique/parcours-agents-distribues-robotique-recherche&quot; rel=&quot;nofollow&quot; target=&quot;_blank&quot; itemprop=&quot;alumniOf&quot;&gt;universit&#233; Paris 6&lt;/a&gt;, sp&#233;cialisation en &lt;strong&gt;Data Mining&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2001 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;Ma&#238;trise d'informatique&lt;/strong&gt; &#224; l'universit&#233; Paris 6, mention assez bien.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;2000 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Licence d'informatique &#224; l'universit&#233; Paris 6, mention bien.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;1999 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Deug de Math&#233;matiques, Informatiques et Applications aux Sciences &#224; l'universit&#233; Paris 6.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;1996 :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Baccalaur&#233;at S&#233;rie Scientifique, Lyc&#233;e Notre-Dame - Les Oiseaux, Verneuil (78)&lt;/li&gt;&lt;/ul&gt;
&lt;h2 class='h3 spip'&gt;Comp&#233;tences Informatiques&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;Langages :&lt;/u&gt; PHP, JavaScript, HTML5, Java, C, Prolog, R, CSS3, XML&lt;/p&gt; &lt;p&gt;&lt;u&gt;Frameworks :&lt;/u&gt; Laravel, Tailwind CSS, Vue.js, Silex/Symfony, jQuery, BootStrap&lt;/p&gt; &lt;p&gt;&lt;u&gt;Intelligence Artificielle :&lt;/u&gt; &lt;a href=&quot;http://fr.wikipedia.org/wiki/Aide_%C3%A0_la_d%C3%A9cision&quot; class='spip_glossaire' rel='external'&gt;Aide &#224; la d&#233;cision&lt;/a&gt;, fouille de donn&#233;es, d&#233;cision multicrit&#232;re, mod&#233;lisation des pr&#233;f&#233;rences, syst&#232;mes experts, r&#233;seaux de neurones, syst&#232;mes multi-agents, logique floue, programmation par contraintes, apprentissage num&#233;rique, &lt;a href=&quot;http://fr.wikipedia.org/wiki/arbre_de_d%C3%A9cision&quot; class='spip_glossaire' rel='external'&gt;arbre de d&#233;cision&lt;/a&gt;, traitement du langage naturel, algorithme et programmation g&#233;n&#233;tique, programmation lin&#233;aire, &lt;a href=&quot;http://fr.wikipedia.org/wiki/datamining&quot; class='spip_glossaire' rel='external'&gt;datamining&lt;/a&gt;, CART&lt;/p&gt; &lt;p&gt;&lt;u&gt;G&#233;nie Logiciel :&lt;/u&gt; Notation UML&lt;/p&gt; &lt;p&gt;&lt;u&gt;Syst&#232;mes d'exploitations :&lt;/u&gt; Linux, Windows, Android&lt;/p&gt; &lt;p&gt;&lt;u&gt;Bases de donn&#233;es :&lt;/u&gt; MySQL, PostgreSQL, Oracle, Teradata, Mongo, SqLite&lt;/p&gt; &lt;p&gt;&lt;u&gt;Internet :&lt;/u&gt; Serveur web Apache, TCP/IP, Lan, Routeur, serveur mail&lt;/p&gt; &lt;p&gt;&lt;u&gt;Image :&lt;/u&gt; Algorithmes de reconnaissance des formes, filtrage, segmentation&lt;/p&gt; &lt;p&gt;&lt;u&gt;Outils :&lt;/u&gt; Git, Office, NetBeans, PhotoShop / GIMP&lt;/p&gt; &lt;p&gt;&lt;u&gt;Divers :&lt;/u&gt; Ajax, CamlLex, CamlYacc, logiciel de datamining Clementine&lt;/p&gt; &lt;p&gt;&lt;u&gt;Editique :&lt;/u&gt; HP Dialogue (ExStream), StreamWeaver (Pitney Bowes)&lt;/p&gt; &lt;p&gt;&lt;u&gt;Business Intelligence :&lt;/u&gt; SAS, Business Objects, OBIEE, Hypercube OLAP&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Projets&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;Intelligence artificielle pour le jeu Othello :&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Mise en oeuvre d'algorithmes d'Intelligence Artificielle appliqu&#233;e au jeu Othello.
Utilisation des algorithmes alpha-beta et minimax.
Cr&#233;ation d'une fonction d&#233;terminant l'utilit&#233; esp&#233;r&#233;e d'un coup, bas&#233;e sur des notes associ&#233;es aux diff&#233;rentes actions possibles.&lt;/p&gt; &lt;p&gt;&lt;u&gt;Compilateur Mini-Langage (ML) :&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Cr&#233;ation d'un compilateur pour microprocesseur mips R3000, afin de traduire un mini langage cr&#233;&#233; pour l'occasion, vers le langage machine du mips. L'objectif est de r&#233;aliser simplement des d&#233;veloppements embarqu&#233;s sur les objets utilisant ce microprocesseur. Ce projet &#224; n&#233;cessit&#233; l'utilisation de CamlLex et CamlYacc, des biblioth&#232;ques d'analyse syntaxique en Caml.&lt;/p&gt; &lt;p&gt;&lt;u&gt;Syst&#232;me d'aide aux candidatures (CRM) :&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Cr&#233;ation d'un outil de gestion de la relation client, dont les prospects &#233;taient des entreprises, et le produit &#233;tait ma candidature. Les principales fonctionnalit&#233;s &#233;taient :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; assurer un suivi des &#233;tats des candidatures&lt;/li&gt;&lt;li&gt; mesurer les taux de consultations ou de retours&lt;/li&gt;&lt;li&gt; apporter une assistance &#224; la g&#233;n&#233;ration de lettre de motivation&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour cet outil j'ai d&#233;velopp&#233; un site web complet (Base de donn&#233;e, fonctions m&#233;tiers, ihm) en utilisant les technologies PHP/MySQL.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Langues&lt;/h2&gt;
&lt;p&gt;&lt;u&gt;Anglais :&lt;/u&gt; courant&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Loisirs&lt;/h2&gt;
&lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; Rafting / Kayak&lt;/li&gt;&lt;li&gt; Prestidigitation&lt;/li&gt;&lt;li&gt; Projets d'&#233;lectronique (Arduino / Raspberry Pi)&lt;/li&gt;&lt;/ul&gt;
&lt;h2 class='h3 spip'&gt;CV en PDF&lt;/h2&gt;&lt;/div&gt;
		
		</content:encoded>


		
		<enclosure url="https://www.orsal.fr/IMG/pdf/cv-ingenieur-ia-web-php-laravel-fullstack-guillaume-orsal.pdf" length="204028" type="application/pdf" />
		

	</item>
<item xml:lang="fr">
		<title>Audit SEO : d&#233;tecter les pages avec une balise noindex via script automatis&#233;</title>
		<link>https://www.orsal.fr/Audit-SEO-detecter-les-pages-avec</link>
		<guid isPermaLink="true">https://www.orsal.fr/Audit-SEO-detecter-les-pages-avec</guid>
		<dc:date>2024-12-08T14:05:07Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;En examinant la Google Search Console d'un site r&#233;cemment, j'ai remarqu&#233; que certaines pages &#233;taient non index&#233;es &#224; cause d'une balise noindex. Ces balises sont des balises meta . Comme je ne savais pas exactement quelles pages &#233;taient concern&#233;es, j'ai d&#233;cid&#233; de cr&#233;er un script simple pour parcourir le site et identifier toutes les pages contenant cette balise. Dans cet article, je partage avec vous ce script et explique comment l'utiliser pour d&#233;tecter les pages avec une balise noindex. Cela peut vous (...)&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Referencement-SEO-GEO" rel="directory"&gt;R&#233;f&#233;rencement SEO/GEO&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton69-81cfa.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff69-e4df4.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton69-81cfa.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;En examinant la Google Search Console d'un site r&#233;cemment, j'ai remarqu&#233; que certaines pages &#233;taient non index&#233;es &#224; cause d'une balise noindex. Ces balises sont des balises meta &lt;meta name=&quot;robots&quot; content=&quot;noindex&quot;&gt;. Comme je ne savais pas exactement quelles pages &#233;taient concern&#233;es, j'ai d&#233;cid&#233; de cr&#233;er un script simple pour parcourir le site et identifier toutes les pages contenant cette balise.&lt;/p&gt; &lt;p&gt;Dans cet article, je partage avec vous ce script et explique comment l'utiliser pour d&#233;tecter les pages avec une balise noindex. Cela peut vous &#234;tre utile si, comme moi, vous souhaitez corriger ce type de probl&#232;me pour am&#233;liorer l'indexation de votre site par les moteurs de recherche.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Introduction : identifier les barri&#232;res d'indexation&lt;/h2&gt;
&lt;p&gt;La balise &lt;strong&gt;noindex&lt;/strong&gt; est un &#233;l&#233;ment cl&#233; de la gestion du SEO. Elle signale aux moteurs de recherche que certaines pages ne doivent pas &#234;tre index&#233;es, ce qui peut impacter significativement votre visibilit&#233; organique si utilis&#233;e &#224; mauvais escient. Lors d'audits SEO, il est courant de d&#233;couvrir des balises noindex involontaires ou mal configur&#233;es qui nuisent &#224; l'indexation de pages strat&#233;giques.&lt;/p&gt; &lt;p&gt;Cet article pr&#233;sente une approche automatis&#233;e pour parcourir un site et identifier toutes les pages contenant une balise noindex. Cette technique est indispensable pour diagnostiquer les probl&#232;mes d'indexation signal&#233;s dans la Google Search Console et &#233;valuer si chaque balise noindex est justifi&#233;e.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Comprendre la balise noindex et ses impacts&lt;/h2&gt;
&lt;p&gt;La balise noindex est une directive du protocole &lt;strong&gt;robots&lt;/strong&gt; plac&#233;e dans la section &lt;strong&gt;&lt;head&gt;&lt;/strong&gt; d'une page HTML. Elle se pr&#233;sente sous la forme :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;meta name=&quot;robots&quot; content=&quot;noindex&quot; /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ou de mani&#232;re plus compl&#232;te :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;meta name=&quot;robots&quot; content=&quot;noindex, nofollow&quot; /&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Impact sur l'indexation&lt;/strong&gt; : Une page avec noindex est index&#233;e &lt;strong&gt;temporairement&lt;/strong&gt; par Google (pour v&#233;rifier la balise), puis &lt;strong&gt;supprim&#233;e des r&#233;sultats de recherche&lt;/strong&gt; apr&#232;s quelques semaines. Ce processus peut causer des fluctuations dans votre classement et votre couverture index&#233;e.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Quand noindex est justifi&#233;e&lt;/strong&gt; :
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Pages de test ou d&#233;veloppement
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Contenus en double (variantes de filtre, param&#232;tres d'URL)
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Pages archiv&#233;es ou d&#233;pr&#233;ci&#233;es intentionnellement
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Pages avec contenu sensible non destin&#233; au public&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Quand noindex pose probl&#232;me&lt;/strong&gt; :
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Appliqu&#233;e accidentellement &#224; des pages strat&#233;giques
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Pr&#233;-configur&#233;e sur un th&#232;me ou un CMS
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;sultant de migrations mal g&#233;r&#233;es
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Pr&#233;sente dans une feuille de style CSS appliqu&#233;e globalement&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Diagnostic : automatiser la d&#233;tection noindex&lt;/h2&gt;
&lt;p&gt;Plut&#244;t que d'inspecter manuellement chaque page, un script d'audit permet un diagnostic rapide et complet. Voici un script shell Linux qui t&#233;l&#233;charge votre site et identifie toutes les pages avec noindex.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Script de d&#233;tection noindex complet&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt; &lt;br /&gt; # ============================================&lt;br /&gt; # Script d'audit SEO : d&#233;tection des balises noindex&lt;br /&gt; # Utilisation : ./script.sh https://www.exemple.com [PROFONDEUR]&lt;br /&gt; # ============================================&lt;br /&gt; &lt;br /&gt; # V&#233;rifier si une URL a &#233;t&#233; fournie&lt;br /&gt; if [ -z &quot;$1&quot; ]; then&lt;br /&gt; echo &quot;Usage: $0 &lt;URL&gt; [PROFONDEUR]&quot;&lt;br /&gt; echo &quot;Exemple : $0 https://www.exemple.com 3&quot;&lt;br /&gt; exit 1&lt;br /&gt; fi&lt;br /&gt; &lt;br /&gt; SITE_URL=&quot;$1&quot;&lt;br /&gt; DEPTH=${2:-2} # Profondeur par d&#233;faut : 2&lt;br /&gt; OUTPUT_DIR=&quot;site_scan_$(date +%s)&quot;&lt;br /&gt; NOINDEX_FILE=&quot;noindex_pages_$(date +%Y%m%d_%H%M%S).txt&quot;&lt;br /&gt; &lt;br /&gt; # Cr&#233;er un r&#233;pertoire temporaire pour stocker les pages&lt;br /&gt; mkdir -p &quot;$OUTPUT_DIR&quot;&lt;br /&gt; echo &quot;[*] Cr&#233;ation du r&#233;pertoire : $OUTPUT_DIR&quot;&lt;br /&gt; echo &quot;[*] Profondeur de parcours : $DEPTH&quot;&lt;br /&gt; &lt;br /&gt; # T&#233;l&#233;charger le site avec wget&lt;br /&gt; # --mirror : mode miroir (t&#233;l&#233;charge r&#233;cursivement)&lt;br /&gt; # --convert-links : convertit les liens pour navigation locale&lt;br /&gt; # --adjust-extension : ajoute .html si n&#233;cessaire&lt;br /&gt; # --page-requisites : t&#233;l&#233;charge les ressources (CSS, JS, images)&lt;br /&gt; # --no-parent : n'explore pas les r&#233;pertoires parents&lt;br /&gt; # --level : limite la profondeur de r&#233;cursion&lt;br /&gt; echo &quot;[*] T&#233;l&#233;chargement du site en cours...&quot;&lt;br /&gt; wget --mirror \&lt;br /&gt; --convert-links \&lt;br /&gt; --adjust-extension \&lt;br /&gt; --page-requisites \&lt;br /&gt; --no-parent \&lt;br /&gt; --level=&quot;$DEPTH&quot; \&lt;br /&gt; &quot;$SITE_URL&quot; \&lt;br /&gt; -P &quot;$OUTPUT_DIR&quot; \&lt;br /&gt; --quiet&lt;br /&gt; &lt;br /&gt; # Rechercher les pages contenant la balise noindex&lt;br /&gt; echo &quot;[*] Analyse des pages pour d&#233;tecter noindex...&quot;&lt;br /&gt; find &quot;$OUTPUT_DIR&quot; -type f -name &quot;*.html&quot; | while read -r file; do&lt;br /&gt; # Regex expliqu&#233;e :&lt;br /&gt; # &lt;meta[^&gt;]* : ouverture de la balise meta (accepte tous les attributs)&lt;br /&gt; # name=&quot;robots&quot; : recherche l'attribut name avec la valeur robots&lt;br /&gt; # [^&gt;]* : accepte d'autres attributs (ex: http-equiv)&lt;br /&gt; # content=&quot;[^&quot;]*noindex : v&#233;rifie que noindex est dans l'attribut content&lt;br /&gt; &lt;br /&gt; if grep -qi '&lt;meta[^&gt;]*name=&quot;robots&quot;[^&gt;]*content=&quot;[^&quot;]*noindex' &quot;$file&quot;; then&lt;br /&gt; echo &quot;Page avec noindex trouv&#233;e : $file&quot;&lt;br /&gt; echo &quot;$file&quot; &gt;&gt; &quot;$NOINDEX_FILE&quot;&lt;br /&gt; fi&lt;br /&gt; done&lt;br /&gt; &lt;br /&gt; # Afficher les r&#233;sultats&lt;br /&gt; echo &quot;&quot;&lt;br /&gt; echo &quot;[*] R&#233;sultats :&quot;&lt;br /&gt; if [ -f &quot;$NOINDEX_FILE&quot; ]; then&lt;br /&gt; count=$(wc -l &lt; &quot;$NOINDEX_FILE&quot;)&lt;br /&gt; echo &quot;&#9888;&#65039; $count page(s) contenant une balise noindex d&#233;tect&#233;e(s)&quot;&lt;br /&gt; echo &quot;&#128196; Fichier de r&#233;sultats : $NOINDEX_FILE&quot;&lt;br /&gt; echo &quot;&quot;&lt;br /&gt; echo &quot;=== PAGES AVEC NOINDEX ===&quot;&lt;br /&gt; cat &quot;$NOINDEX_FILE&quot;&lt;br /&gt; else&lt;br /&gt; echo &quot;&#10003; Aucune balise noindex n'a &#233;t&#233; trouv&#233;e.&quot;&lt;br /&gt; fi&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Utilisation du script&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Rendre le script ex&#233;cutable&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;chmod +x script_noindex.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;2. Lancer l'audit&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Avec une profondeur par d&#233;faut (2 niveaux) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;./script_noindex.sh https://www.exemple.com&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Avec une profondeur personnalis&#233;e (ex : 4 niveaux pour un gros site) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;./script_noindex.sh https://www.exemple.com 4&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;3. Consulter les r&#233;sultats&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Le script g&#233;n&#232;re un fichier &lt;strong&gt;noindex_pages_YYYYMMDD_HHMMSS.txt&lt;/strong&gt; contenant la liste des pages affect&#233;es. Ouvrez ce fichier pour identifier les probl&#232;mes.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Interpr&#233;tation des r&#233;sultats et diagnostic&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Cas 1 : Pages intentionnellement en noindex&lt;/strong&gt;
Si vous trouvez des pages avec noindex que vous aviez volontairement marqu&#233;es, c'est normal. V&#233;rifiez simplement que chacune de ces pages m&#233;rite r&#233;ellement cette balise.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Cas 2 : Pages strat&#233;giques affect&#233;es&lt;/strong&gt;
Si le script d&#233;tecte noindex sur des pages que vous souhaitez indexer :
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; V&#233;rifiez la source du probl&#232;me : CMS, th&#232;me, configuration serveur, ou erreur humaine
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Supprimez ou modifiez la balise en &lt;strong&gt;noindex, nofollow&lt;/strong&gt; vers &lt;strong&gt;index, follow&lt;/strong&gt; ou supprimez-la compl&#232;tement
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Forcez une exploration Google en soumettant l'URL via la Search Console&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Cas 3 : Aucune balise noindex d&#233;tect&#233;e&lt;/strong&gt;
Excellent ! Mais assurez-vous que le site &#233;tait complet. V&#233;rifiez la profondeur utilis&#233;e et augmentez-la si certaines sections ne sont pas explor&#233;es.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Limitations et consid&#233;rations importantes&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Respect de robots.txt&lt;/strong&gt; : Le script wget respecte le fichier &lt;strong&gt;robots.txt&lt;/strong&gt; de votre site. Si des pages sont bloqu&#233;es par robots.txt, elles ne seront pas t&#233;l&#233;charg&#233;es. Modifiez la commande wget avec &lt;strong&gt;&#8212;execute robots=off&lt;/strong&gt; si vous voulez ignorer robots.txt (&#224; utiliser avec prudence).&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Sites tr&#232;s volumineux&lt;/strong&gt; : Pour les sites avec des milliers de pages, augmenter la profondeur peut &#234;tre tr&#232;s long. Envisagez de limiter le domaine ou d'utiliser des crawleurs SEO professionnels comme Screaming Frog pour les audits complets.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Pages dynamiques&lt;/strong&gt; : Ce script capture le HTML statique. Les pages g&#233;n&#233;r&#233;es en JavaScript c&#244;t&#233; client ne seront pas correctement analys&#233;es. Pour les sites single-page application (SPA), utilisez des outils comme Puppeteer ou Playwright.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Authentification requise&lt;/strong&gt; : Si votre site demande une authentification, le script ne peut pas y acc&#233;der. Vous devrez ajuster wget pour fournir des identifiants ou tester manuellement.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Bonnes pratiques pour la gestion de noindex&lt;/h2&gt;
&lt;p&gt;1. &lt;strong&gt;Documentez vos d&#233;cisions&lt;/strong&gt; : Maintenez un registre des pages intentionnellement en noindex et des raisons sous-jacentes
2. &lt;strong&gt;Auditez r&#233;guli&#232;rement&lt;/strong&gt; : Relancez ce script trimestriellement pour d&#233;tecter toute d&#233;gradation
3. &lt;strong&gt;Validez en Search Console&lt;/strong&gt; : Utilisez l'onglet &#171; Couverture &#187; pour croiser les r&#233;sultats et identifier les pages non index&#233;es pour d'autres raisons
4. &lt;strong&gt;Privil&#233;giez disallow dans robots.txt&lt;/strong&gt; : Pour les pages vraiment priv&#233;es, &lt;strong&gt;robots.txt&lt;/strong&gt; est plus appropri&#233; que noindex
5. &lt;strong&gt;Testez avant d&#233;ploiement&lt;/strong&gt; : Utilisez une branche de staging pour valider vos changements avant production&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;La d&#233;tection automatis&#233;e des balises noindex est une &#233;tape critique d'un audit SEO complet. Ce script vous permet d'identifier rapidement les probl&#232;mes d'indexation et de prendre les mesures correctives n&#233;cessaires. En combinant cet outil avec la Search Console et une bonne compr&#233;hension des impacts, vous pouvez optimiser consid&#233;rablement votre couverture index&#233;e et votre visibilit&#233; organique.&lt;/p&gt; &lt;p&gt;L'important est de maintenir un &#233;quilibre : bloquer intentionnellement ce qui doit l'&#234;tre, tout en assurant que vos pages strat&#233;giques restent pleinement accessibles aux moteurs de recherche.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Automatisation de la reconnexion du clavier apr&#232;s la veille sous Linux</title>
		<link>https://www.orsal.fr/Automatisation-de-la-reconnexion</link>
		<guid isPermaLink="true">https://www.orsal.fr/Automatisation-de-la-reconnexion</guid>
		<dc:date>2024-06-23T13:27:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Sur mon laptop, sous Ubuntu, parfois apr&#232;s la sortie de veille je rencontre des probl&#232;mes avec mon clavier qui ne r&#233;pond plus. Impossible de le d&#233;brancher / rebrancher &#233;videmment et je suis oblig&#233; de passer par un clavier externe pour le relancer. Voici la solution d'automatisation mise en place pour la reconnexion. Une analyse longue et minutieuse des logs syst&#232;me m'a permis d'identifier le message d'erreur suivant lorsque mon clavier cessait de fonctionner : Failed to enable keyboard on (...)&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton68-a7855.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff68-83989.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton68-a7855.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Sur mon laptop, sous Ubuntu, parfois apr&#232;s la sortie de veille je rencontre des probl&#232;mes avec mon clavier qui ne r&#233;pond plus. Impossible de le d&#233;brancher / rebrancher &#233;videmment et je suis oblig&#233; de passer par un clavier externe pour le relancer. Voici la solution d'automatisation mise en place pour la reconnexion.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Une analyse longue et minutieuse des logs syst&#232;me m'a permis d'identifier le message d'erreur suivant lorsque mon clavier cessait de fonctionner :
&lt;strong&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;Failed to enable keyboard on isa0060/serio0&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Si je ne veux plus me retrouver bloqu&#233; au r&#233;veil de l'appareil, il va falloir mettre en place un script qui va d&#233;tecter et corriger l'erreur automatiquement.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Cr&#233;er un script de surveillance et de reconnexion&lt;/h2&gt;
&lt;p&gt;La premi&#232;re &#233;tape consiste &#224; cr&#233;er un script qui v&#233;rifiera les erreurs de clavier dans les logs du noyau (dmesg) et reconnectera le clavier si n&#233;cessaire.&lt;/p&gt; &lt;p&gt;Pour &#233;viter de relancer le clavier ind&#233;finiment, il faut v&#233;rifier que la d&#233;connexion est intervenue apr&#232;s la derni&#232;re relance du clavier, d'o&#249; le stockage de la date de derni&#232;re relance dans &lt;code class='spip_code' dir='ltr'&gt;/var/log/last_keyboard_reconnect&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Cr&#233;er le script avec la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /usr/local/bin/check_keyboard.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Puis y ins&#233;rer le code suivant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt; &lt;br /&gt; # Chemin du fichier de log&lt;br /&gt; LOGFILE=&quot;/var/log/keyboard_monitor.log&quot;&lt;br /&gt; &lt;br /&gt; # Fichier pour stocker l'heure de la derni&#232;re reconnexion&lt;br /&gt; LAST_RECONNECT_FILE=&quot;/var/log/last_keyboard_reconnect&quot;&lt;br /&gt; &lt;br /&gt; # Initialisation de la date de derni&#232;re reconnexion&lt;br /&gt; last_reconnect=0&lt;br /&gt; &lt;br /&gt; # Test s'il y a d&#233;j&#224; eu des d&#233;connexions du clavier dans la session courante&lt;br /&gt; if sudo dmesg | grep -q &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot;;&lt;br /&gt; then&lt;br /&gt; # Oui, alors on r&#233;cup&#232;re la date de derni&#232;re connexion depuis le fichier&lt;br /&gt; if [ -f $LAST_RECONNECT_FILE ]; then&lt;br /&gt; last_reconnect=$(cat $LAST_RECONNECT_FILE)&lt;br /&gt; fi&lt;br /&gt; else&lt;br /&gt; # Non, alors on initialise le fichier contenant la date de derni&#232;re reconnexion&lt;br /&gt; echo 0 &gt; $LAST_RECONNECT_FILE&lt;br /&gt; fi&lt;br /&gt; &lt;br /&gt; # V&#233;rifier les erreurs de clavier dans dmesg depuis la derni&#232;re reconnexion&lt;br /&gt; if sudo dmesg | awk -v ref=&quot;$last_reconnect&quot; '{&lt;br /&gt; # Extraire le timestamp en enlevant les crochets&lt;br /&gt; match($0, /^\[([0-9]+\.[0-9]+)\]/, arr)&lt;br /&gt; timestamp = arr[1]&lt;br /&gt; &lt;br /&gt; # Comparer le timestamp avec la r&#233;f&#233;rence&lt;br /&gt; if (timestamp &gt; ref) {&lt;br /&gt; print $0&lt;br /&gt; }&lt;br /&gt; }' | grep -q &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot; ; then&lt;br /&gt; &lt;br /&gt; # Reconnexion du clavier&lt;br /&gt; sudo sh -c 'echo -n &quot;reconnect&quot; &gt; /sys/bus/serio/devices/serio0/drvctl'&lt;br /&gt; &lt;br /&gt; # Mise &#224; jour de la date de derni&#232;re reconnexion&lt;br /&gt; last_error_time=$(sudo dmesg | grep &quot;atkbd serio0: Failed to enable keyboard on isa0060/serio0&quot; | tail -1 | awk '{print substr($1, 2, length($1) - 2)}')&lt;br /&gt; echo $last_error_time &gt; $LAST_RECONNECT_FILE&lt;br /&gt; &lt;br /&gt; # Log&lt;br /&gt; echo &quot;$(date +%Y%m%d-%T);$last_error_time;Clavier reconnect&#233;&quot; &gt;&gt; $LOGFILE&lt;br /&gt; else&lt;br /&gt; echo &quot;$(date +%Y%m%d-%T);$last_reconnect;Pas de probl&#232;me d&#233;tect&#233;&quot; &gt;&gt; $LOGFILE&lt;br /&gt; fi&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;La reconnexion logiciel du clavier s'effectue dans le script par la commande :&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sh -c 'echo -n &quot;reconnect&quot; &gt; /sys/bus/serio/devices/serio0/drvctl'&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;N'oubliez pas de rendre le script ex&#233;cutable :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo chmod +x /usr/local/bin/check_keyboard.sh&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Cr&#233;er un hook systemd-sleep pour la sortie de veille&lt;/h2&gt;
&lt;p&gt;Pour moi le probl&#232;me se pr&#233;sente en sortie de veille de l'ordinateur. Je vais donc utiliser le hook de systemd adapt&#233; : systemd-sleep&lt;/p&gt; &lt;p&gt;Pour cela, je vais placer un script dans le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;/lib/systemd/system-sleep/&lt;/code&gt;. Assurez-vous qu'il existe et sinon vous pouvez le cr&#233;er par la commande :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mkdir -p /lib/systemd/system-sleep/&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'ensemble des scripts dans ce r&#233;pertoire sont ex&#233;cut&#233;s &#224; chaque mise en veille et sorte de veille. Je vais donc y cr&#233;er un script :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo vi /lib/systemd/system-sleep/keyboard_resume.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Lors de l'appel de ce script, il re&#231;oit plusieurs param&#232;tre. Le premier param&#232;tre &lt;code class='spip_code' dir='ltr'&gt;$1&lt;/code&gt; contient soit la valeur &lt;code class='spip_code' dir='ltr'&gt;pre&lt;/code&gt; indiquant la mise en veille, soit la valeur &lt;code class='spip_code' dir='ltr'&gt;post&lt;/code&gt; indiquant la sortie de la veille. Voici donc le script pour jouer le script de relancer du clavier au r&#233;veil de l'ordinateur :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#!/bin/bash&lt;br /&gt; &lt;br /&gt; case $1 in&lt;br /&gt; post)&lt;br /&gt; /usr/local/bin/check_keyboard.sh&lt;br /&gt; ;;&lt;br /&gt; esac&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ne pas oublier de rendre le script ex&#233;cutable.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo chmod +x /lib/systemd/system-sleep/keyboard_resume.sh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'analyse du fichier de log &lt;code class='spip_code' dir='ltr'&gt;/var/log/keyboard_monitor.log&lt;/code&gt; apr&#232;s un r&#233;veil de l'ordinateur permettra de v&#233;rifier que le script s'est bien ex&#233;cut&#233;, et au besoin a reconnect&#233; le clavier.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Gestion des disques sous Linux &#8211; m&#233;mo de commandes shell (Ubuntu &amp; Debian)</title>
		<link>https://www.orsal.fr/Gestion-des-disques-sous-Linux</link>
		<guid isPermaLink="true">https://www.orsal.fr/Gestion-des-disques-sous-Linux</guid>
		<dc:date>2022-12-27T20:32:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Une compilation de commandes shell Linux que j'utilise r&#233;guli&#232;rement pour la gestion de disques et partitions (Ubuntu/Debian).&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Ubuntu-Debian-Linux" rel="directory"&gt;Ubuntu, Debian, Linux&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton67-6785f.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff67-a1011.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton67-6785f.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Une compilation de commandes shell Linux que j'utilise r&#233;guli&#232;rement pour la gestion de disques et partitions (Ubuntu/Debian).&lt;/p&gt; &lt;p&gt;Elle ne se veut ni exhaustive, ni p&#233;dagogique, mais sert de m&#233;mo technique bas&#233; sur mon exp&#233;rience de terrain en d&#233;veloppement et administration de syst&#232;mes Linux.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Cette pratique s'inscrit dans un usage quotidien de Linux depuis Debian Slink, pour le d&#233;veloppement et la mise en production de projets web Laravel et de travaux en intelligence artificielle.&lt;/p&gt; &lt;p&gt;Elles sont regroup&#233;es par th&#233;matique :&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#find-disk-part&quot; class='spip_ancre'&gt;Identifier disques et partitions disponibles sur l'ordinateur&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskRepair&quot; class='spip_ancre'&gt;R&#233;parer un disque d&#233;fectueux&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskCheck&quot; class='spip_ancre'&gt;Automatiser les contr&#244;les&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#gptDisk&quot; class='spip_ancre'&gt;Fdisk pour disques GPT&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskFormat&quot; class='spip_ancre'&gt;Formatage d'un disque vierge&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#luksPartition&quot; class='spip_ancre'&gt;Partitions chiffr&#233;es avec LUKS&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#fat32repair&quot; class='spip_ancre'&gt;R&#233;parer une cl&#233; usb FAT32 en lecture seule sous Linux&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diskspace&quot; class='spip_ancre'&gt;Voir l'espace disque utilis&#233;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#smart&quot; class='spip_ancre'&gt;V&#233;rifier l'&#233;tat SMART d'un disque&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#mount&quot; class='spip_ancre'&gt;Monter / d&#233;monter une partition&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#diag&quot; class='spip_ancre'&gt;Diagnostics bas niveau&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#inspect&quot; class='spip_ancre'&gt;Inspection ext* sans montage&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dos&quot; class='spip_ancre'&gt;FAT32 r&#233;calcitrant&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#part&quot; class='spip_ancre'&gt;Quand la table de partitions ne veut rien savoir&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dd&quot; class='spip_ancre'&gt;R&#233;cup&#233;ration de donn&#233;es&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#forensic&quot; class='spip_ancre'&gt;Forensic&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#header&quot; class='spip_ancre'&gt;Analyse du header GPT&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#carving&quot; class='spip_ancre'&gt;Carving manuel&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#debugfs&quot; class='spip_ancre'&gt;Analyse du journal ext4 avec debugfs&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#inode&quot; class='spip_ancre'&gt;R&#233;cup&#233;ration d'inodes supprim&#233;s&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#perf&quot; class='spip_ancre'&gt;Analyse des performances disque&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#malware&quot; class='spip_ancre'&gt;Recherche de malware au niveau boot (MBR / GPT)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#mbr&quot; class='spip_ancre'&gt;R&#233;initialisation du code d'amor&#231;age (MBR)&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#sshfs&quot; class='spip_ancre'&gt;Monter un syst&#232;me de fichiers distant via SSH&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;#dvd&quot; class='spip_ancre'&gt;G&#233;rer le chariot du lecteur DVD&lt;/a&gt;&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;find-disk-part&quot;&gt;&lt;/a&gt;Identifier disques et partitions disponibles sur l'ordinateur&lt;/h2&gt;
&lt;p&gt;Avant toute op&#233;ration sur un disque ou une partition, il est utile de conna&#238;tre leur disposition exacte et leurs caract&#233;ristiques.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Liste des disque physiques :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo lshw -class disk&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Informations d&#233;taill&#233;es sur les partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo fdisk -l&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Liste des partitions, types et points de montage :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo blkid -o list -c /dev/null&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;ou, plus lisible dans la plupart des cas :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -o NAME,SIZE,FSTYPE,TYPE,PTTYPE,LABEL,PARTLABEL,MOUNTPOINT,UUID&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ces commandes permettent d'identifier pr&#233;cis&#233;ment :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; les disques physiques&lt;/li&gt;&lt;li&gt; les partitions&lt;/li&gt;&lt;li&gt; leur type de syst&#232;me de fichiers&lt;/li&gt;&lt;li&gt; leur point de montage&lt;/li&gt;&lt;li&gt; leur UUID&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ces informations sont n&#233;cessaires pour cibler correctement un disque ou une partition dans les op&#233;rations suivantes.&lt;/p&gt; &lt;p&gt;Dans la suite, j'utiliserai les notations suivantes :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; /dev/sd&lt;strong&gt;X&lt;/strong&gt; pour un disque&lt;/li&gt;&lt;li&gt; /dev/sd&lt;strong&gt;XN&lt;/strong&gt; pour une partition&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;o&#249; &lt;strong&gt;X&lt;/strong&gt; est la lettre du disque et &lt;strong&gt;N&lt;/strong&gt; le num&#233;ro de partition.&lt;/p&gt; &lt;p&gt;Exemple : /dev/sda1&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskRepair&quot;&gt;&lt;/a&gt;R&#233;parer un disque d&#233;fectueux&lt;/h2&gt;
&lt;p&gt;Il existe de nombreuses approches face &#224; un disque d&#233;fectueux. Voici celles que j'utilise ponctuellement.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Trouver des secteurs d&#233;fectueux sur un disque.&lt;/p&gt; &lt;p&gt;&#9888;&#65039; Cette op&#233;ration est tr&#232;s longue : la commande parcourt l'ensemble des secteurs du disque et &#233;crit la liste des secteurs d&#233;fectueux dans un fichier &lt;code class='spip_code' dir='ltr'&gt;badsectors.txt&lt;/code&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo badblocks -v /dev/sdXN &gt; badsectors.txt&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Marquer les secteurs erron&#233;s d'un disque afin qu'ils ne soient plus utilis&#233;s&lt;/p&gt; &lt;p&gt;Les secteurs d&#233;fectueux sont alors exclus, ce qui limite les risques de corruption ou de perte de donn&#233;es.&lt;/p&gt; &lt;p&gt;NB : la partition doit &#234;tre d&#233;mont&#233;e au pr&#233;alable via la commande :&lt;code class='spip_code' dir='ltr'&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Le fichier &lt;code class='spip_code' dir='ltr'&gt;badsectors.txt&lt;/code&gt; est le fichier g&#233;n&#233;r&#233; par la commande &lt;strong&gt;badblocks&lt;/strong&gt;.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2fsck -l badsectors.txt /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;fsck&lt;/strong&gt; est l'utilitaire de v&#233;rification des syst&#232;mes de fichiers sous Linux.
&lt;strong&gt;e2fsck&lt;/strong&gt; en est la version d&#233;di&#233;e aux syst&#232;mes de fichiers de type &lt;i&gt;ext2/ext3/ext4&lt;/i&gt;.&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; R&#233;cup&#233;rer les informations du dernier contr&#244;le &lt;strong&gt;fsck&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -l /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Pour extraire uniquement les informations li&#233;es &#224; la fr&#233;quence d'analyse des disques et &#224; l'historique des contr&#244;les :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -l /dev/sdXN | grep -E &quot;Last\ c|Max|Mount&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskCheck&quot;&gt;&lt;/a&gt;Automatiser les contr&#244;les&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;fsck&lt;/strong&gt; peut &#234;tre lanc&#233; manuellement, mais il est &#233;galement possible de planifier des contr&#244;les automatiques apr&#232;s un certain nombre de red&#233;marrages.&lt;/p&gt; &lt;p&gt;La commande suivante force un contr&#244;le &lt;strong&gt;fsck&lt;/strong&gt; de la partition &lt;strong&gt;/dev/sdXN&lt;/strong&gt; tous les 10 red&#233;marrages :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo tune2fs -c 10 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Une valeur de &lt;strong&gt;-1&lt;/strong&gt; d&#233;sactive fsck et ses contr&#244;les automatiques.
&lt;br /&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Une valeur de &lt;strong&gt;1&lt;/strong&gt; force un contr&#244;le &#224; chaque d&#233;marrage.&lt;/p&gt; &lt;p&gt;Si la partition est mont&#233;e via le fichier &lt;code class='spip_code' dir='ltr'&gt;/etc/fstab&lt;/code&gt;, il convient &#233;galement de v&#233;rifier la ligne correspondante &#224; la partition. Un dernier champ positionn&#233; &#224; &lt;strong&gt;0&lt;/strong&gt; d&#233;sactive le contr&#244;le au d&#233;marrage.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://linuxconfig.org/how-to-force-fsck-to-check-filesystem-after-system-reboot-on-linux&quot; class='spip_out' rel='external'&gt;En savoir plus...&lt;/a&gt;&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;gptDisk&quot;&gt;&lt;/a&gt;Fdisk pour disques GPT&lt;/h2&gt;
&lt;p&gt;Les disques modernes utilisent souvent une table de partitions &lt;strong&gt;GPT&lt;/strong&gt;, incompatible avec &lt;i&gt;fdisk&lt;/i&gt; : on utilise alors &lt;i&gt;gdisk&lt;/i&gt; pour manipuler correctement les partitions.&lt;/p&gt; &lt;p&gt;Installation de l'outil :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt; sudo apt-get install gdisk&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskFormat&quot;&gt;&lt;/a&gt;Formatage d'un disque vierge&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cr&#233;ation de la partition :&lt;/p&gt; &lt;p&gt;&#8212; Lancer l'outil de gestion des partitions :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo parted /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Dans &lt;strong&gt;parted&lt;/strong&gt;, ex&#233;cuter les commandes suivantes.&lt;/p&gt; &lt;p&gt;&#8212; Cr&#233;ation de la table de partition &lt;strong&gt;GPT&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mklabel gpt&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Cr&#233;ation d'une partition primaire &lt;strong&gt;ext4&lt;/strong&gt; occupant l'ensemble du disque :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;mkpart primary ext4 2048s 100%&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; V&#233;rifier la table de partitions :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;print&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&#8212; Quitter &lt;strong&gt;parted&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;quit&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cr&#233;ation du syst&#232;me de fichier &lt;strong&gt;ext4&lt;/strong&gt; :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mkfs.ext4 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Attribution d'un label &#224; la partition :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2label /dev/sdXN &lt;nom&gt;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;luksPartition&quot;&gt;&lt;/a&gt;Partitions chiffr&#233;es avec LUKS&lt;/h2&gt;
&lt;p&gt;Lorsqu'un disque ou une partition est chiffr&#233; (par exemple pour des donn&#233;es sensibles), il n'appara&#238;t pas comme un FS classique et n&#233;cessite une &#233;tape d'identification distincte.&lt;/p&gt; &lt;p&gt;Certaines partitions peuvent &#234;tre chiffr&#233;es avec &lt;strong&gt;LUKS&lt;/strong&gt; afin de prot&#233;ger les donn&#233;es.&lt;/p&gt; &lt;p&gt;Voici comment identifier les volumes chiffr&#233;s actuellement pr&#233;sents sur le syst&#232;me :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dmsetup ls --target crypt&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;fat32repair&quot;&gt;&lt;/a&gt;R&#233;parer une cl&#233; usb FAT32 en lecture seule sous linux&lt;/h2&gt;
&lt;p&gt;Une cl&#233; USB mont&#233;e en lecture seule emp&#234;che toute modification ou suppression de fichiers. Ce comportement est fr&#233;quent sur des supports &lt;strong&gt;FAT32&lt;/strong&gt; pr&#233;sentant des erreurs.&lt;/p&gt; &lt;p&gt;Ce cas se rencontre souvent lorsque le syst&#232;me de fichiers &lt;i&gt;FAT32&lt;/i&gt; devient incoh&#233;rent apr&#232;s une suppression ou un retrait non propre de la cl&#233; USB.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; V&#233;rifier le type de syst&#232;me de fichiers et identifier la partition&lt;/p&gt; &lt;p&gt;Lister les p&#233;riph&#233;riques &lt;strong&gt;FAT32&lt;/strong&gt; afin d'identifier la partition concern&#233;e :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -f |grep FAT32&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Ou, si l'identifiant est d&#233;j&#224; connu :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk -f /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter la cl&#233; USB&lt;/p&gt; &lt;p&gt;La partition doit &#234;tre d&#233;mont&#233;e avant toute tentative de r&#233;paration :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lancer la r&#233;paration du syst&#232;me de fichiers &lt;strong&gt;FAT32&lt;/strong&gt;&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -w -r -l -a -v -t /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;avec les param&#232;tres suivants :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;-w&lt;/strong&gt; : &#233;crit les corrections sur le disque&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-r&lt;/strong&gt; : interaction lors de la r&#233;paration&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-l&lt;/strong&gt; : liste les fichiers pr&#233;sentant des erreurs&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-a&lt;/strong&gt; : corrige automatiquement les erreurs&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-v&lt;/strong&gt; : mode verbeux&lt;/li&gt;&lt;li&gt; &lt;strong&gt;-t&lt;/strong&gt; : marque les clusters d&#233;fectueux dans la FAT&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Une fois la r&#233;paration termin&#233;e, d&#233;brancher puis rebrancher physiquement la cl&#233; USB.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diskspace&quot;&gt;&lt;/a&gt;Voir l'espace disque utilis&#233;&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Espace utilis&#233; / disponible par syst&#232;me de fichiers :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;df -h&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Espace occup&#233; par r&#233;pertoire (taille) :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;du -sh /chemin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les points de montage :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;findmnt&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;smart&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;V&#233;rifier l'&#233;tat SMART d'un disque&lt;/h2&gt;
&lt;p&gt;La plupart des disques supportent SMART : on peut obtenir les donn&#233;es d'&#233;tat :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo smartctl -a /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(Il faut installer : smartmontools)&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;mount&quot;&gt;&lt;/a&gt;Monter / d&#233;monter une partition&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter une partition :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount /dev/sdXN /point/de/montage&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo umount /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;diag&quot;&gt;&lt;/a&gt;Diagnostics bas niveau (quand &#231;a commence &#224; sentir mauvais)&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire l'ensemble d'un disque sans le monter (d&#233;tection de lenteurs ou d'erreurs E/S) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/null bs=1M status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher les erreurs disque c&#244;t&#233; noyau :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dmesg | grep -i -E &quot;error|fail|ata|i/o&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;inspect&quot;&gt;&lt;/a&gt;Inspection ext* sans montage&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les m&#233;tadonn&#233;es compl&#232;tes d'un syst&#232;me de fichiers ext* :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dumpe2fs /dev/sdXN | less&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les superblocks disponibles :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dumpe2fs /dev/sdXN | grep -i superblock&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;parer un syst&#232;me de fichiers &#224; partir d'un superblock alternatif :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo e2fsck -b 32768 /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Les syst&#232;mes de fichiers &lt;i&gt;ext*&lt;/i&gt; disposent de superblocks alternatifs utilisables en cas de corruption.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;dos&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;FAT32 r&#233;calcitrant (cas d&#233;sesp&#233;r&#233;s)&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;paration automatique non interactive :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -a -w -v /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;&#233;criture du boot sector FAT :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dosfsck -b /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;part&quot;&gt;&lt;/a&gt;Quand la table de partitions ne veut rien savoir&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Forcer la relecture de la table de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo partprobe /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo blockdev --rereadpt /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;dd&quot;&gt;&lt;/a&gt;R&#233;cup&#233;ration de donn&#233;es (old school)&lt;/h2&gt;
&lt;p&gt;Attention la commande &lt;strong&gt;dd&lt;/strong&gt; ne v&#233;rifie rien et n'avertit pas. Une erreur de p&#233;riph&#233;rique (&lt;i&gt;if=&lt;/i&gt; / &lt;i&gt;of=&lt;/i&gt;) entra&#238;ne une perte de donn&#233;es imm&#233;diate et irr&#233;versible.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Copier un disque en ignorant les erreurs :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/sdY conv=noerror,sync status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Variante plus robuste avec journal de r&#233;cup&#233;ration :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo ddrescue /dev/sdX /dev/sdY rescue.log&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;p&gt;&lt;a id=&quot;forensic&quot;&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Forensic&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Cloner un disque vers une image brute :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=image.raw bs=4M status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner une image disque sans la monter :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Associer une image disque &#224; un p&#233;riph&#233;rique loop :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo losetup -fP image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;i&gt;Note :&lt;/i&gt; un &lt;strong&gt;p&#233;riph&#233;rique loop&lt;/strong&gt; permet de traiter un fichier image comme un p&#233;riph&#233;rique bloc.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les p&#233;riph&#233;riques loop actifs :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;losetup -a&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner les partitions d&#233;tect&#233;es dans l'image :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsblk /dev/loopX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire un secteur pr&#233;cis (ex. MBR / GPT header) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire un secteur &#224; un offset donn&#233; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=2048 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter une partition d'image disque via offset :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount -o loop,ro,offset=1048576 image.raw /mnt/forensic&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(offset = d&#233;but de partition en octets)&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter en lecture seule (forensic safe) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo mount -o ro,noload /dev/loopXpY /mnt/forensic&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Identifier le type de donn&#233;es pr&#233;sentes :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire les cha&#238;nes lisibles (recherche d'artefacts) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings image.raw | less&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Recherche cibl&#233;e (ex. mots-cl&#233;s) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings image.raw | grep -i &quot;password&quot;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Analyse et r&#233;cup&#233;ration de tables de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo testdisk image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraction de fichiers sans table de partitions :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo photorec image.raw&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;header&quot;&gt;&lt;/a&gt;Analyse du header GPT (primaire / secondaire)&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile lorsque la table de partitions GPT est corrompue ou incoh&#233;rente, mais que le disque contient encore des donn&#233;es exploitables. L'objectif est de v&#233;rifier l'&#233;tat du header GPT principal et de son backup, et de d&#233;terminer lequel peut servir de r&#233;f&#233;rence pour une restauration.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT primaire (LBA 1) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT secondaire (dernier secteur du disque) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=$(($(blockdev --getsz /dev/sdX)-1)) count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Sauvegarder et comparer les deux headers :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 of=gpt_primary.bin&lt;br /&gt; sudo dd if=/dev/sdX bs=512 skip=$(($(blockdev --getsz /dev/sdX)-1)) count=1 of=gpt_backup.bin&lt;br /&gt; cmp gpt_primary.bin gpt_backup.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Inspecter les informations GPT lisibles :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk -i 1 /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; V&#233;rifier la coh&#233;rence globale de la table GPT :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk -v /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;carving&quot;&gt;&lt;/a&gt;Carving manuel (extraction sans table de partitions ni syst&#232;me de fichiers)&lt;/h2&gt;
&lt;p&gt;Le carving manuel intervient lorsque la table de partitions et le syst&#232;me de fichiers sont irr&#233;cup&#233;rables. L'objectif est d'extraire directement des fichiers ou des donn&#233;es brutes &#224; partir de signatures connues, sans s'appuyer sur aucune m&#233;tadonn&#233;e.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Identifier le type g&#233;n&#233;ral de donn&#233;es pr&#233;sentes dans une image disque :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher des signatures de fichiers connues :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;grep -a -b &quot;JFIF&quot; image.raw&lt;br /&gt; grep -a -b &quot;%PDF&quot; image.raw&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire un fichier &#224; partir d'un offset connu :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dd if=image.raw of=fichier.bin bs=1 skip=OFFSET count=TAILLE&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner le contenu extrait :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file fichier.bin&lt;br /&gt; hexdump -C fichier.bin | less&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;debugfs&quot;&gt;&lt;/a&gt;Analyse du journal ext4 avec debugfs&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile lorsque des fichiers ont disparu r&#233;cemment ou apr&#232;s un crash, mais que le syst&#232;me de fichiers &lt;strong&gt;ext4&lt;/strong&gt; est encore montable ou partiellement coh&#233;rent. L'objectif est d'examiner les structures internes (journal, inodes, blocs) afin d'identifier des donn&#233;es encore r&#233;cup&#233;rables.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Ouvrir une partition ext4 avec &lt;strong&gt;debugfs&lt;/strong&gt; (sans montage) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo debugfs /dev/sdXN&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;puis dans debugfs les commandes d'analyse ci-dessous.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Afficher les informations g&#233;n&#233;rales du syst&#232;me de fichiers :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;stats&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner l'&#233;tat du journal :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;logdump&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les inodes r&#233;cemment modifi&#233;s (selon le journal) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;lsdel&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;(Quitter &lt;i&gt;debugfs&lt;/i&gt; avec &lt;i&gt;quit&lt;/i&gt;)&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;inode&quot;&gt;&lt;/a&gt;R&#233;cup&#233;ration d'inodes supprim&#233;s (ext4)&lt;/h2&gt;
&lt;p&gt;Cette m&#233;thode s'applique lorsque des fichiers ont &#233;t&#233; supprim&#233;s mais que leurs blocs n'ont pas encore &#233;t&#233; r&#233;utilis&#233;s. L'objectif est de restaurer directement les donn&#233;es &#224; partir des inodes supprim&#233;s, sans passer par le nom de fichier original.&lt;/p&gt; &lt;p&gt;Un &lt;strong&gt;inode&lt;/strong&gt; est la structure centrale d'un syst&#232;me de fichiers Linux (&lt;i&gt;ext2/ext3/ext4&lt;/i&gt;). Il ne contient pas le nom du fichier, mais l'ensemble de ses m&#233;tadonn&#233;es et les pointeurs vers les donn&#233;es.&lt;/p&gt; &lt;p&gt;Un inode contient notamment :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; le type (fichier, r&#233;pertoire, lien, etc.)&lt;/li&gt;&lt;li&gt; les permissions&lt;/li&gt;&lt;li&gt; l'UID et le GID&lt;/li&gt;&lt;li&gt; la taille&lt;/li&gt;&lt;li&gt; les horodatages (&lt;i&gt;atime&lt;/i&gt;, &lt;i&gt;mtime&lt;/i&gt;, &lt;i&gt;ctime&lt;/i&gt;, &lt;i&gt;crtime&lt;/i&gt; selon le syst&#232;me de fichiers)&lt;/li&gt;&lt;li&gt; les pointeurs vers les blocs de donn&#233;es :
&lt;br /&gt;&#8212; directs
&lt;br /&gt;&#8212; indirects
&lt;br /&gt;&#8212; double et triple indirects&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le nom du fichier n'est pas stock&#233; dans l'inode, mais dans le r&#233;pertoire. Un r&#233;pertoire est une simple table associant un nom &#224; un num&#233;ro d'inode :
&lt;strong&gt;nom &#8594; inode&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Cons&#233;quence :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; supprimer un fichier supprime le lien &lt;i&gt;nom &#8594; inode&lt;/i&gt;&lt;/li&gt;&lt;li&gt; l'inode peut encore exister&lt;/li&gt;&lt;li&gt; les blocs de donn&#233;es peuvent rester intacts&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lister les inodes supprim&#233;s :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo debugfs /dev/sdXN&lt;br /&gt; lsdel&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Examiner un inode supprim&#233; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;stat &lt;inode&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Extraire le contenu d'un inode vers un fichier :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dump &lt;inode&gt; fichier_recupere.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Analyser le fichier extrait :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;file fichier_recupere.bin&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;perf&quot;&gt;&lt;/a&gt;Analyse des performances disque (diagnostic bas niveau)&lt;/h2&gt;
&lt;p&gt;Cette analyse est utile pour identifier des lenteurs anormales, des timeouts E/S ou des comportements d&#233;grad&#233;s li&#233;s au mat&#233;riel. L'objectif est de distinguer un probl&#232;me logiciel d'un probl&#232;me physique ou firmware.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Mesurer les performances brutes en lecture s&#233;quentielle :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo hdparm -tT /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Tester la latence de lecture sans cache :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX of=/dev/null bs=4K count=100000 iflag=direct status=progress&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Surveiller les erreurs E/S et timeouts :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;dmesg | grep -i -E &quot;i/o error|timeout|ata&quot;&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;malware&quot;&gt;&lt;/a&gt;Recherche de malware au niveau boot (MBR / GPT)&lt;/h2&gt;
&lt;p&gt;Cette v&#233;rification est pertinente en cas de comportement anormal persistant, y compris apr&#232;s r&#233;installation du syst&#232;me. L'objectif est d'identifier une modification du code d'amor&#231;age (bootsector, MBR ou GPT).&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le secteur d'amor&#231;age MBR (512 octets) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Lire le header GPT primaire :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/sdX bs=512 skip=1 count=1 | hexdump -C&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Comparer avec un disque sain ou une sauvegarde :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;cmp mbr_suspect.bin mbr_sain.bin&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rechercher des cha&#238;nes suspectes :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;strings mbr_suspect.bin&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;mbr&quot;&gt;&lt;/a&gt;R&#233;initialisation du code d'amor&#231;age (MBR)&lt;/h2&gt;
&lt;p&gt;Le &lt;strong&gt;MBR&lt;/strong&gt; (Master Boot Record) correspond aux 512 premiers octets d'un disque en sch&#233;ma de partition de type &lt;strong&gt;MBR&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Il contient le code d'amor&#231;age primaire ainsi que la table de partitions. Une corruption ou une modification malveillante de ce code peut emp&#234;cher le d&#233;marrage du syst&#232;me ou persister malgr&#233; une r&#233;installation.&lt;/p&gt; &lt;p&gt;Cette op&#233;ration consiste &#224; neutraliser le code d'amor&#231;age existant afin de repartir sur une base saine.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; &#201;craser le code MBR (sans toucher aux partitions) :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo dd if=/dev/zero of=/dev/sdX bs=440 count=1&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Supprimer compl&#232;tement la table GPT et les m&#233;tadonn&#233;es associ&#233;es :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo sgdisk --zap-all /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; R&#233;installer un chargeur d'amor&#231;age l&#233;gitime :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;grub-install /dev/sdX&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;En cas de doute de compromission du boot secteur, l'id&#233;e est de supprimer le secteur d'amor&#231;age douteux (MBR ou GPT selon le type), puis d'en r&#233;installer un propre avec grub.&lt;/p&gt; &lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;sshfs&quot;&gt;&lt;/a&gt;Monter un syst&#232;me de fichiers distant via SSH (SSHFS)&lt;/h2&gt;
&lt;p&gt;Le montage via &lt;strong&gt;SSHFS&lt;/strong&gt; permet d'acc&#233;der &#224; un syst&#232;me de fichiers distant comme s'il &#233;tait local, en s'appuyant uniquement sur une connexion &lt;i&gt;SSH&lt;/i&gt;. C'est particuli&#232;rement utile pour l'analyse, la r&#233;cup&#233;ration de donn&#233;es ou l'acc&#232;s ponctuel &#224; des fichiers distants sans exposer de services suppl&#233;mentaires.&lt;/p&gt; &lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Installer &lt;i&gt;sshfs&lt;/i&gt; :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sudo apt-get install sshfs&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Monter un r&#233;pertoire distant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;sshfs user@serveur:/chemin/distant /mnt/ssh&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; D&#233;monter proprement :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;fusermount -u /mnt/ssh&lt;/code&gt;&lt;/div&gt;
&lt;hr class=&quot;spip&quot; /&gt;
&lt;h2 class='h3 spip'&gt;&lt;a id=&quot;dvd&quot;&gt;&lt;/a&gt;G&#233;rer le chariot du lecteur DVD&lt;/h2&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Ejecter le disque :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;eject&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L8xH11/puce-32883.gif' width='8' height='11' class='puce' alt=&quot;-&quot; style='height:11px;width:8px;' /&gt; Rentrer le chariot du disque, si le lecteur le permet :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;eject -t&lt;/code&gt;&lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SERP, SPIP, breadcrumb et SEO</title>
		<link>https://www.orsal.fr/SERP-SPIP-breadcrumb-et-SEO</link>
		<guid isPermaLink="true">https://www.orsal.fr/SERP-SPIP-breadcrumb-et-SEO</guid>
		<dc:date>2018-04-24T12:48:43Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;Vous avez peut-&#234;tre d&#233;j&#224; remarqu&#233; que les SERP de Google ont souvent un affichage diff&#233;rent. Les SERP, pour Search Engine Result Page, ce sont les pages r&#233;sultats d'un moteur de recherche. La variation qui m'int&#233;resse ici est la ligne qui contient traditionnellement l'url de la page, la petite ligne verte. Parfois, elle se pr&#233;sente sous la forme d'un fil d'ariane, qui reprend le fil d'ariane pr&#233;sent sur la page. Je trouve cela plus parlant pour la personne qui fait une recherche, alors voyons comment (...)&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Referencement-SEO-GEO" rel="directory"&gt;R&#233;f&#233;rencement SEO/GEO&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH150/arton65-eac66.jpg' width='150' height='150' onmouseover=&quot;this.src='local/cache-vignettes/L150xH150/artoff65-8ed12.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH150/arton65-eac66.jpg'&quot; style='height:150px;width:150px;' /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Vous avez peut-&#234;tre d&#233;j&#224; remarqu&#233; que les &lt;strong&gt;SERP de Google&lt;/strong&gt; ont souvent un affichage diff&#233;rent. Les SERP, pour Search Engine Result Page, ce sont les pages r&#233;sultats d'un moteur de recherche.&lt;/p&gt; &lt;p&gt;La variation qui m'int&#233;resse ici est la ligne qui contient traditionnellement l'url de la page, la petite ligne verte. Parfois, elle se pr&#233;sente &lt;strong&gt;sous la forme d'un fil d'ariane&lt;/strong&gt;, qui reprend le fil d'ariane pr&#233;sent sur la page. Je trouve cela plus parlant pour la personne qui fait une recherche, alors voyons comment mettre &#231;a en place.
[sommaire]&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Web s&#233;mantique &amp; schema.org&lt;/h2&gt;
&lt;p&gt;Bon, aujourd'hui il y a des &lt;a href=&quot;https://www.youtube.com/watch?time_continue=1&amp;v=aaOB-ErYq6Y&quot; class='spip_out' rel='external'&gt;projets de voiture autonome&lt;/a&gt; sans pilote plut&#244;t bien avanc&#233;s. Mais voil&#224;, &lt;strong&gt;un moteur de recherche n'arrive pas encore &#224; d&#233;tecter et lire tout seul le fil d'ariane&lt;/strong&gt; et il va falloir l'aider. Pour cela on va utiliser le &lt;strong&gt;&lt;a href=&quot;http://fr.wikipedia.org/wiki/Web_s%C3%A9mantique&quot; class='spip_glossaire' rel='external'&gt;Web s&#233;mantique&lt;/a&gt;&lt;/strong&gt;. Nous allons ajouter des balises dans les pages Web qui vont &lt;strong&gt;donner du sens au contenu&lt;/strong&gt; en ajoutant des meta informations qui permettent aux moteurs de recherche de mieux comprendre le contenu des pages Web.&lt;/p&gt; &lt;p&gt;&lt;span class='spip_document_40 spip_documents spip_documents_center'&gt;
&lt;img src='https://www.orsal.fr/local/cache-vignettes/L500xH191/serp-google-breadcrumb-seo-64888.jpg' width='500' height='191' alt=&quot;&quot; style='height:191px;width:500px;' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Il existe plusieurs syst&#232;mes de balises comme &lt;a href=&quot;http://microformats.org/wiki/Main_Page&quot; class='spip_out' rel='external'&gt;microformats&lt;/a&gt; ou &lt;a href=&quot;http://dublincore.org/&quot; class='spip_out' rel='external'&gt;Dublin core&lt;/a&gt;, mais je vais utiliser &lt;strong&gt;&lt;a href=&quot;http://schema.org/&quot; class='spip_out' rel='external'&gt;schema.org&lt;/a&gt;&lt;/strong&gt; car il me semble &#234;tre mieux reconnu par Google. D'ailleurs c'est celui qu'ils utilisent dans &lt;a href=&quot;https://developers.google.com/search/docs/data-types/breadcrumb&quot; class='spip_out' rel='external'&gt;leurs exemples&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Ces diff&#233;rents syst&#232;mes ne sont pas incompatibles entre eux, bien au contraire, je vous invite &#224; tous &lt;strong&gt;les utiliser sur vos pages Web pour am&#233;liorer votre r&#233;f&#233;rencement&lt;/strong&gt;. Ils permettent de repr&#233;senter de mani&#232;re structur&#233;e plein de types d'information. Cela d&#233;passe le cadre de cet article, et nous allons nous focaliser sur les &lt;a href=&quot;http://schema.org/BreadcrumbList&quot; class='spip_out' rel='external'&gt;BreadcrumbList&lt;/a&gt;. &#171; Breadcrumb trail &#187; c'est le terme anglais pour d&#233;signer le fil d'Ariane sur les pages Web.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Prenons un exemple&lt;/h2&gt;
&lt;p&gt;Voici un exemple de fil d'ariane :&lt;/p&gt; &lt;p&gt;&lt;code class='spip_code' dir='ltr'&gt;Accueil &gt; SEO &gt; Web s&#233;mantique &gt; SERP, SPIP et breadcrumb&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Schema.org d&#233;finit donc une &lt;strong&gt;&lt;a href=&quot;http://schema.org/BreadcrumbList&quot; class='spip_out' rel='external'&gt;structure pour les breadcrumb&lt;/a&gt;&lt;/strong&gt;, c'est &#224; dire une liste et une hi&#233;rarchie d'information qui permet de d&#233;finir un fil d'Ariane et ses &#233;l&#233;ments. Pour faire simple, je vais me limiter ici aux champs obligatoires ou les plus pertinents : &lt;strong&gt;le nom, l'url et la position&lt;/strong&gt;. En explorant le site de &lt;a href=&quot;http://schema.org/BreadcrumbList&quot; class='spip_out' rel='external'&gt;schema.org&lt;/a&gt;, vous pourrez d&#233;couvrir tout ce qu'il est possible de param&#233;trer.&lt;/p&gt; &lt;p&gt;Les &#233;l&#233;ments de mon exemple se d&#233;finissent alors ainsi :&lt;/p&gt; &lt;table class=&quot;spip&quot;&gt;
&lt;tr class='row_even'&gt;
&lt;td&gt; nom &lt;/td&gt;
&lt;td&gt; url &lt;/td&gt;
&lt;td&gt; position &lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd'&gt;
&lt;td&gt; Accueil &lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;https://www.orsal.fr/&quot; class='spip_url spip_out' rel='nofollow'&gt;https://www.orsal.fr/&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; 1 &lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even'&gt;
&lt;td&gt; SEO &lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;https://www.orsal.fr/seo/&quot; class='spip_url spip_out' rel='nofollow'&gt;https://www.orsal.fr/seo/&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; 2 &lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_odd'&gt;
&lt;td&gt; Web s&#233;mantique &lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;https://www.orsal.fr/seo/web-semantique/&quot; class='spip_url spip_out' rel='nofollow'&gt;https://www.orsal.fr/seo/web-semantique/&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; 3 &lt;/td&gt;&lt;/tr&gt;
&lt;tr class='row_even'&gt;
&lt;td&gt; SERP, SPIP et breadcrumb &lt;/td&gt;
&lt;td&gt; &lt;a href=&quot;https://www.orsal.fr/seo/web-semantique/serp-spip-breadcrumb&quot; class='spip_url spip_out' rel='nofollow'&gt;https://www.orsal.fr/seo/web-semant...&lt;/a&gt; &lt;/td&gt;
&lt;td&gt; 4 &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Il va falloir transformer la gestion du fil d'Ariane en place sur un site SPIP pour obtenir une liste avec les informations ajout&#233;es. Initialement le code HTML pour mon fil d'Ariane ressemble &#224; cela :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;p id=&quot;hierarchie&quot;&gt;&lt;br /&gt; &lt;a href=&quot;https://www.orsal.fr/&quot;&gt;Accueil&lt;/a&gt; &gt;&lt;br /&gt; &lt;a href=&quot;/seo/&quot;&gt;SEO&lt;/a&gt; &gt;&lt;br /&gt; &lt;a href=&quot;/seo/web-semantique/&quot;&gt;Web s&#233;mantique&lt;/a&gt; &gt;&lt;br /&gt; &lt;strong class=&quot;on&quot;&gt;SERP, SPIP et breadcrumb&lt;/strong&gt;&lt;br /&gt; &lt;/p&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;L'objectif est de transformer la g&#233;n&#233;ration du bloc dans le squelette SPIP pour obtenir ce type de bloc :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;ol itemscope itemtype=&quot;http://schema.org/BreadcrumbList&quot; id=&quot;hierarchie&quot;&gt;&lt;br /&gt; &lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt;&lt;br /&gt; &lt;a href=&quot;https://www.orsal.fr/&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;Accueil&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;1&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt; &gt; &lt;br /&gt; &lt;a href=&quot;/seo/&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;SEO&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;2&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt; &gt; &lt;br /&gt; &lt;a href=&quot;/seo/web-semantique&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;Web s&#233;mantique&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;3&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt; &gt; &lt;br /&gt; &lt;strong class=&quot;on&quot;&gt;&lt;br /&gt; &lt;a href=&quot;/seo/web-semantique/serp-spip-breadcrumb&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;SERP, SPIP et breadcrumb&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;/strong&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;4&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;br /&gt; &lt;/ol&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Il s'agit d'une liste de liens. Voici comment la lire.&lt;/p&gt; &lt;p&gt;Les &lt;strong&gt;donn&#233;es structur&#233;es&lt;/strong&gt; schema.org sont les propri&#233;t&#233;s &lt;i&gt;itemprop&lt;/i&gt;, &lt;i&gt;itemscope&lt;/i&gt; et &lt;i&gt;itemtype&lt;/i&gt; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;itemscope&lt;/strong&gt; indique que le bloc html courant correspond &#224; un bloc schema.org&lt;/li&gt;&lt;li&gt; &lt;strong&gt;itemtype&lt;/strong&gt; permet de pr&#233;ciser le type du bloc schema.org courant&lt;/li&gt;&lt;li&gt; &lt;strong&gt;itemprop&lt;/strong&gt; d&#233;finit une propri&#233;t&#233; du bloc courant&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;C'est r&#233;cursif, un bloc peut se retrouver l'enfant d'un autre.&lt;/p&gt; &lt;p&gt;Ainsi le bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;ol/&gt;&lt;/code&gt; correspond &#224; une &lt;i&gt;BreadcrumbList&lt;/i&gt;, et chaque &lt;code class='spip_code' dir='ltr'&gt;&lt;li/&gt;&lt;/code&gt; &#224; un &lt;i&gt;itemListElement&lt;/i&gt; enfant de la &lt;i&gt;BreadcrumbList&lt;/i&gt;, de type &lt;i&gt;ListItem&lt;/i&gt;. C'est pas clair ? Relisez doucement le source HTML, &#231;a va venir.&lt;/p&gt; &lt;p&gt;En pla&#231;ant la propri&#233;t&#233; &lt;i&gt;item&lt;/i&gt; sur la balise &lt;code class='spip_code' dir='ltr'&gt;&lt;a/&gt;&lt;/code&gt;, cela permet de d&#233;finir une propri&#233;t&#233; de type &lt;i&gt;url&lt;/i&gt;. J'ai ajout&#233; un bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;span/&gt;&lt;/code&gt;, juste pour porter la propri&#233;t&#233; &lt;i&gt;name&lt;/i&gt;. Enfin pour la position, comme je n'avais pas d'&#233;l&#233;ment o&#249; l'ins&#233;rer, j'ai directement ajout&#233; un bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;meta&gt;&lt;/code&gt;, qui ne s'affichera donc pas, mais sera bien pr&#233;sent dans le code.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Google et les donn&#233;es structur&#233;es&lt;/h2&gt;
&lt;p&gt;La liste des champs/propri&#233;t&#233;s possibles sont disponibles sur le site de schema.org.&lt;/p&gt; &lt;p&gt;Une liste plus synth&#233;tique des champs recommand&#233;s ou obligatoires, sont disponibles dans les &lt;a href=&quot;https://developers.google.com/search/docs/data-types/breadcrumb&quot; class='spip_out' rel='external'&gt;directives pour les donn&#233;es structur&#233;es d&#233;finies par Google&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;En utilisant des &lt;strong&gt;donn&#233;es structur&#233;es&lt;/strong&gt; sur votre site, vous am&#233;liorez la compr&#233;hension de votre site par les moteurs de recherche, donc vous en &lt;strong&gt;am&#233;liorez le r&#233;f&#233;rencement&lt;/strong&gt;, et vous b&#233;n&#233;ficiez parfois d'un affichage optimis&#233; (rich snippet) dans les r&#233;sultats de recherche, comme l'affichage des notes sur des produits, ou les &#233;l&#233;ments d'&lt;a href=&quot;https://www.google.fr/search?q=recette+cr%C3%A8pes&quot; class='spip_out' rel='external'&gt;une recette&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Outil indispensable&lt;/strong&gt; lorsque vous travaillez les donn&#233;es structur&#233;es, Google propose un analyseur de code source qui vous montre le r&#233;sultat de la d&#233;tection par le moteur de recherche des balises s&#233;mantiques, pour &lt;a href=&quot;https://search.google.com/structured-data/testing-tool?hl=fr&quot; class='spip_out' rel='external'&gt;tester vos donn&#233;es structur&#233;es&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Il vous indiquera &#233;galement les erreurs que vous auriez pu commettre dans l'encha&#238;nement des blocs. Utilisez-le pour d&#233;bugger vos balises.&lt;/p&gt; &lt;p&gt;Pas de jaloux, les donn&#233;es structur&#233;es fonctionnent &#233;galement chez &lt;a href=&quot;https://www.bing.com/toolbox/markup-validator&quot; class='spip_out' rel='external'&gt;Microsoft Bing&lt;/a&gt; et &lt;a href=&quot;https://webmaster.yandex.com/tools/microtest/&quot; class='spip_out' rel='external'&gt;Yandex&lt;/a&gt;, entre autres.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;SPIP et les donn&#233;es structur&#233;es&lt;/h2&gt;
&lt;p&gt;L'objectif est d'int&#233;grer ceci &#224; un site SPIP. J'ai fait la modification sur les pages &lt;i&gt;article&lt;/i&gt; et &lt;i&gt;rubrique&lt;/i&gt; pour lesquelles je voyais un int&#233;r&#234;t &#224; avoir un fil d'Ariane.&lt;/p&gt; &lt;p&gt;Pour cela, j'ai copi&#233; les fichiers &lt;i&gt;article.html&lt;/i&gt; et &lt;i&gt;rubrique.html&lt;/i&gt; que j'ai trouv&#233;s dans le r&#233;pertoire de mon th&#232;me actuel, vers le r&#233;pertoire &lt;code class='spip_code' dir='ltr'&gt;squelette/contenu/&lt;/code&gt; du site, pour &lt;strong&gt;surcharger les squelettes&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;J'ai ensuite rechercher et &lt;strong&gt;remplacer le bloc hi&#233;rarchie&lt;/strong&gt; pr&#233;sent dans les fichiers. Voici le morceau de squelette qui permet de g&#233;n&#233;rer le fil d'Ariane avec les m&#233;ta donn&#233;es.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;[(#REM) Fil d'Ariane ]&lt;br /&gt; &lt;ol itemscope itemtype=&quot;http://schema.org/BreadcrumbList&quot; id=&quot;hierarchie&quot;&gt;&lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt;&lt;br /&gt; &lt;a href=&quot;#URL_SITE_SPIP/&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;&lt;:accueil_site:&gt;&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;1&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;BOUCLE_ariane(HIERARCHIE){id_article}&gt;&lt;br /&gt; &lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt; &gt; &lt;br /&gt; &lt;a href=&quot;#URL_RUBRIQUE&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;[(#TITRE|couper{80})]&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;[(#COMPTEUR_BOUCLE|plus{1})]&quot; /&gt;&lt;br /&gt; &lt;/li&gt;&lt;br /&gt; &lt;/BOUCLE_ariane&gt;&lt;br /&gt; [&lt;li itemprop=&quot;itemListElement&quot; itemscope itemtype=&quot;http://schema.org/ListItem&quot;&gt; &gt; &lt;br /&gt; &lt;a href=&quot;#URL_ARTICLE&quot; itemprop=&quot;item&quot;&gt;&lt;br /&gt; &lt;span itemprop=&quot;name&quot;&gt;(#TITRE|couper{80})&lt;/span&gt;&lt;br /&gt; &lt;/a&gt;&lt;br /&gt; &lt;meta itemprop=&quot;position&quot; content=&quot;[(#TOTAL_BOUCLE|plus{2})]&quot; /&gt;&lt;br /&gt; &lt;/li&gt;]&lt;br /&gt; &lt;/B_ariane&gt;&lt;br /&gt; &lt;/ol&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Le bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;ol/&gt;&lt;/code&gt; est cod&#233; en dur puisqu'il encapsulera toujours le fil d'Ariane. Chaque bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;li/&gt;&lt;/code&gt; qui le constitue correspond &#224; un niveau hi&#233;rarchique.&lt;/p&gt; &lt;p&gt;Le premier &#233;l&#233;ment &lt;code class='spip_code' dir='ltr'&gt;&lt;li/&gt;&lt;/code&gt; correspond &#224; la page d'accueil. La &lt;strong&gt;position du premier &#233;l&#233;ment doit &#234;tre &#233;gale &#224; 1&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;Ensuite on entre dans une &lt;strong&gt;boucle sur la hi&#233;rarchie des rubriques entre l'accueil du site et la page courante&lt;/strong&gt;. Pour chaque niveau, on retrouve un bloc &lt;code class='spip_code' dir='ltr'&gt;&lt;li/&gt;&lt;/code&gt;. La position est calcul&#233;e sur la &lt;strong&gt;balise SPIP #COMPTEUR_BOUCLE&lt;/strong&gt; qui nous donne le num&#233;ro d'it&#233;ration. On ajoute 1, avec le filtre &lt;code class='spip_code' dir='ltr'&gt;plus {1}&lt;/code&gt; car le premier c'est la page d'accueil.&lt;/p&gt; &lt;p&gt;A partir de SPIP 3.0, il existe la &lt;strong&gt;balise #PROFONDEUR&lt;/strong&gt; qui indique la profondeur d'une rubrique, mais la num&#233;rotation commence &#224; 0, et la position attendue pour le premier &#233;l&#233;ment est 1. Donc je pr&#233;f&#232;re garder mon syst&#232;me de comptage sur la boucle qui fonctionne pour toutes les versions de SPIP.&lt;/p&gt; &lt;p&gt;Enfin, pour le &lt;strong&gt;dernier &#233;l&#233;ment du fil d'Ariane&lt;/strong&gt;, il s'agit de la page actuellement visit&#233;e, j'ai utilis&#233; un lien vers la page courante pour &lt;strong&gt;ajouter du maillage interne important en SEO&lt;/strong&gt;. J'ai plac&#233; le code dans le bloc optionnel, entre la balise fermante &lt;code class='spip_code' dir='ltr'&gt;&lt;/BOUCLE_ariane&gt;&lt;/code&gt; et la balise fermante &lt;code class='spip_code' dir='ltr'&gt;&lt;/B_ariane&gt;&lt;/code&gt;, pour que la &lt;strong&gt;balise #TOTAL_BOUCLE&lt;/strong&gt; contienne le nombre d'&#233;l&#233;ments trouv&#233;s dans la hi&#233;rarchie. Cela va permettre de calculer la position du dernier &#233;l&#233;ment, via le filtre &lt;code class='spip_code' dir='ltr'&gt;plus {2}&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;De plus ce bloc est entre crochet pour que les balises et filtres soient remplac&#233;s et calcul&#233;s lors de la g&#233;n&#233;ration de la page.&lt;/p&gt; &lt;p&gt;Une fois que vous avez apport&#233; la modification sur les deux squelettes, il n'y a plus qu'&#224; recalculer la page et vider le cache, et enfin attendre que les moteurs de recherche fassent la mise &#224; jour.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;CSS &amp; fil d'ariane&lt;/h2&gt;
&lt;p&gt;Si tout s'est bien pass&#233;, vous devez obtenir une liste ordonn&#233;e qui correspond &#224; votre fil d'Ariane. Mais pour l'instant les &#233;l&#233;ments sont les uns en dessous des autres, avec une num&#233;rotation.&lt;/p&gt; &lt;p&gt;Pour modifier cela, j'ai utilis&#233; un peu de CSS, dans le fichier &lt;code class='spip_code' dir='ltr'&gt;squelette/perso.css&lt;/code&gt; pour surcharger le style de mon th&#232;me.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;#hierarchie li {&lt;br /&gt; list-style-type: none;&lt;br /&gt; margin-left: 0;&lt;br /&gt; display: inline;&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cela correspond &#224; :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li&gt; &lt;strong&gt;list-style-type&lt;/strong&gt; permet de masquer la num&#233;rotation&lt;/li&gt;&lt;li&gt; &lt;strong&gt;margin-left&lt;/strong&gt; permet de supprimer le d&#233;calage de la num&#233;rotation&lt;/li&gt;&lt;li&gt; &lt;strong&gt;display&lt;/strong&gt; permet d'afficher chaque &#233;l&#233;ment du fil d'Ariane sur la m&#234;me ligne &#224; la suite&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pensez &#224; rafra&#238;chir le cache pour v&#233;rifier les modifications.&lt;/p&gt; &lt;h2 class='h3 spip'&gt;Pour aller plus loin&lt;/h2&gt;
&lt;p&gt;N'oubliez pas de tester le r&#233;sultats de vos modifications avec l'outil de Google, pour v&#233;rifier qu'il d&#233;tecte bien tous vos champs. Vous d&#233;couvrirez au passage peut-&#234;tre d'autres balises d&#233;j&#224; pr&#233;sentes sur la page.&lt;/p&gt; &lt;p&gt;Le champ des possibles avec les donn&#233;es structur&#233;es est immense et reconnu par tous les moteurs de recherche. N'h&#233;sitez pas &#224; en abuser sur vos pages.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Theme-color : personnaliser les couleurs du navigateur mobile pour votre marque</title>
		<link>https://www.orsal.fr/Theme-color-personnaliser-les</link>
		<guid isPermaLink="true">https://www.orsal.fr/Theme-color-personnaliser-les</guid>
		<dc:date>2016-03-11T16:50:33Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Guillaume Orsal</dc:creator>



		<description>
&lt;p&gt;La m&#233;ta theme-color permet de personnaliser l'interface de navigation mobile (barre d'adresse, onglets) aux couleurs de votre marque. D&#233;couvrez comment impl&#233;menter cette meta HTML simple mais efficace sur Chrome, Safari iOS, et Windows Phone pour am&#233;liorer l'exp&#233;rience utilisateur et votre coh&#233;rence visuelle sur tous les appareils. Pourquoi impl&#233;menter theme-color ? L'exp&#233;rience utilisateur sur mobile est cruciale pour votre branding et votre SEO. La m&#233;ta theme-color offre un avantage simple mais (...)&lt;/p&gt;


-
&lt;a href="https://www.orsal.fr/Developpement-Web" rel="directory"&gt;D&#233;veloppement Web&lt;/a&gt;


		</description>


 <content:encoded>&lt;img class='spip_logos' alt=&quot;&quot; align=&quot;right&quot; src='https://www.orsal.fr/local/cache-vignettes/L150xH146/arton59-27f8c.jpg' width='150' height='146' onmouseover=&quot;this.src='local/cache-vignettes/L150xH146/artoff59-60bef.jpg'&quot; onmouseout=&quot;this.src='local/cache-vignettes/L150xH146/arton59-27f8c.jpg'&quot; style='height:146px;width:150px;' /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;La m&#233;ta theme-color permet de personnaliser l'interface de navigation mobile (barre d'adresse, onglets) aux couleurs de votre marque. D&#233;couvrez comment impl&#233;menter cette meta HTML simple mais efficace sur Chrome, Safari iOS, et Windows Phone pour am&#233;liorer l'exp&#233;rience utilisateur et votre coh&#233;rence visuelle sur tous les appareils.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class='h3 spip'&gt;Pourquoi impl&#233;menter theme-color ?&lt;/h2&gt;
&lt;p&gt;L'exp&#233;rience utilisateur sur mobile est cruciale pour votre branding et votre SEO. La m&#233;ta theme-color offre un avantage simple mais efficace : aligner l'interface de navigation aux couleurs de votre marque. Cela cr&#233;e une exp&#233;rience coh&#233;rente et professionnelle sur tous les navigateurs mobiles.&lt;/p&gt; &lt;dl class='spip_document_39 spip_documents spip_documents_center' style=''&gt; &lt;dt&gt;&lt;img src='https://www.orsal.fr/local/cache-vignettes/L300xH533/color-theme-exemple-ef9ff.jpg' width='300' height='533' alt='JPEG - 56.6 ko' style='height:533px;width:300px;' /&gt;&lt;/dt&gt; &lt;dt class='spip_doc_titre' style='width:300px;'&gt;&lt;strong&gt;Utilisation de la balise meta theme-color&lt;/strong&gt;&lt;/dt&gt; &lt;/dl&gt;
&lt;h2 class='h3 spip'&gt;Impl&#233;mentation multiplateforme&lt;/h2&gt;
&lt;p&gt;L'astuce est assez simple, il suffit d'ajouter un meta theme-color dans l'ent&#234;te de votre page Web. Donc &#224; l'int&#233;rieur de la balise &lt;head&gt;&lt;/head&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Chrome et navigateurs standards&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;!-- Chrome --&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;meta name=&quot;theme-color&quot; content=&quot;#68cfd0&quot;&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;Cette meta a int&#233;gr&#233; le standard HTML, mais n'est pas encore respect&#233;e de mani&#232;re identique par tous les navigateurs. Personnellement, j'ai pu constater le fonctionnement sur Android que sous Chrome et les navigateurs Chromium.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Windows Phone&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Pour Windows Phone, il faudra utiliser une autre meta que le standard...&lt;/p&gt; &lt;p&gt;&lt;!-- Windows Phone --&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&lt;meta name=&quot;msapplication-navbutton-color&quot; content=&quot;#68cfd0&quot;&gt;&lt;/code&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;iOS Safari&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Enfin sur iPhone, vous aurez en plus la possibilit&#233; de rendre translucide la barre de statut.&lt;/p&gt; &lt;p&gt;&lt;!-- iOS Safari --&gt;&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;f&lt;br /&gt; &lt;meta name=&quot;apple-mobile-web-app-capable&quot; content=&quot;yes&quot;&gt;&lt;br /&gt; &lt;meta name=&quot;apple-mobile-web-app-status-bar-style&quot; content=&quot;black-translucent&quot;&gt;&lt;/code&gt;&lt;/div&gt;
&lt;h2 class='h3 spip'&gt;Standards modernes en 2025&lt;/h2&gt;
&lt;p&gt;Le support de theme-color est maintenant largement g&#233;n&#233;ralis&#233; sur tous les navigateurs mobiles modernes. Chrome, Safari sur iOS, et Edge respectent cette meta comme standard. Elle fait partie des bonnes pratiques incontournables pour tout d&#233;veloppeur souhaitant optimiser l'exp&#233;rience mobile et offrir une coh&#233;rence visuelle professionnelle &#224; ses utilisateurs.&lt;/p&gt; &lt;p&gt;En cherchant un peu sur le net vous trouverez d'autres personnalisations comme transformer une page Web en Web App en quelques instructions.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
