<?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>Teddy Payet</title>
	<link>https://www.teddypayet.com/</link>
	
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>
	<atom:link href="https://www.teddypayet.com/spip.php?id_mot=46&amp;page=backend" rel="self" type="application/rss+xml" />

	<image>
		<title>Teddy Payet</title>
		<url>https://www.teddypayet.com/local/cache-vignettes/L144xH162/siteon0-84dcb.png?1748259078</url>
		<link>https://www.teddypayet.com/</link>
		<height>162</height>
		<width>144</width>
	</image>

                    

<item xml:lang="fr">
		<title>SPIP en 2026 (2/2) : quand les projets &#233;chouent vraiment</title>
		<link>https://www.teddypayet.com/SPIP-en-2026-2-2-quand-les-projets-echouent-vraiment</link>
		<guid isPermaLink="true">https://www.teddypayet.com/SPIP-en-2026-2-2-quand-les-projets-echouent-vraiment</guid>
		<dc:date>2026-01-02T08:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Chef de projet</dc:subject>
		<dc:subject>Salari&#233;</dc:subject>

		<description>
&lt;p&gt;Les projets SPIP ne basculent pas &#224; cause du code, mais &#224; cause de ce qui se joue autour. Derri&#232;re les architectures fig&#233;es et les sites que plus personne n'ose faire &#233;voluer, il y a toujours des choix humains, des r&#244;les flous et des d&#233;cisions diff&#233;r&#233;es. Cette seconde partie s'int&#233;resse &#224; ce moment pr&#233;cis o&#249; l'outil devient le bouc &#233;missaire, alors qu'il ne fait que r&#233;v&#233;ler les fragilit&#233;s d'une gouvernance, d'une organisation et d'un pilotage mis &#224; l'&#233;preuve du temps. &lt;br class='autobr' /&gt; Introduction &lt;br class='autobr' /&gt;
Les (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Chef-de-projet" rel="tag"&gt;Chef de projet&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Salarie" rel="tag"&gt;Salari&#233;&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/maarten-deckers-t5nxyxcf50i-unsplash-ebfb6.jpg?1767341387' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Les projets SPIP ne basculent pas &#224; cause du code, mais &#224; cause de ce qui se joue autour. Derri&#232;re les architectures fig&#233;es et les sites que plus personne n'ose faire &#233;voluer, il y a toujours des choix humains, des r&#244;les flous et des d&#233;cisions diff&#233;r&#233;es. &lt;br class='manualbr' /&gt;Cette seconde partie s'int&#233;resse &#224; ce moment pr&#233;cis o&#249; l'outil devient le bouc &#233;missaire, alors qu'il ne fait que r&#233;v&#233;ler les fragilit&#233;s d'une gouvernance, d'une organisation et d'un pilotage mis &#224; l'&#233;preuve du temps.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Les difficult&#233;s d'un projet SPIP ne prennent jamais racine uniquement dans le code. Elles &#233;mergent bien plus souvent des zones floues. Celles o&#249; les responsabilit&#233;s se croisent. O&#249; le savoir se concentre. O&#249; les d&#233;cisions se prennent &#224; demi-mot.&lt;/p&gt;
&lt;p&gt;Quand l'architecture devient opaque et que la stabilit&#233; se transforme en contrainte, le facteur humain entre pleinement en jeu. Qui d&#233;cide. Qui maintient. Qui arbitre. Et surtout, qui porte la vision dans la dur&#233;e.&lt;/p&gt;
&lt;p&gt;Cette seconde partie s'attache &#224; ce qui fait r&#233;ellement basculer les projets. Non pas l'outil, mais la mani&#232;re dont il est pilot&#233;. La fa&#231;on dont les r&#244;les sont d&#233;finis, ou laiss&#233;s dans le flou. Le moment o&#249; SPIP devient le r&#233;ceptacle de tensions qui ne lui appartiennent pas.&lt;/p&gt;
&lt;p&gt;C'est souvent l&#224; que l'on parle d'&#233;chec. Et c'est pr&#233;cis&#233;ment l&#224; qu'il devient possible de comprendre pourquoi.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le facteur humain, le plus sous-estim&#233;&lt;/h2&gt;
&lt;p&gt;Les difficult&#233;s d'un projet SPIP sont rarement purement techniques. Elles prennent presque toujours racine ailleurs. Dans l'organisation, dans les r&#244;les, dans la mani&#232;re dont la responsabilit&#233; est distribu&#233;e ou, plus souvent, dilu&#233;e.&lt;/p&gt;
&lt;p&gt;Tr&#232;s t&#244;t, un projet SPIP s'appuie sur une ou deux personnes identifi&#233;es comme &#8220;celles qui savent&#8221;. Ce sont elles qui comprennent la logique du site, qui connaissent les subtilit&#233;s, qui savent o&#249; regarder quand quelque chose dysfonctionne. Cette situation est confortable. Elle rassure tout le monde.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La comp&#233;tence se concentre, pendant que le projet continue d'avancer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce fonctionnement n'est pas probl&#233;matique en soi. Il le devient quand il s'installe dans la dur&#233;e sans &#234;tre questionn&#233;. La connaissance reste implicite. Elle circule peu. Elle se transmet encore moins. Le projet repose alors sur une forme d'&#233;quilibre fragile, que personne n'a vraiment formalis&#233;.&lt;/p&gt;
&lt;p&gt;Un jour, cette personne s'absente. Change de poste. Quitte le projet. Parfois simplement, elle n'a plus le temps. Rien ne casse imm&#233;diatement. Le site fonctionne toujours. Mais une inqui&#233;tude nouvelle appara&#238;t. Les d&#233;cisions sont repouss&#233;es. Les &#233;volutions deviennent prudentes. On &#233;vite de s'engager.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quand le savoir n'est pas partag&#233;, la peur remplace progressivement la d&#233;cision.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; cela s'ajoute souvent une gouvernance floue. Personne n'est r&#233;ellement en charge du long terme. Les arbitrages sont pris au coup par coup, en fonction de l'urgence ou des contraintes du moment. Le technique subit. L'&#233;ditorial s'adapte. Et SPIP devient le point de convergence de tensions qui ne lui appartiennent pas.&lt;/p&gt;
&lt;p&gt;Dans ce contexte, l'outil finit par porter une responsabilit&#233; qui n'est pas la sienne. On lui reproche des lenteurs, des rigidit&#233;s, des limites. En r&#233;alit&#233;, ce sont des choix humains non assum&#233;s qui s'expriment &#224; travers lui.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SPIP ne d&#233;cide jamais. Il ex&#233;cute les d&#233;cisions, ou les non-d&#233;cisions, prises ailleurs.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C'est souvent ici que le projet commence &#224; s'enliser. Non par manque de comp&#233;tence, mais par absence de pilotage clair. Le site devient un espace o&#249; chacun agit avec prudence, sans vision partag&#233;e. Et cette prudence, &#224; long terme, co&#251;te plus cher que n'importe quelle refonte.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Quand tout se m&#233;lange, l'outil devient coupable&lt;/h2&gt;
&lt;p&gt;&#192; mesure que le projet avance, les fronti&#232;res s'estompent. Ce qui rel&#232;ve de l'&#233;ditorial, du technique ou de l'organisation finit par se confondre. SPIP devient alors bien plus qu'un outil de publication. Il absorbe des attentes qui ne rel&#232;vent pas de lui.&lt;/p&gt;
&lt;p&gt;On lui demande de compenser un manque de m&#233;thode, de corriger des d&#233;cisions tardives, de pallier une absence de vision. Le site devient le lieu o&#249; se cristallisent des frustrations accumul&#233;es ailleurs. D&#233;lais trop courts. Moyens insuffisants. Arbitrages repouss&#233;s. Tout converge.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Quand les r&#244;les ne sont pas clairs, l'outil devient le point de friction.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans ce contexte, chaque difficult&#233; prend une dimension disproportionn&#233;e. Une &#233;volution &#233;ditoriale devient un probl&#232;me technique. Une contrainte organisationnelle se transforme en limite suppos&#233;e de SPIP. Le d&#233;bat se d&#233;place. On discute de l'outil, alors que le sujet est ailleurs.&lt;/p&gt;
&lt;p&gt;Progressivement, SPIP endosse un r&#244;le qui n'est pas le sien. Celui de responsable. Responsable des lenteurs. Responsable des compromis. Responsable de ce qui n'a pas &#233;t&#233; anticip&#233;. Cette lecture est s&#233;duisante. Elle simplifie la r&#233;alit&#233;. Elle &#233;vite de questionner les choix collectifs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;L'outil sert alors de paravent &#224; des probl&#232;mes qu'on ne veut pas nommer.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&#192; partir de l&#224;, le dialogue se tend. Les &#233;quipes techniques se retrouvent &#224; justifier l'existant. Les &#233;quipes &#233;ditoriales expriment des attentes contradictoires. Et le projet avance &#224; contre-courant, port&#233; par une forme d'usure plus que par une dynamique constructive.&lt;br class='autobr' /&gt;
SPIP, pourtant, continue de faire ce pour quoi il a &#233;t&#233; con&#231;u. Il structure. Il affiche. Il publie. Mais il devient aussi le r&#233;ceptacle de toutes les tensions. Non parce qu'il est d&#233;faillant, mais parce qu'il est au centre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ce n'est pas l'outil qui &#233;choue. C'est la confusion autour de son r&#244;le.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pourquoi les projets &#233;chouent vraiment&lt;/h2&gt;
&lt;p&gt;Les &#233;checs des projets SPIP ne sont presque jamais accidentels. Ils suivent des trajectoires r&#233;currentes, que l'on retrouve d'un contexte &#224; l'autre, quels que soient la taille du site ou les moyens engag&#233;s.&lt;/p&gt;
&lt;p&gt;Le premier facteur est souvent l'absence de vision &#224; long terme. SPIP est choisi pour r&#233;pondre &#224; un besoin imm&#233;diat. Publier vite. Structurer simplement. Mettre en ligne sans d&#233;pendre d'un prestataire en permanence. Ces raisons sont l&#233;gitimes. Mais elles deviennent insuffisantes quand le projet s'installe dans la dur&#233;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un projet pens&#233; pour d&#233;marrer n'est pas toujours pens&#233; pour durer.&lt;/strong&gt; &#192; cela s'ajoute une perception biais&#233;e de la maintenance. Tant que le site fonctionne, elle est rel&#233;gu&#233;e au second plan. Elle est vue comme un co&#251;t, rarement comme un investissement. On pr&#233;f&#232;re ajouter plut&#244;t que consolider. Adapter plut&#244;t que simplifier. Le projet avance, mais il avance sans se renforcer.&lt;/p&gt;
&lt;p&gt;Un autre &#233;l&#233;ment revient fr&#233;quemment : l'expertise est sollicit&#233;e trop tard. On appelle &#224; l'aide quand la situation est d&#233;j&#224; tendue. Quand les marges de man&#339;uvre sont r&#233;duites. Quand les choix possibles deviennent contraints. Ce n'est pas un manque de comp&#233;tence, mais un d&#233;calage temporel. &lt;strong&gt;L'expertise arrive souvent au moment o&#249; il n'y a plus vraiment de bonnes options.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Puis vient le moment charni&#232;re. Celui o&#249; une contrainte nouvelle s'impose. Une &#233;volution attendue depuis longtemps. Une obligation externe. Un besoin devenu incontournable. Ce qui &#233;tait jusque-l&#224; &#233;vitable ne l'est plus. Et le projet se retrouve face &#224; lui-m&#234;me.&lt;/p&gt;
&lt;p&gt;C'est l&#224; que tout semble se bloquer. Les d&#233;lais explosent. Les discussions se crispent. Les d&#233;cisions deviennent difficiles &#224; assumer. On parle alors de refonte, parfois de rupture, comme si une solution radicale pouvait effacer des ann&#233;es de non-d&#233;cisions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les projets ne s'effondrent pas soudainement. Ils r&#233;v&#232;lent brutalement ce qui &#233;tait d&#233;j&#224; fragile.&lt;/strong&gt; SPIP n'est ni le d&#233;clencheur, ni le responsable. Il est le moment de v&#233;rit&#233;. Celui o&#249; l'on ne peut plus diff&#233;rer, o&#249; les compromis accumul&#233;s demandent &#224; &#234;tre assum&#233;s. Et c'est souvent &#224; cet instant pr&#233;cis que l'on comprend que l'&#233;chec n'est pas technique, mais structurel.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ce qui change tout, mais qui demande du courage&lt;/h2&gt;
&lt;p&gt;&#201;viter ces &#233;checs ne rel&#232;ve pas d'une solution miracle. Il n'y a ni plugin salvateur, ni m&#233;thode universelle. Ce qui change r&#233;ellement les trajectoires tient davantage &#224; une posture qu'&#224; une technique. &lt;strong&gt;Accepter de regarder l'existant en face est souvent le premier pas le plus difficile.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cela suppose de documenter ce qui existe, m&#234;me imparfaitement. De nommer les choix pass&#233;s sans chercher de coupable. D'admettre que certaines d&#233;cisions, pourtant rationnelles &#224; un moment donn&#233;, ne le sont plus aujourd'hui. Cela implique aussi de limiter l'empilement, de pr&#233;f&#233;rer parfois la simplification &#224; l'ajout, et d'assumer que maintenir un projet vivant demande du temps, de l'attention et une vision partag&#233;e.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La maintenabilit&#233; n'est pas un luxe. C'est une condition de survie.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ce courage n'est pas uniquement technique. Il est organisationnel, collectif, parfois politique. Mais lorsqu'il est l&#224;, SPIP redevient ce qu'il n'aurait jamais d&#251; cesser d'&#234;tre : &lt;strong&gt;un outil fiable au service d'un projet ma&#238;tris&#233;.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion.&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;SPIP comme r&#233;v&#233;lateur de maturit&#233;.&lt;/strong&gt; SPIP n'a rien d'un outil capricieux. Il fait ce qu'on lui demande, longtemps, parfois trop longtemps. Il accompagne des projets dans leurs r&#233;ussites comme dans leurs angles morts, sans jamais protester.&lt;/p&gt;
&lt;p&gt;Ce que l'on appelle un &#233;chec SPIP est souvent autre chose. C'est un projet arriv&#233; &#224; un point de v&#233;rit&#233;. Un moment o&#249; les choix pass&#233;s, les non-choix, les compromis accumul&#233;s ne peuvent plus &#234;tre diff&#233;r&#233;s. L'outil n'est alors que le r&#233;v&#233;lateur de ce qui &#233;tait d&#233;j&#224; l&#224;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SPIP ne masque rien. Il amplifie.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;En ce sens, il est exigeant. Non techniquement, mais humainement. Il oblige &#224; se poser les bonnes questions. Sur la gouvernance. Sur la transmission du savoir. Sur la mani&#232;re dont on con&#231;oit un projet dans le temps, au-del&#224; de sa mise en ligne.&lt;/p&gt;
&lt;p&gt;En 2026, continuer &#224; faire porter &#224; SPIP la responsabilit&#233; d'&#233;checs qui ne lui appartiennent pas n'a plus vraiment de sens. Les signaux sont connus. Les m&#233;canismes aussi. Ce qui manque encore, parfois, ce n'est pas la comp&#233;tence, mais l'envie de regarder ces signaux en face.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un projet SPIP qui dure n'est pas un projet fig&#233;. C'est un projet qui accepte d'&#233;voluer.&lt;/strong&gt; Et peut-&#234;tre est-ce l&#224;, finalement, la plus grande qualit&#233; de SPIP. Il ne promet pas l'illusion de la simplicit&#233; &#233;ternelle. &lt;strong&gt;Il offre la possibilit&#233; d'un projet sinc&#232;re, &#224; la hauteur des choix humains qui le portent.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Photo de &lt;a href=&#034;https://unsplash.com/fr/@maartendeckers?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#034;&gt;Maarten Deckers&lt;/a&gt; sur &lt;a href=&#034;https://unsplash.com/fr/photos/un-batiment-avec-des-lignes-ondulees-sur-fond-de-ciel-bleu-T5nXYXCf50I?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#034;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>SPIP en 2026 (1/2) : ce que les non-experts ne voient pas</title>
		<link>https://www.teddypayet.com/SPIP-en-2026-1-2-ce-que-les-non-experts-ne-voient-pas</link>
		<guid isPermaLink="true">https://www.teddypayet.com/SPIP-en-2026-1-2-ce-que-les-non-experts-ne-voient-pas</guid>
		<dc:date>2026-01-02T08:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Chef de projet</dc:subject>
		<dc:subject>Salari&#233;</dc:subject>

		<description>
&lt;p&gt;SPIP est souvent accus&#233; quand les projets d&#233;raillent. Trop vieux, trop rigide, pas assez moderne. Pourtant, l'outil tient souvent plus longtemps que les choix qui l'entourent. &#192; travers ce retour d'exp&#233;rience, je propose un autre regard : celui d'un CMS qui ne casse pas, mais qui r&#233;v&#232;le, avec le temps, la maturit&#233; r&#233;elle d'un projet, de son organisation et de ses d&#233;cisions. &lt;br class='autobr' /&gt; Introduction : SPIP ne casse pas. Les projets, si. &lt;br class='autobr' /&gt;
SPIP est rarement le probl&#232;me. &lt;br class='autobr' /&gt;
Quand un projet SPIP &#233;choue, (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Chef-de-projet" rel="tag"&gt;Chef de projet&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Salarie" rel="tag"&gt;Salari&#233;&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/anders-jilden-sc5rkxlbjgg-unsplash-1950c.jpg?1767341387' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;SPIP est souvent accus&#233; quand les projets d&#233;raillent. Trop vieux, trop rigide, pas assez moderne. Pourtant, l'outil tient souvent plus longtemps que les choix qui l'entourent. &#192; travers ce retour d'exp&#233;rience, je propose un autre regard : celui d'un CMS qui ne casse pas, mais qui r&#233;v&#232;le, avec le temps, la maturit&#233; r&#233;elle d'un projet, de son organisation et de ses d&#233;cisions.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Introduction : SPIP ne casse pas. Les projets, si.&lt;/h2&gt;
&lt;p&gt;SPIP est rarement le probl&#232;me.&lt;/p&gt;
&lt;p&gt;Quand un projet SPIP &#233;choue, on pointe souvent l'outil. Trop vieux, trop atypique, pas assez moderne. C'est rassurant. Cela &#233;vite de regarder ailleurs.&lt;/p&gt;
&lt;p&gt;Pourtant, &#224; chaque fois que je suis intervenu sur un site SPIP en difficult&#233;, le constat a &#233;t&#233; le m&#234;me : l'outil tenait encore debout. Ce qui flanchait, c'&#233;tait ce qui l'entourait. Les choix accumul&#233;s, les non-d&#233;cisions, les compromis jamais assum&#233;s.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;SPIP a cette particularit&#233; &#233;trange : il fonctionne longtemps, m&#234;me quand le projet va mal.&lt;/strong&gt; Il absorbe les contournements, tol&#232;re les bricolages, encaisse les ajouts successifs. Pendant des ann&#233;es, parfois. Jusqu'au jour o&#249; l'on demande plus. Une &#233;volution, une mise &#224; jour, une refonte, une contrainte nouvelle. &lt;i&gt;Et l&#224;, soudain, tout semble bloqu&#233;.&lt;/i&gt; Comme si le probl&#232;me venait d'appara&#238;tre.&lt;/p&gt;
&lt;p&gt;En r&#233;alit&#233;, il &#233;tait d&#233;j&#224; l&#224;. Silencieux. Progressif. Pr&#233;visible.&lt;/p&gt;
&lt;p&gt;Cet article n'est pas un proc&#232;s de SPIP. C'est une tentative de mise en lumi&#232;re. De ces zones que les non-experts ne voient pas, ou trop tard. De ces angles morts qui ne font pas de bruit tant que tout va &lt;i&gt;&#8220;&#224; peu pr&#232;s bien&#8221;&lt;/i&gt;, mais qui finissent par faire &#233;chouer des projets pourtant solides en apparence.&lt;br class='autobr' /&gt;
Si SPIP a un d&#233;faut, c'est peut-&#234;tre celui-ci : il ne ment pas. Il r&#233;v&#232;le, avec le temps, la maturit&#233; (ou l'immaturit&#233;) d'un projet. Et en 2026, ces r&#233;v&#233;lations ne devraient plus surprendre personne.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le malentendu fondateur : SPIP n'est pas &#171; simple &#187;&lt;/h2&gt;
&lt;p&gt;SPIP est souvent pr&#233;sent&#233; comme un outil simple. Simple &#224; installer, simple &#224; utiliser, simple &#224; maintenir. Cette id&#233;e s'est install&#233;e progressivement, presque naturellement, port&#233;e par la facilit&#233; de prise en main et par la promesse initiale de publication rapide.&lt;/p&gt;
&lt;p&gt;Ce raccourci est compr&#233;hensible. Il repose sur une r&#233;alit&#233;. SPIP permet effectivement de publier sans connaissance technique approfondie. Il rend possible ce que beaucoup d'outils compliquent inutilement. Mais cette accessibilit&#233; a &#233;t&#233; confondue avec une absence de complexit&#233;, et c'est l&#224; que le premier malentendu appara&#238;t.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un projet SPIP ne devient pas complexe au d&#233;part. Il le devient avec le temps. &lt;/strong&gt; &#192; mesure que les contenus s'accumulent, que les besoins &#233;voluent, que les usages se pr&#233;cisent. La structure &#233;ditoriale se densifie. Les squelettes se sp&#233;cialisent. Les r&#232;gles implicites se multiplient. Rien de brutal, rien de spectaculaire. Juste une transformation progressive, presque invisible.&lt;/p&gt;
&lt;p&gt;Ce que les non-experts per&#231;oivent encore comme un site simple est d&#233;j&#224; devenu un syst&#232;me. Un syst&#232;me coh&#233;rent, parfois &#233;l&#233;gant, mais rarement document&#233;. Un syst&#232;me qui repose sur des choix faits &#224; des moments pr&#233;cis, souvent dans l'urgence, parfois sans vision &#224; long terme. Et tant que tout fonctionne, ces choix ne sont jamais interrog&#233;s.&lt;/p&gt;
&lt;p&gt;SPIP ne donne pas l'illusion de la complexit&#233;. Il donne l'illusion de la continuit&#233;. Le site continue de r&#233;pondre, les pages s'affichent, les contenus se publient. Cette continuit&#233; rassure. Elle masque le fait que le projet a chang&#233; de nature.&lt;/p&gt;
&lt;p&gt;C'est ici que na&#238;t la plupart des incompr&#233;hensions. Quand une &#233;volution devient difficile, quand une mise &#224; jour inqui&#232;te, quand une refonte semble risqu&#233;e, on s'&#233;tonne. On parle alors d'un outil devenu contraignant. En r&#233;alit&#233;, ce n'est pas SPIP qui s'est complexifi&#233;. C'est le projet qui a grandi sans que son cadre n'&#233;volue avec lui.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;L'architecture invisible, l&#224; o&#249; tout se d&#233;cide&lt;/h2&gt;
&lt;p&gt;Un site SPIP ne se construit presque jamais d'un seul tenant. Il s'&#233;tire dans le temps. Il se modifie par touches successives, souvent discr&#232;tes, parfois urgentes. Une fonctionnalit&#233; ajout&#233;e pour r&#233;pondre &#224; un besoin pr&#233;cis. Un plugin install&#233; pour gagner du temps. Une surcharge cr&#233;&#233;e parce qu'il fallait faire vite. Rien d'illogique. Rien de condamnable.&lt;/p&gt;
&lt;p&gt;Le probl&#232;me n'est jamais un choix isol&#233;. Il est dans la somme des choix. Dans leur accumulation silencieuse, sans remise &#224; plat, sans vision globale. Chaque ajout r&#233;pond &#224; une contrainte r&#233;elle, mais peu d'entre eux sont pens&#233;s pour durer. Ils s'empilent, port&#233;s par l'id&#233;e implicite que l'on pourra toujours faire marche arri&#232;re. En pratique, cette marche arri&#232;re n'arrive presque jamais.&lt;/p&gt;
&lt;p&gt;Avec le temps, une architecture se forme. Elle n'a pas &#233;t&#233; dessin&#233;e, mais elle existe. Elle relie des squelettes &#224; des plugins, des habitudes &#233;ditoriales &#224; des comportements techniques, des exceptions &#224; d'autres exceptions. Cette architecture est rarement visible pour ceux qui utilisent le site au quotidien. Elle ne s'affiche nulle part. Elle n'est d&#233;crite dans aucun document. Pourtant, elle conditionne tout.&lt;/p&gt;
&lt;p&gt;Arrive alors un moment particulier dans la vie d'un projet. &lt;strong&gt;Celui o&#249; plus personne n'est capable de dire pr&#233;cis&#233;ment pourquoi telle partie fonctionne comme elle fonctionne.&lt;/strong&gt; On sait que cela marche. On sait aussi que toucher &#224; cet &#233;quilibre pourrait avoir des cons&#233;quences impr&#233;visibles. La peur s'installe doucement. Pas une peur consciente, formul&#233;e, mais une retenue. On &#233;vite certains fichiers. On contourne plut&#244;t que de comprendre. On ajoute au lieu de simplifier.&lt;/p&gt;
&lt;p&gt;C'est &#224; ce stade que j'entends souvent la m&#234;me phrase : &lt;strong&gt;&#034;Personne n'ose y toucher.&#034;&lt;/strong&gt; Elle ne traduit pas un manque de comp&#233;tence. Elle r&#233;v&#232;le une architecture devenue opaque. Une architecture qui repose sur des encha&#238;nements implicites, sur des d&#233;cisions anciennes dont le contexte s'est perdu. Le site fonctionne encore, mais il n'est plus vraiment ma&#238;tris&#233;. SPIP, dans ce contexte, joue un r&#244;le particulier. Il n'impose pas de cadre rigide. Il laisse de la libert&#233;. Cette libert&#233; est pr&#233;cieuse au d&#233;part. Elle devient dangereuse quand elle n'est pas accompagn&#233;e d'une discipline collective. Sans cette discipline, l'architecture devient un produit secondaire du projet, au lieu d'en &#234;tre un pilier assum&#233;.&lt;/p&gt;
&lt;p&gt;Ce n'est g&#233;n&#233;ralement pas &#224; ce moment-l&#224; que le projet &#233;choue. Il continue. Il avance m&#234;me, parfois. Mais il avance en se refermant sur lui-m&#234;me. Chaque &#233;volution co&#251;te un peu plus cher. Chaque d&#233;cision prend un peu plus de temps. Et surtout, chaque contrainte nouvelle est v&#233;cue comme une agression ext&#233;rieure, alors qu'elle ne fait que r&#233;v&#233;ler ce qui &#233;tait d&#233;j&#224; fragile. &lt;br class='manualbr' /&gt;&lt;strong&gt;L'architecture invisible n'est pas un d&#233;faut technique. C'est un angle mort organisationnel.&lt;/strong&gt; Tant qu'elle n'est pas nomm&#233;e, tant qu'elle n'est pas rendue lisible, elle gouverne le projet en silence. Et c'est presque toujours l&#224; que tout se d&#233;cide, bien avant que les difficult&#233;s ne deviennent visibles.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le faux confort de la stabilit&#233;&lt;/h2&gt;
&lt;p&gt;Un site SPIP qui fonctionne depuis longtemps inspire confiance. Les pages s'affichent. Les contenus se publient. Les utilisateurs ne se plaignent pas. &lt;strong&gt;Cette stabilit&#233; apparente devient un argument en soi.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On s'y accroche facilement. Tant que le site r&#233;pond, pourquoi le toucher. Tant qu'il remplit sa mission, pourquoi investir. La stabilit&#233; rassure parce qu'elle donne l'impression que le temps n'a pas de prise sur le projet.&lt;br class='autobr' /&gt;
Pourtant, cette stabilit&#233; est souvent un &#233;tat fig&#233;. Les versions ne bougent plus. L'environnement est contraint. Les mises &#224; jour sont repouss&#233;es. Non par n&#233;gligence, mais par prudence. Chaque intervention est per&#231;ue comme un risque sup&#233;rieur au b&#233;n&#233;fice attendu.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Progressivement, la stabilit&#233; cesse d'&#234;tre un choix. Elle devient une contrainte.&lt;/strong&gt; Le projet ne s'adapte plus. Il se prot&#232;ge. Il se replie sur ce qu'il conna&#238;t d&#233;j&#224;. &lt;strong&gt;Le site continue de vivre en surface, mais il cesse d'&#233;voluer en profondeur.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;C'est &#224; ce moment pr&#233;cis que le vocabulaire change. On ne parle plus d'am&#233;lioration, mais de crainte. Plus de projection, mais de maintien. Les d&#233;cisions se prennent en fonction de ce que l'on peut &#233;viter, non de ce que l'on pourrait construire.&lt;/p&gt;
&lt;p&gt;Le jour o&#249; une &#233;volution devient incontournable, la stabilit&#233; se fissure. Une obligation nouvelle, une attente diff&#233;rente, un besoin qui ne peut plus &#234;tre contourn&#233;. Ce qui semblait solide r&#233;v&#232;le alors sa fragilit&#233;. Non parce que le site &#233;tait mal fait, mais parce qu'il n'avait pas &#233;t&#233; pens&#233; pour &#233;voluer ind&#233;finiment sans &#234;tre accompagn&#233;.&lt;/p&gt;
&lt;p&gt;La stabilit&#233; n'est pas un &#233;tat naturel. C'est un &#233;quilibre. Et comme tout &#233;quilibre, il demande des ajustements r&#233;guliers. Sans eux, il finit toujours par rompre.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;SPIP ne complique pas les projets. Il les accompagne tels qu'ils sont. Avec leurs forces, mais aussi avec leurs angles morts.&lt;/p&gt;
&lt;p&gt;Ce que r&#233;v&#232;lent l'architecture invisible et le faux confort de la stabilit&#233;, ce n'est pas une faiblesse de l'outil, mais une transformation du projet lui-m&#234;me. &#192; force d'&#233;voluer sans &#234;tre repens&#233;, il change de nature. Et ce changement, tant qu'il n'est pas nomm&#233;, finit par gouverner en silence.&lt;br class='autobr' /&gt;
SPIP agit alors comme un r&#233;v&#233;lateur structurel.&lt;/p&gt;
&lt;p&gt;Il met en lumi&#232;re ce qui a &#233;t&#233; construit, volontairement ou non. Il expose les limites d'un cadre qui n'a pas &#233;volu&#233; au m&#234;me rythme que les usages.&lt;/p&gt;
&lt;p&gt;Mais cette lecture reste incompl&#232;te. Car derri&#232;re l'architecture, derri&#232;re la stabilit&#233; apparente, il y a toujours des choix humains. Des d&#233;cisions prises, ou repouss&#233;es. Des r&#244;les assum&#233;s, ou dilu&#233;s. C'est l&#224; que tout se joue r&#233;ellement.&lt;/p&gt;
&lt;blockquote class=&#034;spip&#034;&gt;
&lt;p&gt;&lt;strong&gt;&#192; suivre dans la partie 2&lt;/strong&gt;&lt;br class='autobr' /&gt;
Si SPIP r&#233;v&#232;le les fragilit&#233;s structurelles d'un projet, il met surtout en lumi&#232;re celles de son organisation. La suite de cet article s'int&#233;resse au facteur humain, &#224; la gouvernance, et au moment pr&#233;cis o&#249; les projets cessent d'avancer pour commencer &#224; s'enliser.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Photo de &lt;a href=&#034;https://unsplash.com/fr/@andersjilden?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#034;&gt;Anders Jild&#233;n&lt;/a&gt; sur &lt;a href=&#034;https://unsplash.com/fr/photos/photographie-en-contre-plongee-dun-batiment-gris-de-jour-Sc5RKXLBjGg?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText&#034;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>20 ans de blogging technique : ce que j'ai appris</title>
		<link>https://www.teddypayet.com/20-ans-de-blogging-technique-ce-que-j-ai-appris</link>
		<guid isPermaLink="true">https://www.teddypayet.com/20-ans-de-blogging-technique-ce-que-j-ai-appris</guid>
		<dc:date>2025-08-16T12:29:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>SPIP</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>MagicMirror</dc:subject>
		<dc:subject>Domotique</dc:subject>
		<dc:subject>Home Assistant</dc:subject>

		<description>
&lt;p&gt;Depuis 2009, ce blog m'accompagne comme un carnet de route technique. De SPIP aux lignes de commande, des astuces de d&#233;veloppement aux projets domotiques, j'y ai consign&#233; mes d&#233;couvertes, mes erreurs et mes progr&#232;s. Quinze ans plus tard, je prends un peu de recul pour partager ce que cette aventure d'&#233;criture m'a appris : documenter pour soi, transmettre aux autres et laisser une trace vivante d'un parcours de d&#233;veloppeur qui &#233;volue. &lt;br class='autobr' /&gt; Un chemin commenc&#233; en 2009 Mon tout premier article de (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/MagicMirror" rel="tag"&gt;MagicMirror&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Domotique" rel="tag"&gt;Domotique&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Home-Assistant" rel="tag"&gt;Home Assistant&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH113/nick-morrison-fhnnjk1yj7y-unsplash-531fa.jpg?1755599632' class='spip_logo spip_logo_right' width='150' height='113' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Depuis 2009, ce blog m'accompagne comme un carnet de route technique. De SPIP aux lignes de commande, des astuces de d&#233;veloppement aux projets domotiques, j'y ai consign&#233; mes d&#233;couvertes, mes erreurs et mes progr&#232;s. Quinze ans plus tard, je prends un peu de recul pour partager ce que cette aventure d'&#233;criture m'a appris : documenter pour soi, transmettre aux autres et laisser une trace vivante d'un parcours de d&#233;veloppeur qui &#233;volue.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Un chemin commenc&#233; en 2009&lt;/h2&gt;
&lt;p&gt;Mon tout premier article de la rubrique Blog, publi&#233; en d&#233;cembre 2009, portait sur &lt;a href='https://www.teddypayet.com/Appliquer-un-filtre-image_typo' class=&#034;spip_in&#034;&gt;un filtre graphique dans SPIP&lt;/a&gt; : un petit bout de code, rien de plus. &#192; ce moment-l&#224;, je n'avais pas de plan &#233;ditorial ni d'ambition particuli&#232;re. J'&#233;crivais pour ne pas oublier, pour garder une trace de mes exp&#233;rimentations. Avec le temps, ces notes &#233;parses sont devenues un journal technique &#224; part enti&#232;re, un espace vivant o&#249; se m&#234;lent astuces rapides, r&#233;flexions plus construites et d&#233;couvertes au fil de mes projets.&lt;br class='autobr' /&gt;
En revenant sur quinze ann&#233;es de publications, je r&#233;alise que ce blog a suivi le m&#234;me rythme que ma propre &#233;volution. Il a connu des p&#233;riodes d'intense activit&#233;, des creux in&#233;vitables, mais toujours cette constance : revenir &#233;crire quand une id&#233;e, un probl&#232;me ou une solution m&#233;ritaient d'&#234;tre partag&#233;s.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Les grandes p&#233;riodes de mon blog&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;2009&#8211;2013 : Les fondations techniques&lt;/strong&gt;&lt;br class='autobr' /&gt;
Lorsque j'ai ouvert la rubrique &lt;a href='https://www.teddypayet.com/Blog' class=&#034;spip_in&#034;&gt;Blog&lt;/a&gt;, je ne pensais pas vraiment &#224; construire une ligne &#233;ditoriale. J'&#233;crivais surtout pour moi, afin de conserver quelque part les petits bouts de code et les astuces que je d&#233;couvrais. SPIP occupait une place centrale dans mes exp&#233;rimentations. J'y testais les filtres, les boucles, les fa&#231;ons d'am&#233;liorer l'affichage ou d'optimiser mes squelettes. Beaucoup de mes articles de cette p&#233;riode sont courts, pr&#233;cis, et volontairement tr&#232;s pratiques. Ils refl&#232;tent un quotidien de d&#233;veloppeur-int&#233;grateur en construction, avide de solutions concr&#232;tes.&lt;/p&gt;
&lt;p&gt;Ce foisonnement technique a constitu&#233; une v&#233;ritable fondation. Non seulement il m'a permis d'apprendre plus vite en formalisant mes d&#233;couvertes, mais il m'a aussi donn&#233; un sentiment d'appartenance &#224; une communaut&#233; plus large. Chaque billet publi&#233; devenait une petite pierre ajout&#233;e &#224; l'&#233;difice collectif du web libre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2014&#8211;2018 : Moins de volume, plus de sp&#233;cialisation&lt;/strong&gt;&lt;br class='autobr' /&gt;
Apr&#232;s cette p&#233;riode d'intense production, le rythme s'est ralenti. Les ann&#233;es 2014 &#224; 2018 ne comptent qu'une poign&#233;e d'articles, mais ceux-ci sont plus cibl&#233;s. Je n'avais plus besoin de consigner chaque manipulation, chaque filtre ou chaque commande. Mon blog a pris une autre fonction : celle de m&#233;moire technique. J'y revenais surtout quand une solution m&#233;ritait vraiment d'&#234;tre fix&#233;e, ou lorsqu'un sujet demandait un peu plus de recul.&lt;/p&gt;
&lt;p&gt;On y voit appara&#238;tre de nouveaux th&#232;mes, notamment l'industrialisation du d&#233;veloppement avec l'arriv&#233;e de Git, mais aussi des r&#233;flexions plus transverses sur l'organisation de mes projets. Cette p&#233;riode marque un passage de l'accumulation de notes &#224; une s&#233;lection plus rigoureuse de ce que je jugeais utile de partager. Il m'arrivait parfois de rassembler un ensemble de r&#233;f&#233;rences, d'articles, de tuto dans un seul et m&#234;me article sur mon blog. En effet, quand on rencontre une difficult&#233; dans un d&#233;veloppement, on regarde les solutions sur Stack Overflow, ou toute autre source. La solution n'&#233;tait pas syst&#233;matiquement dans la m&#234;me source mais au sein de plusieurs. Au lieu de m'arracher les cheveux plus tard &#224; refaire ce parcours, je mettais tout &#231;a dans un article.&lt;/p&gt;
&lt;p&gt;L'article &#034;&lt;a href='https://www.teddypayet.com/Petits-reglages-pour-symfony-sous-Mac-OSX' class=&#034;spip_in&#034;&gt;Petits r&#233;glages pour symfony sous Mac OSX&lt;/a&gt;&#034; est un exemple concret de cela. Lors de ma formation en tant que d&#233;veloppeur multim&#233;dia, j'apprenais le d&#233;veloppement avec Symfony (pfiuuuu la v2 !) et on devait faire un r&#233;glage particulier. 5 ans apr&#232;s sa mise en ligne, je recevais encore des remerciements de personnes qui avaient rencontr&#233; le m&#234;me probl&#232;me !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2019&#8211;2021 : Relances ponctuelles&lt;/strong&gt;&lt;br class='autobr' /&gt;
Le blog conna&#238;t ensuite une phase plus irr&#233;guli&#232;re. Quelques articles apparaissent, souvent li&#233;s &#224; mes outils du quotidien. J'&#233;cris sur VSCode, sur Git, sur des pratiques de d&#233;veloppement qui se sont impos&#233;es au fil des ann&#233;es. Le blog devient alors une sorte de miroir de mon environnement de travail. Je ne publie pas souvent, mais chaque article porte une trace claire de ce que j'utilise r&#233;ellement. Je ne cherche pas &#224; faire comme les autres : des articles &#224; la mode. Certes, le blog ici pr&#233;sent est professionnel, ce n'est pas un journal personnel mais on y ressent toutefois mon &#233;volution.&lt;/p&gt;
&lt;p&gt;C'est une p&#233;riode o&#249; je ne cherche pas &#224; maintenir un rythme de publication. Je laisse venir les sujets. Je pr&#233;f&#232;re la qualit&#233; &#224; la quantit&#233;, quitte &#224; publier rarement. Ces articles isol&#233;s marquent pourtant des jalons importants de mon &#233;volution professionnelle, puisqu'ils correspondent &#224; une transition dans mes outils et mes m&#233;thodes. Cette p&#233;riode a &#233;t&#233; pour tout le monde incertaine... &#224; cause du COVID. &#201;tant confin&#233;, nous avions du temps, j'avais du temps. Je me suis mis &#224; la domotique et j'ai jet&#233; sur le papier (num&#233;rique) mes pas &#224; pas pour la mise en place de ma domotique avec &lt;a href=&#034;https://magicmirror.builders/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MagicMirror2&lt;/a&gt;. Mais cela a &#233;t&#233;, comme pour beaucoup, une p&#233;riode de remise en question...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2022&#8211;2025 : Renaissance et diversification&lt;/strong&gt;&lt;br class='autobr' /&gt;
&#192; partir de 2022, et plus encore en 2024, une nouvelle dynamique s'installe. Le blog reprend vie avec des sujets qui d&#233;passent le seul cadre du d&#233;veloppement web. La domotique devient un fil rouge, avec Home Assistant et MagicMirror comme terrains d'exploration privil&#233;gi&#233;s. J'y raconte mes sc&#233;narios, mes tableaux de bord, mes exp&#233;riences d'automatisation. Ces articles sont souvent plus narratifs, plus proches de mon quotidien, tout en restant tr&#232;s techniques.&lt;/p&gt;
&lt;p&gt;Cette renaissance ne signifie pas un abandon de SPIP. Au contraire, SPIP reste pr&#233;sent comme une base solide, mais il cohabite d&#233;sormais avec d'autres univers. Le blog devient le lieu o&#249; je croise mes comp&#233;tences de d&#233;veloppeur web avec mes envies d'exp&#233;rimenter dans la maison connect&#233;e. On y sent une maturit&#233; nouvelle : je n'&#233;cris plus seulement pour garder une trace, mais aussi pour transmettre une vision, pour relier mes savoir-faire &#224; des usages concrets qui parlent &#224; d'autres.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ce que j'ai appris en 15 ans de blogging technique&lt;/h2&gt;
&lt;p&gt;Au d&#233;but, j'&#233;crivais sans autre intention que de me cr&#233;er une m&#233;moire technique. Une astuce not&#233;e, un filtre document&#233;, et je savais que je pourrais y revenir sans perdre du temps.&lt;/p&gt;
&lt;p&gt;Puis j'ai d&#233;couvert que ces articles servaient aussi &#224; d'autres.&lt;/p&gt;
&lt;p&gt;Avec le temps, j'ai vu mes th&#233;matiques &#233;voluer. D'abord centr&#233;es sur SPIP, elles se sont &#233;largies vers le PHP, les outils de d&#233;veloppement, puis la domotique et Home Assistant. Ce mouvement naturel a fait du blog un miroir de mes pratiques r&#233;elles. Il illustre le fait qu'un blog n'est pas fig&#233; : il vit, se transforme, et accompagne son auteur dans ses propres changements. Cette libert&#233; d'&#233;volution est ce qui l'a maintenu pertinent pour moi comme pour mes lecteurs.&lt;/p&gt;
&lt;p&gt;L'&#233;criture elle-m&#234;me a &#233;t&#233; une &#233;cole. Pour publier un article, m&#234;me court, il faut organiser ses id&#233;es, clarifier un raisonnement, trouver des mots justes. Ce travail m'a appris &#224; mieux expliquer, &#224; vulgariser, &#224; rendre mes pratiques compr&#233;hensibles. Cette comp&#233;tence, acquise peu &#224; peu, d&#233;passe largement le cadre du blog et rejaillit sur ma mani&#232;re de collaborer.&lt;/p&gt;
&lt;p&gt;Il m'a aussi fallu apprivoiser l'irr&#233;gularit&#233;. Certaines ann&#233;es foisonnent d'articles, d'autres sont plus creuses. J'ai longtemps per&#231;u ces silences comme des manques, avant de comprendre qu'ils faisaient partie du rythme. Un blog ne se mesure pas &#224; la fr&#233;quence hebdomadaire ou mensuelle, mais &#224; la continuit&#233; sur le long terme. Chaque retour d'&#233;criture enrichit le fil, m&#234;me apr&#232;s une pause.&lt;/p&gt;
&lt;p&gt;Enfin, il y a l'impact professionnel. Le blog m'a donn&#233; une visibilit&#233; dans la communaut&#233; SPIP, renforc&#233; mon image de d&#233;veloppeur partageur, et laiss&#233; des traces concr&#232;tes de mon &#233;volution. Mais le b&#233;n&#233;fice le plus profond reste personnel : voir s'accumuler ces fragments de m&#233;moire, ann&#233;e apr&#232;s ann&#233;e, et sentir que j'ai b&#226;ti une archive vivante de mon propre chemin.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Les d&#233;fis rencontr&#233;s&lt;/h2&gt;
&lt;p&gt;Le premier d&#233;fi a &#233;t&#233; la r&#233;gularit&#233;. Publier sur un blog demande une constance qui se heurte tr&#232;s vite aux contraintes de la vie professionnelle et personnelle. J'ai connu des ann&#233;es de forte activit&#233;, o&#249; j'encha&#238;nais les articles presque naturellement, port&#233; par mes d&#233;couvertes et mon enthousiasme. Mais j'ai aussi travers&#233; des p&#233;riodes beaucoup plus silencieuses, o&#249; l'envie d'&#233;crire ne trouvait pas sa place dans un quotidien charg&#233;. Le d&#233;fi n'&#233;tait pas seulement de trouver le temps, mais surtout de garder la flamme. &#192; chaque pause, je me suis demand&#233; si je reviendrais. Et chaque fois, j'ai fini par rouvrir l'&#233;diteur et recommencer, preuve que l'&#233;criture &#233;tait devenue pour moi une habitude de fond, une discipline ancr&#233;e au-del&#224; des al&#233;as.&lt;/p&gt;
&lt;p&gt;Un autre d&#233;fi important a &#233;t&#233; l'adaptation aux &#233;volutions techniques. Entre 2009 et 2025, les outils ont radicalement chang&#233;. J'ai commenc&#233; &#224; &#233;crire dans un contexte domin&#233; par SPIP, le PHP artisanal et des feuilles de style construites &#224; la main. Puis il a fallu int&#233;grer Git, comprendre les frameworks, apprivoiser les environnements modernes, et plus r&#233;cemment m'ouvrir &#224; la domotique. Chaque saut technologique m'a oblig&#233; &#224; r&#233;inventer mes sujets, &#224; revoir ma fa&#231;on de pr&#233;senter les choses. Ce n'&#233;tait pas seulement une mise &#224; jour technique, mais aussi un effort d'&#233;criture : comment expliquer autrement, avec des mots simples, des r&#233;alit&#233;s devenues plus complexes.&lt;/p&gt;
&lt;p&gt;Le blog a aussi rencontr&#233; ses limites en termes de visibilit&#233;. &#192; une &#233;poque o&#249; les r&#233;seaux sociaux ont pris une place &#233;norme, il peut sembler plus simple de poster une solution sur Twitter, Mastodon ou un forum que de r&#233;diger un article complet. Tenir un blog suppose de r&#233;sister &#224; cette tendance, de garder l'ambition d'un espace autonome, qui ne se dilue pas dans le flux &#233;ph&#233;m&#232;re.&lt;/p&gt;
&lt;p&gt;Un autre d&#233;fi a &#233;t&#233; l'&#233;quilibre entre notes personnelles et contenu utile aux autres. &#201;crire pour soi est simple, mais &#233;crire pour &#234;tre lu impose un effort suppl&#233;mentaire.&lt;/p&gt;
&lt;p&gt;Il y a aussi le d&#233;fi de la motivation, parfois &#233;mouss&#233;e apr&#232;s des ann&#233;es de publication.&lt;/p&gt;
&lt;p&gt;Enfin, il y a le doute, toujours pr&#233;sent : est-ce que ce que j'&#233;cris est pertinent ?&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ce que je referais diff&#233;remment&lt;/h2&gt;
&lt;p&gt;Avec le recul, il y a des choix que j'aurais pu affiner d&#232;s le d&#233;part. Par exemple, poser une ligne &#233;ditoriale plus claire entre mes notes brutes et mes articles construits.&lt;/p&gt;
&lt;p&gt;J'aurais aussi aim&#233; organiser plus rigoureusement les mots-cl&#233;s et les cat&#233;gories. Cela m'aurait permis d'exploiter pleinement l'indexation et de faciliter la navigation pour mes lecteurs. De petites d&#233;cisions prises t&#244;t peuvent avoir un grand impact sur la structure d'un blog.&lt;/p&gt;
&lt;p&gt;Un autre point concerne la diversit&#233; des sujets. La domotique, par exemple, m'a s&#233;duit bien avant 2020 gr&#226;ce aux contenus DIY et aux cha&#238;nes Youtube que je suivais. Pourtant, je n'ai trouv&#233; un cadre concret pour l'appliquer qu'&#224; partir de cette date, dans mon quotidien &#224; la maison. J'aurais pu en parler plus t&#244;t, ne serait-ce que sous forme de veille ou de d&#233;couvertes, m&#234;me si ce domaine reste pour moi personnel et en dehors de toute sph&#232;re professionnelle.&lt;/p&gt;
&lt;p&gt;Il y a &#233;galement la question du ton. J'aurais pu oser davantage un style personnel, en assumant la part de r&#233;cit qui rend certains billets plus vivants. La technique pure est utile, mais les anecdotes et le contexte donnent souvent une valeur suppl&#233;mentaire.&lt;/p&gt;
&lt;p&gt;Enfin, si c'&#233;tait &#224; refaire, je travaillerais davantage sur la mise en valeur visuelle de mes articles. Non pas pour rechercher l'effet esth&#233;tique, mais pour accompagner la lecture, donner des points d'appui, et rendre mes contenus plus accessibles dans la dur&#233;e.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion : pourquoi continuer en 2025&lt;/h2&gt;
&lt;p&gt;&#201;crire reste n&#233;cessaire.&lt;/p&gt;
&lt;p&gt;Un billet, m&#234;me simple, peut encore trouver son utilit&#233;. Un blog vieillit bien mieux que les r&#233;seaux sociaux. Et il conserve une force que l'instantan&#233; ne peut pas offrir.&lt;/p&gt;
&lt;p&gt;Continuer en 2025, c'est d'abord prolonger une habitude. Mais c'est aussi r&#233;affirmer un choix : celui d'un espace ind&#233;pendant, o&#249; je d&#233;cide du rythme, des sujets, du ton. Je ne cherche pas la course &#224; l'audience, mais la coh&#233;rence d'un journal technique qui suit son auteur sur la dur&#233;e. Un blog n'a pas besoin d'&#234;tre bruyant pour &#234;tre utile.&lt;/p&gt;
&lt;p&gt;Chaque article publi&#233; est une brique ajout&#233;e &#224; un &#233;difice qui se construit lentement. Certains articles restent des notes rapides, d'autres deviennent des rep&#232;res durables. Et parfois, un billet &#233;crit presque pour moi se r&#233;v&#232;le pr&#233;cieux pour d'autres, plusieurs ann&#233;es apr&#232;s. C'est ce d&#233;calage temporel qui fait la richesse du blogging. La valeur d'un article ne se mesure pas au nombre de vues le lendemain de sa parution, mais &#224; sa capacit&#233; &#224; rester utile dans le temps.&lt;/p&gt;
&lt;p&gt;En 2025, j'ai envie de continuer pour plusieurs raisons. Parce que j'apprends toujours en &#233;crivant. Parce que j'&#233;prouve du plaisir &#224; relire mes propres archives et &#224; y voir mon chemin. Parce que je sais que ce blog n'est pas seulement mon aide-m&#233;moire, mais aussi un pont tendu vers ceux qui passent par les m&#234;mes questions techniques. Parce qu'il m'offre un espace de libert&#233;, loin des formats contraints des plateformes. Parce que la r&#233;gularit&#233; imparfaite de mes publications n'a jamais &#233;t&#233; un frein, mais plut&#244;t la preuve qu'il accompagne ma vie, telle qu'elle est. Parce que la transmission fait partie de ma fa&#231;on de travailler et de partager. Parce qu'un billet bien construit vit longtemps et continue de voyager tout seul. Parce que dans ce blog, je retrouve &#224; la fois un miroir, une trace et un terrain d'exp&#233;rimentation. Et parce que, tout simplement, je ne pourrais pas vraiment arr&#234;ter d'&#233;crire, tant c'est devenu une habitude ancr&#233;e.&lt;/p&gt;
&lt;p&gt;Je suis aussi une personne c&#233;r&#233;brale. J'aurais mille sujets personnels &#224; explorer, sur ma vision de la vie ou sur le d&#233;veloppement personnel, sans pr&#233;tendre donner de le&#231;ons, simplement pour exprimer ce que je suis. Mais j'ai choisi de garder ce site et sa rubrique blog dans une dimension technique et professionnelle. Peut-&#234;tre qu'un jour, j'ouvrirai un autre espace, d&#233;di&#233; au d&#233;veloppement personnel. Ici n'est pas le lieu que j'ai retenu pour cela.&lt;/p&gt;
&lt;p&gt;&#201;crire, encore et encore, m&#234;me sans obligation, m&#234;me sans calendrier fixe, reste une mani&#232;re de relier mon pr&#233;sent &#224; mon pass&#233; et d'ouvrir la porte &#224; l'avenir.&lt;/p&gt;
&lt;p&gt;Au plaisir de d&#233;couvrir vos retours, vos histoires et d'&#233;changer autour de ces parcours partag&#233;s.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Photo de &lt;a href=&#034;https://unsplash.com/fr/@nickmorrison?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&#034;&gt;Nick Morrison&lt;/a&gt; sur &lt;a href=&#034;https://unsplash.com/fr/photos/macbook-pro-near-white-open-book-FHnnjk1Yj7Y?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&#034;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Automatisation et scripts bash, gagner du temps au quotidien</title>
		<link>https://www.teddypayet.com/Automatisation-et-scripts-bash-gagner-du-temps-au-quotidien</link>
		<guid isPermaLink="true">https://www.teddypayet.com/Automatisation-et-scripts-bash-gagner-du-temps-au-quotidien</guid>
		<dc:date>2024-07-15T07:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Lignes de commandes</dc:subject>

		<description>
&lt;p&gt;Salut &#224; tous ! Aujourd'hui, nous allons plonger dans l'univers fascinant de l'automatisation avec les scripts Bash. Que vous soyez un d&#233;veloppeur web ou un administrateur syst&#232;me, les scripts Bash peuvent vous faire gagner un temps pr&#233;cieux en automatisant des t&#226;ches r&#233;p&#233;titives. Pr&#234;ts &#224; d&#233;couvrir comment devenir plus efficaces au quotidien ? C'est parti ! &lt;br class='autobr' /&gt; Pourquoi automatiser avec Bash ? &lt;br class='autobr' /&gt;
Comme vous avez pu le voir en parcourant mes diff&#233;rents articles, j'utilise beaucoup de script bash (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Lignes-de-commandes" rel="tag"&gt;Lignes de commandes&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH113/gabriel-heinzer-4mw7nkqdbyk-unsplash-2500-7633f.jpg?1748259151' class='spip_logo spip_logo_right' width='150' height='113' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Salut &#224; tous ! Aujourd'hui, nous allons plonger dans l'univers fascinant de l'automatisation avec les scripts Bash. Que vous soyez un d&#233;veloppeur web ou un administrateur syst&#232;me, les scripts Bash peuvent vous faire gagner un temps pr&#233;cieux en automatisant des t&#226;ches r&#233;p&#233;titives. Pr&#234;ts &#224; d&#233;couvrir comment devenir plus efficaces au quotidien ? C'est parti !&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pourquoi automatiser avec Bash ?&lt;/h2&gt;
&lt;p&gt;Comme vous avez pu le voir en parcourant mes diff&#233;rents articles, j'utilise beaucoup de script bash pour automatiser des actions. J'ai une r&#232;gle : &#034;Si on r&#233;alise plus de 2 fois une action, nous pouvons l'automatiser&#034;. L'automatisation permet de se concentrer sur les t&#226;ches &#224; forte valeur ajout&#233;e en laissant les scripts faire le travail r&#233;p&#233;titif. Bash, l'un des langages de script les plus couramment utilis&#233;s sur les syst&#232;mes Unix et Linux, est parfait pour cela. Voici quelques avantages de l'automatisation avec Bash :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Gain de temps&lt;/strong&gt; : Les scripts ex&#233;cutent rapidement des t&#226;ches qui prendraient beaucoup de temps manuellement.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;R&#233;duction des erreurs&lt;/strong&gt; : Automatiser minimise les risques d'erreurs humaines.&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Productivit&#233; accrue&lt;/strong&gt; : Vous pouvez automatiser les sauvegardes, les d&#233;ploiements et bien plus encore.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Les bases de Bash : comment d&#233;buter ?&lt;/h2&gt;
&lt;p&gt;Pour commencer avec Bash, il suffit d'ouvrir votre terminal et de cr&#233;er un fichier script. Voici un exemple simple de script Bash pour vous familiariser :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash echo &#034;Bonjour, monde !&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enregistrez ce script dans un fichier nomm&#233; &#034;bonjour.sh&#034;, puis donnez-lui les permissions d'ex&#233;cution avec la commande suivante :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;chmod +x bonjour.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enfin, ex&#233;cutez le script avec :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;./bonjour.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Voil&#224;, vous venez de cr&#233;er et d'ex&#233;cuter votre premier script Bash !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Automatiser les t&#226;ches courantes&lt;/h2&gt;
&lt;p&gt;Voyons maintenant quelques exemples concrets d'automatisation avec Bash.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Sauvegardes automatiques :&lt;/strong&gt; Cr&#233;ez un script pour sauvegarder r&#233;guli&#232;rement vos fichiers importants.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash tar -czf sauvegarde_$(date +%F).tar.gz /chemin/vers/dossier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce script cr&#233;e une archive compress&#233;e de votre dossier et y ajoute la date du jour.&lt;/p&gt;
&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Nettoyage de fichiers temporaires :&lt;/strong&gt; Un script pour supprimer les fichiers temporaires peut lib&#233;rer de l'espace disque.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash rm -rf /tmp/* echo &#034;Fichiers temporaires supprim&#233;s.&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;D&#233;ploiement de site web :&lt;/strong&gt; Automatisez le d&#233;ploiement de votre site avec un script.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash cd /chemin/vers/votre/site git pull origin main echo &#034;Site mis &#224; jour avec succ&#232;s.&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Vous pouvez voir aussi sur mes diff&#233;rents articles d'autres utilisations que j'ai avec les scripts Bash :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href='https://www.teddypayet.com/MagicMirror2-un-miroir-qui-vous-veut-du-bien' class=&#034;spip_in&#034;&gt;MagicMirror&#178;, un miroir qui vous veut du bien.&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.teddypayet.com/MagicMirror2-on-recommence-depuis-le-debut' class=&#034;spip_in&#034;&gt;MagicMirror&#178;, on recommence depuis le d&#233;but&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.teddypayet.com/Des-astuces-et-memos-pour-SVN' class=&#034;spip_in&#034;&gt;Des astuces et m&#233;mos pour SVN&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.teddypayet.com/MagicMirror2-configuration-scriptee' class=&#034;spip_in&#034;&gt;MagicMirror&#178;, configuration script&#233;e&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href='https://www.teddypayet.com/MagicMirror&#178;-configuration-scriptee-2eme-partie' class=&#034;spip_in&#034;&gt;MagicMirror&#178;, configuration script&#233;e, 2&#232;me partie&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Meilleures pratiques pour &#233;crire des scripts Bash&lt;/h2&gt;
&lt;p&gt;Pour que vos scripts soient efficaces et maintenables, voici quelques bonnes pratiques &#224; suivre :&lt;/p&gt;
&lt;ol class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;Utilisez des commentaires :&lt;/strong&gt; Expliquez ce que fait chaque section de votre script.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash # Ce script sauvegarde un dossier tar -czf sauvegarde_$(date +%F).tar.gz /chemin/vers/dossier&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;V&#233;rifiez les erreurs :&lt;/strong&gt; Utilisez des structures conditionnelles pour g&#233;rer les erreurs.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash if [ -d /chemin/vers/dossier ]; then tar -czf sauvegarde_$(date +%F).tar.gz /chemin/vers/dossier else echo &#034;Le dossier n'existe pas.&#034; fi&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Cr&#233;ez des scripts modulaires :&lt;/strong&gt; &#201;vitez les scripts trop longs en les divisant en fonctions.
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#!/bin/bash sauvegarder() { tar -czf sauvegarde_$(date +%F).tar.gz /chemin/vers/dossier echo &#034;Sauvegarde termin&#233;e.&#034; } sauvegarder&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;h2 class=&#034;spip&#034;&gt;Outils pour am&#233;liorer vos scripts&lt;/h2&gt;
&lt;p&gt;Plusieurs outils peuvent vous aider &#224; &#233;crire de meilleurs scripts Bash :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;ShellCheck :&lt;/strong&gt; Un linter pour d&#233;tecter les erreurs dans vos scripts Bash. &lt;a href=&#034;https://www.shellcheck.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ShellCheck&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Bash-it : &lt;/strong&gt; Un framework pour am&#233;liorer votre configuration Bash avec des plugins et des th&#232;mes. &lt;a href=&#034;https://github.com/Bash-it/bash-it&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Bash-it&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Pour r&#233;sumer&lt;/h2&gt;
&lt;p&gt;L'automatisation avec les scripts Bash est un moyen puissant de gagner du temps et d'augmenter votre productivit&#233;. En suivant les bonnes pratiques et en utilisant les outils ad&#233;quats, vous pouvez simplifier de nombreuses t&#226;ches quotidiennes. J'esp&#232;re que cet article vous a donn&#233; des id&#233;es pour commencer &#224; automatiser vos propres t&#226;ches.&lt;/p&gt;
&lt;p&gt;N'h&#233;sitez pas &#224; partager vos exp&#233;riences et vos scripts Bash pr&#233;f&#233;r&#233;s dans les commentaires. Quels sont les scripts que vous utilisez le plus souvent ? Quels d&#233;fis avez-vous rencontr&#233;s ? Partageons nos astuces et apprenons ensemble !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;N'attendez plus, lancez-vous dans l'automatisation et faites de Bash votre alli&#233; du quotidien !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;L'automatisation avec Bash peut transformer votre fa&#231;on de travailler. Partagez vos exp&#233;riences, posez vos questions et construisons ensemble une communaut&#233; de d&#233;veloppeurs plus efficaces et collaboratifs !&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Photo de &lt;a href=&#034;https://unsplash.com/fr/@6heinz3r?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&#034;&gt;Gabriel Heinzer&lt;/a&gt; sur &lt;a href=&#034;https://unsplash.com/fr/photos/texte-4Mw7nkQDByk?utm_content=creditCopyText&amp;utm_medium=referral&amp;utm_source=unsplash&#034;&gt;Unsplash&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Je suis pass&#233; &#224; SPIP 4.0</title>
		<link>https://www.teddypayet.com/Je-suis-passe-a-SPIP-4-0</link>
		<guid isPermaLink="true">https://www.teddypayet.com/Je-suis-passe-a-SPIP-4-0</guid>
		<dc:date>2021-09-14T06:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Traitement automatique des images</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>PHP</dc:subject>
		<dc:subject>Git</dc:subject>

		<description>
&lt;p&gt;&#199;a y est ! Je suis pass&#233; &#224; SPIP 4.0 ! Je ne sais pas si vous avez suivi, mais SPIP 4.0 est sorti cet &#233;t&#233; pour ses 20 ans. Il y a pas mal de petites nouveaut&#233;s, je vous laisse lire l'article sur le Blog de SPIP qui en parle tr&#232;s tr&#232;s bien. &lt;br class='autobr' /&gt; Introduction Je me suis d&#233;cid&#233; &#224; passer &#224; SPIP 4.0 en cette rentr&#233;e 2021. Pour &#234;tre honn&#234;te, j'avais un peu peur de ce passage car j'avais quitt&#233; un peu l'actualit&#233; de SPIP (ses d&#233;veloppements, son &#233;volution, etc.). Je ne savais pas o&#249; j'allais mettre (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Traitement-automatique-des-images" rel="tag"&gt;Traitement automatique des images&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/PHP" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Git" rel="tag"&gt;Git&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH113/kulli-kittus-qyt0cpbyjjs-unsplash-eebe2.jpg?1752189003' class='spip_logo spip_logo_right' width='150' height='113' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;&#199;a y est ! Je suis pass&#233; &#224; SPIP 4.0 ! Je ne sais pas si vous avez suivi, mais SPIP 4.0 est sorti &lt;a href=&#034;https://blog.spip.net/SPIP-4-0-tout-simplement.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;cet &#233;t&#233; pour ses 20 ans&lt;/a&gt;. Il y a pas mal de petites nouveaut&#233;s, je vous laisse lire l'article sur le Blog de SPIP qui en parle tr&#232;s tr&#232;s bien.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Je me suis d&#233;cid&#233; &#224; passer &#224; SPIP 4.0 en cette rentr&#233;e 2021. Pour &#234;tre honn&#234;te, j'avais un peu peur de ce passage car j'avais quitt&#233; un peu l'actualit&#233; de SPIP (ses d&#233;veloppements, son &#233;volution, etc.). Je ne savais pas o&#249; j'allais mettre les pieds m&#234;me si j'ai toujours aim&#233; ce CMS. Je vais vous parler de mon chemin vers son adoption.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Par beau temps&lt;/h2&gt;
&lt;p&gt;Mon site &#233;tait sous SPIP 3.2.9. Et j'utilise Zcore avec un template maison bas&#233; sur Bootstrap. Jusque l&#224;, rien de bien m&#233;chant. J'ai d&#233;cid&#233; de profiter de cette mont&#233;e de version de SPIP pour revoir mon template et avoir &#233;galement la derni&#232;re version de bootstrap : 5.1.1&lt;/p&gt;
&lt;p&gt;J'ai d&#251; retravailler les diff&#233;rentes classes que j'avais. Pas trop m&#233;chant. J'ai fait les choses &#233;tape par &#233;tape. Avant de migrer pour SPIP 4.0, j'ai fait la mise &#224; jour de SPIP en 3.2.11 qui permet d'avoir la compatibilit&#233; PHP 7.4 (la version minimum pour SPIP 4.0 est PHP 7.3).&lt;/p&gt;
&lt;p&gt;Mon h&#233;bergeur, OVH pour ne pas le citer, prend en charge cette version de PHP. Ouf.&lt;/p&gt;
&lt;p&gt;D&#233;but septembre, j'ai mis en ligne mon template avec bootstrap 5.1.1 et SPIP 3.2.11. Cela me laissait le temps de tester en &#034;live&#034; la compatibilit&#233; avec PHP 7.4. Une lettre &#224; la poste par beau temps !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Puis vint la pluie&#8230;&lt;/h2&gt;
&lt;p&gt;SPIP 3.2.11, PHP 7.4, Boostrap 5.1.1, c'&#233;tait trop beau pour &#234;tre vrai ! J'ai test&#233; en local le passage &#224; SPIP 4.0. Depuis le back-office, belle page avec la nouvelle interface de l'espace priv&#233;. Responsive, prenant toute la largeur de la fen&#234;tre, c'est beau ! Certains diront que l'espace priv&#233; n'a pas chang&#233; depuis sa cr&#233;ation, mais en fait tout a chang&#233; ! Il est plus light, plus agr&#233;able avec ces nouveaux jeux d'ic&#244;nes SVG.&lt;/p&gt;
&lt;p&gt;Puis, j'ai cliqu&#233; sur le bouton &#034;voir le site public&#034;&#8230; Et patatra ! La page met du temps &#224; se charger&#8230; Je me dis que ce n'est que le cache qui se recalcule&#8230; Et ben non, j'ai une belle erreur php me disant soit que je n'ai suffisamment de m&#233;moire allou&#233;e (mouais&#8230; 128Mo puis 256Mo&#8230;), soit qu'il ne trouvait pas une variable dans les scripts php&#8230;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Panique &#224; bord !&lt;/h2&gt;
&lt;p&gt;Je cherche&#8230; d&#233;sesp&#233;r&#233;ment&#8230; Je regarde mes scripts PHP maison en pensant trouver la bonne piste&#8230; Et non, rien y fait. J'y passe des heures sur le sujet, je change m&#234;me d'environnement : d'un raspberry Pi avec LAMP, je passe sous MAMP sur mon mac et m&#234;me en preprod sur mon espace d'h&#233;bergement. Rien y fait. Toujours ces erreurs al&#233;atoires. Pourtant, tout fonctionne sous SPIP 3.2.11 en PHP 7.4.&lt;/p&gt;
&lt;p&gt;Je sais que la gestion des documents et des logos a chang&#233; sous SPIP 4.0. Et j'utilise avec grand plaisir les filtres sur mes templates. Je d&#233;cide alors d'aller vers cette piste.&lt;/p&gt;
&lt;p&gt;Mes images sur mon site sont en moyenne &#224; 2500px de largeur. &#199;a me permet d'avoir des images de bonnes dimensions et de pouvoir les redimensionner selon mon design. Je d&#233;cide de venir &#224; une version plus all&#233;g&#233;e de mes filtres. Suppression des filtres &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_passe_partout&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_recadre&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;image_aplatir&lt;/code&gt; et j'en passe. Rien y fait !&lt;/p&gt;
&lt;p&gt;Je peste sur mon id&#233;e de passer &#224; SPIP 4.0 avec la &lt;a href=&#034;https://www.la-rache.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;m&#233;thode R.A.C.H.E&lt;/a&gt;. M&#234;me en sachant que SPIP 4.0 avait chang&#233; son approche pour les logos, je ne pensais pas que cela allait &#234;tre aussi compliqu&#233;.&lt;/p&gt;
&lt;p&gt;J'utilise un mod&#232;le nomm&#233; &#034;logo.html&#034;. Ce mod&#232;le me permet de ne pas dupliquer mes filtres pour les visuels de mes articles, rubriques et cie. Je d&#233;cide de l'ouvrir dans PHPStorm par raccourcis clavier &#034;Search everywhere&#034;. Je tape donc &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/logo.html&lt;/code&gt;. Et OH ! Surprise ! le plugin medias utilise un mod&#232;le logo en SPIP 4.0.&lt;/p&gt;
&lt;p&gt;Ah tiens&#8230; En fait, j'&#233;tais tellement subjugu&#233; par la nouvelle interface que je n'avais pas remarqu&#233; qu'aucun de mes logos d'articles ne s'affichait. J'ai regard&#233; en base de donn&#233;es dans la table &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;spip_documents&lt;/code&gt; comment SPIP indique les logos d'articles. Je pige le truc rapidement. J'adopte la m&#233;thode R.A.C.H.E&#8230; La migration des donn&#233;es par SPIP n'a pas bien ins&#233;r&#233;e les &#034;anciens&#034; logos dans la table de documents. Que cela ne tienne ! Je cr&#233;e un petite fonction PHP qui va ins&#233;rer dans la bdd mes logos d'article (de rubriques et de sites) en respectant les bons chemins (exemple : logo/arton-XX.png). &#199;a se fait rapidement.&lt;/p&gt;
&lt;p&gt;Je reviens au fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/logo.html&lt;/code&gt; du plugin &lt;i&gt;medias&lt;/i&gt;. Je consulte ce fichier et constate son extr&#234;me simplicit&#233; et efficacit&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[&lt;a href=&#034;(#ENV{lien})&#034;&gt;]&lt;img src=&#034;#ENV{logo_on}&#034; class=&#034;spip_logo[ spip_logo_(#ENV{align})][(#ENV{logo_off}|oui)spip_logo_survol]&#034;[ width=&#034;(#ENV{width})&#034;][ height=&#034;(#ENV{height})&#034;] alt=&#034;&#034;[ data-src-hover=&#034;(#ENV{logo_off})&#034;]/&gt;[(#ENV{lien}|?{&lt;/a&gt;})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Je n'ai pas trouv&#233; exactement o&#249; &#233;tait appel&#233; ce fichier. Mais j'ai pour principe de ne jamais utiliser les m&#234;me noms que dans un framework. Cela &#233;vite les effets de bord ind&#233;sirables. Donc, je renomme mon mod&#232;le maison en &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/visuel.html&lt;/code&gt;. Cela colle bien &#224; son utilisation premi&#232;re.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Une &#238;le paradisiaque au loin&lt;/h2&gt;
&lt;p&gt;Suite &#224; ce renommage, je commence &#224; avoir de nouveau un d&#233;but de page sur mon espace public. Il y a encore quelques petits effets &#224; r&#233;gler. Des warnings plus compr&#233;hensibles. Je m'att&#232;le &#224; r&#233;gler &#231;a.&lt;/p&gt;
&lt;p&gt;J'adopte de fa&#231;on syst&#233;matique (pas comme les antibiotiques) l'utilisation de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modeles/visuel.html&lt;/code&gt;, je vide les r&#233;pertoires &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;local&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/cache&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tmp/logs/&lt;/code&gt; avant chaque grosse modification. Le site est &#224; nouveau op&#233;rationnel et je retrouve le m&#234;me template que j'utilisais en SPIP 3.2.21 en production en d&#233;but de mois de septembre.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Je respire enfin.&lt;/strong&gt; L'espoir en moi renait.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Un avenir radieux&lt;/h2&gt;
&lt;p&gt;Je teste toujours sur mon propre site la derni&#232;re version de SPIP avant de la proposer &#224; mes clients. Ainsi, j'aurais d&#233;j&#224; essuy&#233; les pl&#226;tres. Il sera plus simple pour passer la peinture chez les clients.&lt;br class='autobr' /&gt;
L'erreur &#233;tait toute b&#234;te, mon mod&#232;le logo g&#234;nait SPIP dans sa nouvelle monture. Ma surcharge changeait le comportement attendu. Je suis incapable de dire exactement pourquoi cela faisait planter PHP. Je n'ai pas cherch&#233; &#224; le savoir non plus pour &#234;tre franc.&lt;/p&gt;
&lt;p&gt;Je constate surtout que SPIP est plus rapide. Merci PHP 7.4, merci &#224; la core team d'avoir rendu SPIP plus l&#233;ger et v&#233;loce. Je sais que si je passe &#224; PHP 8.0, cela sera encore plus rapide. Mais j'ai plusieurs sites sur mon h&#233;bergement OVH qui ne sont pas compatibles PHP 8.0.&lt;/p&gt;
&lt;p&gt;Vous pouvez consulter le r&#233;sultat de cette migration en lisant cet article. En effet, en ce mardi 14 septembre, mon site est officiellement sous SPIP 4.0 sous vos yeux &#233;bahis !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Et la suite ?&lt;/h2&gt;
&lt;p&gt;J'ai commenc&#233; &#224; travailler sur mes plugins de la communaut&#233; pour une compatibilit&#233; avec SPIP 4.0 :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/info_spip.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Info SPIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/socicon.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Socicon&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_constantes.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les constantes PHP de SPIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_config.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les pages de configuration&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_exec.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les pages ?exec=xxx&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_fonctions.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les fonctions PHP de SPIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_objets.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les objets principaux de SPIP&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/lister_dossiers.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Lister les dossiers&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/rss_commits.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Commits de projet&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/jqvmap.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;jQuery Vector Maps&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/projets.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Projets&lt;/a&gt; (je ne fais que la maintenance de ce plugin, je n'en suis pas le cr&#233;ateur, je tiens &#224; le pr&#233;ciser)&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://plugins.spip.net/projets_sites.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Sites pour projets&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il m'en reste quelques uns &#224; migrer dont le plus gros : InfoSites. Il est dans les bacs. Il est d&#233;pendant d'un plugin qui est en attente de mise en compatibilit&#233; avec SPIP 4.0. Plus qu'un pour pouvoir livrer la v2 de ce plugin qui me tient &#224; c&#339;ur.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Fin de vie pour&#8230;&lt;/h2&gt;
&lt;p&gt;La liste pr&#233;c&#233;dente est plut&#244;t longue. Mais il y aura des &#034;laiss&#233;s pour compte&#034; dans la course &#224; SPIP 4.0. En effet, selon ma vision, un plugin n'a plus lieu d'&#234;tre :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Agrandir la largeur de page (SPIP_hop pour les intimes) : l'interface de l'espace priv&#233; a &#233;t&#233; revu pour prendre toute la largeur de la fen&#234;tre et va m&#234;me plus loin que ce qu'offrait spip_hop. Je ne vois pas l'utilit&#233; de le maintenir pour SPIP 4.0&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pour le moment, je n'ai plus le temps/besoin pour certains autres plugins. Donc leur mise &#224; jour est repouss&#233;e &#224; une date ult&#233;rieure :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; D&#233;r&#233;f&#233;rencer les m&#233;dias ;&lt;/li&gt;&lt;li&gt; Nettoyer la m&#233;diath&#232;que.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Voil&#224; le p&#233;riple que j'ai connu avec SPIP 4.0. Je n'ai pas de regrets pour mon passage vers cette derni&#232;re version. Au contraire. :-)&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La domotique et moi, 2&#232;me partie</title>
		<link>https://www.teddypayet.com/La-domotique-et-moi-2eme-partie</link>
		<guid isPermaLink="true">https://www.teddypayet.com/La-domotique-et-moi-2eme-partie</guid>
		<dc:date>2020-04-29T07:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Domotique</dc:subject>

		<description>
&lt;p&gt;Alors, avez-vous pu lire la 1&#232;re partie ? Si cela n'est pas fait, je vous invite &#224; le lire avant d'entamer la lecture du pr&#233;sent article. C'est fait ? Parfait. &lt;br class='autobr' /&gt;
Je vais continuer de vous exposer simplement et concr&#232;tement ma vision de la domotique, ce qui m'y int&#233;resse. Nous allons voir les points suivants : L'accessibilit&#233;, l'interface homme/machine Le contr&#244;le et l'automatisation L'open source &lt;br class='autobr' /&gt; L'accessibilit&#233;, l'interface homme/machine &lt;br class='autobr' /&gt;
De part mon exp&#233;rience professionnelle et au (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Domotique" rel="tag"&gt;Domotique&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/arton159-f65f3.jpg?1755172503' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Alors, avez-vous pu lire la &lt;a href='https://www.teddypayet.com/MagicMirror&#178;-planification-des-taches' class=&#034;spip_in&#034;&gt;1&#232;re partie&lt;/a&gt; ? Si cela n'est pas fait, je vous invite &#224; le lire avant d'entamer la lecture du pr&#233;sent article. C'est fait ? Parfait.&lt;/p&gt;
&lt;p&gt;Je vais continuer de vous exposer simplement et concr&#232;tement ma vision de la domotique, ce qui m'y int&#233;resse. Nous allons voir les points suivants :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; L'accessibilit&#233;, l'interface homme/machine&lt;/li&gt;&lt;li&gt; Le contr&#244;le et l'automatisation&lt;/li&gt;&lt;li&gt; L'open source&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;L'accessibilit&#233;, l'interface homme/machine&lt;/h2&gt;
&lt;p&gt;De part mon exp&#233;rience professionnelle et au fil de mes rencontres, j'ai acquis la conviction que &lt;strong&gt;l'utilisateur doit pouvoir prendre la main sur la machine&lt;/strong&gt; (Skynet ?). De ce fait, si je ne peux contr&#244;ler un produit manuellement sans passer par internet ou autre, alors c'est une mauvaise int&#233;gration du produit.&lt;/p&gt;
&lt;p&gt;Il en va de m&#234;me pour les solutions logicielles accompagnant ces produits qui doivent &#234;tre simples de prise en main. En effet, par exemple, ma femme doit &lt;strong&gt;pouvoir configurer/d&#233;sactiver une alarme sans devoir toucher &#224; une seule ligne de codes.&lt;/strong&gt; De m&#234;me, mes enfants doivent pouvoir commander une lumi&#232;re sans difficult&#233; particuli&#232;re.&lt;/p&gt;
&lt;p&gt;Un second volet de l'accessibilit&#233; est le code source de ce que j'utilise pour contr&#244;ler mes appareils connect&#233;s. J'utilise des produits de diff&#233;rentes marques, mais &lt;strong&gt;ils doivent pouvoir communiquer entre eux. Si une solution open source existe, j'irai vers cette solution.&lt;/strong&gt; Mais si une solution payante et abordable fait la m&#234;me chose en moins compliqu&#233;e et plus ergonomique, je testerai cette solution. &lt;strong&gt;Si elle s'av&#232;re fiable, je prendrais cette solution payante.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Encore une fois, quelque soit la solution, je dois pouvoir interagir avec elle depuis ma centrale, ma &#8220;box&#8221; domotique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le contr&#244;le et l'automatisation&lt;/h2&gt;
&lt;p&gt;Le nerf de la guerre ! &lt;strong&gt;Pouvoir contr&#244;ler et automatiser est essentiel dans la domotique.&lt;/strong&gt; Ici, ma philosophie de d&#233;veloppeur prend les devants : &lt;strong&gt;si je fais une action plus de 2 fois, alors c'est que je peux l'automatiser ou la simplifier.&lt;/strong&gt; Si je ne sais pas le faire, c'est que je n'ai pas la connaissance pour le moment de le faire.&lt;/p&gt;
&lt;p&gt;Gr&#226;ce &#224; cet &#233;tat d'esprit, en outre de pouvoir contr&#244;ler par la voix les lumi&#232;res, je r&#233;fl&#233;chis syst&#233;matiquement &#224; comment simplifier notre vie au quotidien.&lt;/p&gt;
&lt;p&gt;Tous les jours, &#224; 00h25, le mode nuit s'active &#224; la maison (extinction de toutes les lumi&#232;res, volume des GHM et d'Alexa &#224; 10%). A 6h30, le mode jour se met en place (volume des m&#233;dias players &#224; 60%). Ceux sont des actions tr&#232;s simples. Une autre automatisation est d'allumer la lumi&#232;re de la pi&#232;ce de vie si le soleil s'est couch&#233; et qu'il y a du monde &#224; la maison.&lt;/p&gt;
&lt;p&gt;Je pourrais automatiser encore des &#233;l&#233;ments dans l'appartement mais il me faut quelques capteurs de plus pour y arriver. &lt;strong&gt;Chaque chose en son temps.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Open source&lt;/h2&gt;
&lt;p&gt;Comme je l'ai d&#233;j&#224; abord&#233; pr&#233;c&#233;demment, &lt;strong&gt;je pr&#233;f&#232;re des solutions open source. &lt;/strong&gt; Malheureusement, ce n'est pas toujours possible, surtout dans un pays francophone. En effet, si je d&#233;sire avoir un contr&#244;le par la voix des mes produits, il existe pl&#233;thore de solutions open source d'assistants personnels virtuels (Mycroft, Kalliope, Stephanie, Open Assistant, Jasper, Jarvis, etc.) Si &lt;strong&gt;ces solutions ont le m&#233;rite d'exister, les voix sont anglaises.&lt;/strong&gt; Je ne suis pas contre, mais tout le monde n'est pas bilingue &#224; la maison. &lt;strong&gt;Si des solutions avec des voix fran&#231;aises existent, elles sont payantes&lt;/strong&gt;, avec licence.&lt;/p&gt;
&lt;p&gt;Ceci est un point important notamment pour mon choix de Google Home Mini. Google est tr&#232;s en avance sur le contr&#244;le par la voix dans plusieurs langues. De plus, Google a mis &#224; disposition &lt;strong&gt;des API qui permettent des interactions avec ses appareils.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Toutefois les Google Home Mini ne seront chez moi &lt;strong&gt;qu'une interface vers ma domotisation.&lt;/strong&gt; J'ai fait des recherches sur internet de solution de &#8220;syst&#232;me domotique&#8221; :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; OpenHab&lt;/li&gt;&lt;li&gt; Home Assistant&lt;/li&gt;&lt;li&gt; Jeedom (Cocorico ! Une solution fran&#231;aise)&lt;/li&gt;&lt;li&gt; Domoticz&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Ceux sont les noms que j'entendais le plus parler sur la toile. Mon choix pour ces 4 solutions est bas&#233; sur &lt;strong&gt;plusieurs crit&#232;res :&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Rapide &#224; prendre en main ;&lt;/li&gt;&lt;li&gt; Compatible Raspberry Pi 3 ;&lt;/li&gt;&lt;li&gt; Flexible ;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Communaut&#233; importante et r&#233;active ;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt; Bien document&#233; ;&lt;/li&gt;&lt;li&gt; Pas de licences &#224; payer (ben oui, on est en open source l&#224;)&lt;/li&gt;&lt;li&gt; &lt;strong&gt;Un maximum de compatibilit&#233;&lt;/strong&gt; avec des produits/API ;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;L'esth&#233;tique de l'interface.&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;La d&#233;cision finale s'est port&#233;e sur Home assistant.&lt;/strong&gt; Il est compatible avec beaucoup d'outils que j'utilise d&#233;j&#224;. Ce qui a fait pencher la balance est &#233;galement un des Youtubers que je suis : &lt;a href=&#034;https://www.youtube.com/channel/UC7G4tLa4Kt6A9e3hJ-HO8ng&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;DrZzs&lt;/a&gt;. Son discours dans les vid&#233;os de sa cha&#238;ne m'a conquis. De plus, &lt;strong&gt;Home Assistant a le vent en poupe en France.&lt;/strong&gt; Je ne m'&#233;terniserai pas plus sur ce choix car cela n'est pas le but du pr&#233;sent article. Mais une s&#233;rie d'articles appara&#238;tra prochainement sur le sujet.&lt;/p&gt;
&lt;p&gt;Quoiqu'il en soit, j'ai install&#233; Home Assistant sur mon Raspberry Pi 3+ sur une carte MiniSD de 32Go gr&#226;ce &#224; Hass.io. Apr&#232;s quelques configurations,&lt;strong&gt; il n'y a que Home Assistant&lt;/strong&gt; (Hass.io ou HA pour les intimes) &lt;strong&gt;qui sera connect&#233; &#224; des solutions propri&#233;taires telles que Google&lt;/strong&gt; (cf. Google Assistant). J'ai ajout&#233; &#224; HA une cl&#233; USB Conbee 2 qui me permet de contr&#244;ler des produits compatible avec le protocole Zigbee. Comme Google Assistant est connect&#233; &#224; mon compte Hass.io, il ne verra que du feu quelque soit le protocole que j'utiliserai sur HA. Magique. Un seul point d'entr&#233;e.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Voici ma vision de la domotique ou du moins ce qui m'int&#233;resse dans la domotique. Je n'ai pas abord&#233; tous les points de la domotique tels que la vid&#233;o-surveillance (cam&#233;ras) ou la s&#233;curit&#233; (les serrures connect&#233;es), j'en parlerai peut-&#234;tre plus tard. Tout le monde n'a pas la m&#234;me vision de la domotique ni les m&#234;me centres d'int&#233;r&#234;ts. Mon &#233;pouse n'aime pas &#234;tre envahie par les &#8220;robots&#8221; (encore toi Skynet ?), elle veut pouvoir d&#233;cider par elle-m&#234;me de ce qu'elle d&#233;sire faire (et elle a raison). Moi, j'aimerai aider mes enfants &#224; &#234;tre plus autonomes et &#233;galement pouvoir avoir un oeil protecteur sur eux (ils ont 5, 10 et 13 ans). A cela, j'aimerai me faciliter la vie (flemmard un d&#233;veloppeur ? &#8220;C'est pas faux&#8221;).&lt;/p&gt;
&lt;p&gt;Au fil du temps et de mes installations, &lt;strong&gt;je voudrais rendre plus discret la domotique et indispensable.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>La domotique et moi, 1&#232;re partie</title>
		<link>https://www.teddypayet.com/MagicMirror%C2%B2-planification-des-taches</link>
		<guid isPermaLink="true">https://www.teddypayet.com/MagicMirror%C2%B2-planification-des-taches</guid>
		<dc:date>2020-04-27T07:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Domotique</dc:subject>

		<description>
&lt;p&gt;Je voulais aborder ce sujet depuis un moment d&#233;j&#224; : ma vision de la domotique. Comme vous avez pu le lire sur mon blog, j'ai quelques articles qui tendent vers ce domaine ou plus exactement un assistant personnel. Le MagicMirror est un helper, une sorte de mini assistant personnel mais n'est pas de la &#8220;home automation&#8221;. Je vais essayer de partager avec vous ma vision. Je n'essaie pas de vous convaincre, j'essaie juste de poser sur le papier mon concept. Ce qui permettra de vous faire (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Domotique" rel="tag"&gt;Domotique&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/arton157-18172.jpg?1755172503' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Je voulais aborder ce sujet depuis un moment d&#233;j&#224; : ma vision de la domotique. Comme vous avez pu le lire sur mon blog, j'ai quelques articles qui tendent vers ce domaine ou plus exactement un assistant personnel. Le MagicMirror est un helper, une sorte de mini assistant personnel mais n'est pas de la &#8220;home automation&#8221;. Je vais essayer de partager avec vous ma vision. Je n'essaie pas de vous convaincre, j'essaie juste de poser sur le papier mon concept. Ce qui permettra de vous faire comprendre ma ligne &#233;ditoriale sur le sujet dans mes articles.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Mon profil avant tout&lt;/h2&gt;
&lt;p&gt;Avant de commencer de vous parler de la domotique pure et dure, je voudrais surtout me pr&#233;senter pour que vous puissiez comprendre mes possibilit&#233;s, mes comp&#233;tences mais aussi mes limites.&lt;/p&gt;
&lt;p&gt;Je suis de formation initiale graphiste ou &#8220;designer&#8221;. J'ai d&#233;couvert le monde du web et notamment du d&#233;veloppement de fa&#231;on autodidacte. Je suis aujourd'hui Lead Developer PHP. J'installe des VM linux pour mes d&#233;veloppements (merci vagrant). Donc, je n'ai pas vraiment peur de lire des lignes de code si besoin et d'en &#233;crire (si je connais ou comprends le langage de programmation de la solution domotique). Je suis curieux des nouvelles technologies en g&#233;n&#233;ral, de la SF (ne me demandez pas mon auteur favori, &#231;a ne servira &#224; rien, je n'en ai pas), de l'actualit&#233; en g&#233;n&#233;ral, de l'interaction homme-machine (mais la plus basique qui soit : le comportement d'un utilisateur lambda devant une technologie). Je regarde &#233;norm&#233;ment de Youtubers Makers, DIYers, etc.&lt;/p&gt;
&lt;p&gt;&#199;a, ceux sont mes points &#8220;forts&#8221;. Maintenant, mes lacunes :&lt;/p&gt;
&lt;p&gt;Quand on parle de domotique, souvent, on parle de &lt;strong&gt;DIY&lt;/strong&gt;&#8230; Oui, mais je ne fais &lt;i&gt;pas de soudure&lt;/i&gt;, &lt;i&gt;pas d'&#233;lectronique&lt;/i&gt; (mon dernier calcul de r&#233;sistance date d'il y a 25 ans au coll&#232;ge), &lt;i&gt;pas d'impression 3D&lt;/i&gt; (pas la place pour le moment). De ce fait, je pr&#233;f&#232;re &lt;strong&gt;des solutions ou des produits finis&lt;/strong&gt;. Je ne saurais pas brancher un ESP8266 avec un relay&#8230; Ni m&#234;me flasher ce m&#234;me ESP8266&#8230;&lt;/p&gt;
&lt;p&gt;Dernier point, ma famille et moi-m&#234;me vivons dans un appartement. Nous ne pouvons &lt;strong&gt;pas faire de grands travaux/bricolages&lt;/strong&gt; pour mettre en place la domotique.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Inspecteur gadget&lt;/h2&gt;
&lt;p&gt;Comme dirait ma femme, &#8220;c'est gadget !&#8221;. Oui, ce n'est pas faux de prime abord. Vous vous en doutez, au fil de la lecture de mon blog, vous avez pu voir que je suis un geek, un technophile. Mais j'ai une fibre de &#8220;designer&#8221;, d'exp&#233;rience utilisateur.&lt;/p&gt;
&lt;p&gt;J'ai d&#233;marr&#233; l'installation de ma &#8220;domotique&#8221; avec le MagicMirror pour avoir un tableau de bord. C'est un projet &#8220;gentillet&#8221; &lt;strong&gt;pour d&#233;marrer, pour me frotter &#224; cet univers.&lt;/strong&gt; Le syst&#232;me me paraissait accessible. Je ne me suis pas tromp&#233;. Tr&#232;s tr&#232;s rapidement, la deuxi&#232;me &#233;tape &#233;tait l'installation d'interrupteurs connect&#233;s, de la marque Sonoff. Peu cher et facile &#224; installer chez moi. Il y a un aspect financier qui m'int&#233;resse dans la domotique : acheter du &lt;strong&gt;mat&#233;riel abordable&lt;/strong&gt;. Mais qui dit abordable, ne dit pas de mauvaises qualit&#233;s.&lt;/p&gt;
&lt;p&gt;Par la suite, j'ai pu acheter 2 Google Home Mini pour le prix d'un.&lt;/p&gt;
&lt;p&gt;Mon &#233;cosyst&#232;me a commenc&#233; &#224; se mettre en place. Des interrupteurs connect&#233;s, des Google Home Mini et un Raspberry Pi (celui du Magic Mirror) pour les commander tous. Je ne saurais vous dire exactement combien j'ai d&#233;pens&#233; pour faire tout &#231;a, mais &lt;strong&gt;ce n'est pas excessif car &#233;tal&#233; sur 1 an environ.&lt;/strong&gt; Pour preuve, j'ai aujourd'hui cet &#233;quipement :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; 3 interrupteurs Sonoff Touch&lt;/li&gt;&lt;li&gt; 2 contr&#244;leurs Wifi monocouleur MagicHome&lt;/li&gt;&lt;li&gt; 1 prise Zigbee&lt;/li&gt;&lt;li&gt; 2 Raspberry Pi 3&lt;/li&gt;&lt;li&gt; Une cl&#233; Conbee2&lt;/li&gt;&lt;li&gt; 5 Google Home Mini&lt;/li&gt;&lt;li&gt; 1 Alexa Echo Dot&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;J'ai un Google Home Mini (GHM) par pi&#232;ce principale, j'en ai pay&#233; 3 sur 5 &#224; moiti&#233; prix lors de promo &#224; chaque fois. Certains, et je peux comprendre, pourront dire que j'offre mes donn&#233;es &#224; une grosse entreprise&#8230; Oui, certes. Mais on y reviendra plus tard sur ce sujet sp&#233;cifique. Les Google Home Mini me permettent de commander mes lumi&#232;res par la voix, entre autres.&lt;/p&gt;
&lt;p&gt;J'ai d'autres utilisations marrantes des GHM. Ce qui ne d&#233;pla&#238;t pas &#224; mes enfants.&lt;/p&gt;
&lt;p&gt;Entre autres, je cherche des &lt;strong&gt;produits/solutions ouvertes, au mieux open source&lt;/strong&gt;. Les Google Home Mini ne sont pas open source, elles sont d'un &#233;cosyst&#232;me propri&#233;taire mais Google permet d'interagir avec leurs produits &lt;strong&gt;gr&#226;ce &#224; des API/SDK gratuitement&lt;/strong&gt;. Donc, cela me va tr&#232;s bien.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;L'&#233;conomie financi&#232;re&lt;/h2&gt;
&lt;p&gt;Il n'y a pas &#224; dire sur le sujet, un des buts de la domotique est l'&#233;conomie financi&#232;re ! Si on met en place une domotique sur le chauffage (commande de la temp&#233;rature lorsque les personnes sont pr&#233;sentes ou pas &#224; la maison, ouverture des fen&#234;tres, etc.), on peut &lt;strong&gt;baisser sa consommation d'&#233;nergie&lt;/strong&gt;. En effet, s'il n'y a personne &#224; la maison, cela ne sert &#224; rien de chauffer &#224; 30&#176; ! Et si on a oubli&#233; de baisser la temp&#233;rature souhait&#233;e de la chaufferie alors qu'on est d&#233;j&#224; &#224; 100 bornes, &lt;strong&gt;il nous suffit de se connecter &#224; notre interface&lt;/strong&gt; pour soit couper le chauffage, soit de baisser la temp&#233;rature. &lt;strong&gt;Gain de temps, pas de d&#233;penses &#233;nerg&#233;tiques inutiles.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Autre exemple, on a oubli&#233; d'&#233;teindre une lumi&#232;re. Mon installation domotique remarque qu'une lumi&#232;re est allum&#233;e mais qu'aucune personne n'est pr&#233;sente (merci les d&#233;tecteurs de mouvements !). Alors, elle &#233;teint la lumi&#232;re pour ne pas &#233;clairer une pi&#232;ce pendant une semaine alors que vous avez les doigts de pieds en &#233;ventail &#224; la plage &#224; plusieurs centaines de bornes de chez vous !&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;R&#233;ussir &#224; ma&#238;triser sa consommation &#233;nerg&#233;tique permet de r&#233;duire sa facture,&lt;/strong&gt; de moins d&#233;penser de p&#233;p&#232;tes, de pognon. Il y a bien d'autres sc&#233;narios possibles li&#233;s &#224; la consommation &#233;nerg&#233;tique. Si on se d&#233;brouille bien, on peut diviser par 2 certaines factures. A chacun son installation.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Cet aspect financier conclus la premi&#232;re partie de cet article. Il est assez long &#224; lire, je ne voulais pas vous assommez alors que l'id&#233;e est simple : s'approprier la domotique. La deuxi&#232;me partie sera en ligne dans 1 ou 2 jours. Elle abordera ma vision de l'accessibilit&#233;, le contr&#244;le, l'automatisation et l'open source dans le domaine de la domotique. Comme d'habitude, je suis preneur de vos retours sur le sujet.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Photo by Yassine Khalfalli on Unsplash&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>MagicMirror&#178;, configuration script&#233;e, 2&#232;me partie</title>
		<link>https://www.teddypayet.com/MagicMirror%C2%B2-configuration-scriptee-2eme-partie</link>
		<guid isPermaLink="true">https://www.teddypayet.com/MagicMirror%C2%B2-configuration-scriptee-2eme-partie</guid>
		<dc:date>2020-04-14T22:55:42Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Lignes de commandes</dc:subject>
		<dc:subject>MagicMirror</dc:subject>
		<dc:subject>Domotique</dc:subject>

		<description>
&lt;p&gt;Comme vous le savez tous, nous sommes en confinement depuis mi-mars. Pour m'occuper un peu en ch&#244;mage partiel, en plus de ma vie de famille, je me suis inscris &#224; une groupe d'entraide sur le MagicMirror sur Facebook. J'ai eu l'agr&#233;able surprise de voir qu'un article de mon blog &#233;tait cit&#233;. Merci de la confiance de ces utilisateurs ! Apr&#232;s quelques &#233;changes, j'ai propos&#233; d'expliquer plus en d&#233;tail mon installation script&#233;e et notamment ce &#224; quoi correspond mes diff&#233;rents principaux scripts. (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Lignes-de-commandes" rel="tag"&gt;Lignes de commandes&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/MagicMirror" rel="tag"&gt;MagicMirror&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Domotique" rel="tag"&gt;Domotique&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/arton158-32c60.jpg?1755172268' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Comme vous le savez tous, nous sommes en confinement depuis mi-mars. Pour m'occuper un peu en ch&#244;mage partiel, en plus de ma vie de famille, je me suis inscris &#224; une groupe &lt;a href=&#034;https://www.facebook.com/groups/2832574870153883/about/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;d'entraide sur le MagicMirror&lt;/a&gt; sur Facebook. J'ai eu l'agr&#233;able surprise de voir qu'un article de mon blog &#233;tait cit&#233;. Merci de la confiance de ces utilisateurs ! &lt;br class='autobr' /&gt;
Apr&#232;s quelques &#233;changes, j'ai propos&#233; d'expliquer plus en d&#233;tail mon installation script&#233;e et notamment ce &#224; quoi correspond mes diff&#233;rents principaux scripts.&lt;/p&gt;
&lt;p&gt;Tout a &#233;t&#233; d&#233;pos&#233; sur github (vous pourrez trouver le lien en bas de l'article). Je reprends ici plus ou moins le contenu du fichier Readme.&lt;/p&gt;
&lt;p&gt;Cet article est un &lt;strong&gt;exemple d'automatisation de la maintenance &lt;/strong&gt; de mon installation de MagicMirror. Le d&#233;p&#244;t github a pour but de montrer la possibilit&#233; d'automatiser la maintenance d'une installation d'un MagicMirror.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Le d&#233;p&#244;t s'appelle mm_config_automate. Son existence n'est que p&#233;dagogique. Il n'est en aucun cas un module de MagicMirror.&lt;/p&gt;
&lt;p&gt;De plus, je ne suis pas responsable d'une alt&#233;ration de vos donn&#233;es. Il vous faudra tester et adapter chaque script pour correspondre &#224; VOS attentes.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Liste des scripts&lt;/h2&gt;
&lt;p&gt;L'ensemble des scripts sont en bash. Ils restent simples &#224; comprendre et &#224; prendre en main avec un peu de patience et de lecture. Voici la liste des scripts :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; first_install.sh&lt;/li&gt;&lt;li&gt; mm_reset.sh&lt;/li&gt;&lt;li&gt; mm_update.sh&lt;/li&gt;&lt;li&gt; update_files_config.sh&lt;/li&gt;&lt;li&gt; disk_usage.sh&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;first_install.sh&lt;/h2&gt;
&lt;p&gt;Ce script permet &lt;strong&gt;d'installer l'ensemble des &#233;l&#233;ments de base pour qu'un MagicMirror puisse fonctionner.&lt;/strong&gt; Il est &#224; lancer sur une installation toute belle, toute neuve d'un Raspberry Pi 3. Je n'ai pas test&#233; sur un Raspberry Pi 4 pour le moment. Il prend en compte un Raspbian bas&#233; sur un Debian Buster (10) mis &#224; disposition des utilisateurs en f&#233;vrier 2020.&lt;/p&gt;
&lt;p&gt;Il fera dans l'ordre :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;i&gt;sudo apt update -y&lt;/i&gt; : R&#233;cup&#232;re la liste des mises &#224; jour disponibles&lt;/li&gt;&lt;li&gt; &lt;i&gt;sudo apt upgrade -y&lt;/i&gt; : Installe quelques mises &#224; jour, ne supprime pas les packages&lt;/li&gt;&lt;li&gt; &lt;i&gt;sudo apt autoremove -y&lt;/i&gt; : Supprime tous les anciens paquets qui ne sont plus n&#233;cessaires&lt;/li&gt;&lt;li&gt; &lt;i&gt;sudo apt clean -y&lt;/i&gt; : Cette commande de terminal lib&#232;re de l'espace disque en nettoyant les fichiers .deb t&#233;l&#233;charg&#233;s du r&#233;f&#233;rentiel local.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Puis :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; On active le son par le HDMI ;&lt;/li&gt;&lt;li&gt; Forcer le HDMI ;&lt;/li&gt;&lt;li&gt; Forcer l'affichage vertical de l'&#233;cran ;&lt;/li&gt;&lt;li&gt; Enlever des programmes inutiles ;&lt;/li&gt;&lt;li&gt; Installation de quelques packages ;&lt;/li&gt;&lt;li&gt; Installation de Nodejs et NPM selon la m&#233;thode indiqu&#233;e ici : &lt;a href=&#034;https://github.com/audstanley/NodeJs-Raspberry-Pi&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/audstanley/NodeJs-Raspberry-Pi&lt;/a&gt;&lt;/li&gt;&lt;li&gt; Ajouter les binaires de node dans le PATH ;&lt;/li&gt;&lt;li&gt; Installation de PM2 ;&lt;/li&gt;&lt;li&gt; Enregistrer les variables d'environnement (le home de MagicMirror, ainsi que de PM2) ;&lt;/li&gt;&lt;li&gt; Cr&#233;ation du fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mm.sh&lt;/code&gt; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; Ex&#233;cution du script d'installation du MagicMirror ;&lt;/li&gt;&lt;li&gt; Sauvegarder les r&#233;glages de pm2 et lancement des scripts au d&#233;marrage ;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Et enfin, on enregistre le contenu du fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;crontab.txt&lt;/code&gt; dans le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;crontab&lt;/code&gt; de l'utilisateur en cours.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;mm_reset.sh&lt;/h2&gt;
&lt;p&gt;Ce script installe MagicMirror &#224; partir du d&#233;p&#244;t github dudit projet. Il s'appelle &lt;i&gt;&#034;mm_reset&#034;&lt;/i&gt; au lieu de &lt;i&gt;&#034;mm_install&#034;&lt;/i&gt; car il supprime le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/&lt;/code&gt; s'il existe. Donc, il faut faire attention &#224; ce point si vous d&#233;sirez garder une pr&#233;c&#233;dente installation.&lt;/p&gt;
&lt;p&gt;A son tour, ce script va lancer une s&#233;rie de commandes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Arr&#234;t de MM gr&#226;ce &#224; pm2 stop mm ;&lt;/li&gt;&lt;li&gt; Effacer le r&#233;pertoire de MagicMirror si existant ;&lt;/li&gt;&lt;li&gt; R&#233;cup&#233;ration du d&#233;p&#244;t de MagicMirror ;&lt;/li&gt;&lt;li&gt; Passer sur la branche develop de MagicMirror ;&lt;/li&gt;&lt;li&gt; Cr&#233;ation des liens symboliques dans MM (&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;custom.css&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config.js&lt;/code&gt;) ;&lt;/li&gt;&lt;li&gt; Installation des d&#233;pendances de MM gr&#226;ce &#224; npm ;&lt;/li&gt;&lt;li&gt; Lancement du script d'update des modules de MM (cf. &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;update_files_config.sh&lt;/code&gt;) ;&lt;/li&gt;&lt;li&gt; Relancer MM sur pm2.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Liens symboliques&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dans le script &lt;i&gt;mm_reset.sh&lt;/i&gt;, il est pr&#233;sum&#233; que le fichier &lt;i&gt;&#034;config.js&#034;&lt;/i&gt; et le fichier de personnalisation de css vitaux &#224; MagicMirror soient pr&#233;sents dans votre r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/mm_config_automate/&lt;/code&gt;. Un lien symbolique dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/css/&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/config/&lt;/code&gt; sera fait pointant vers votre r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;mm_config_automate&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;MagicMirror n'y verra que du feu !&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;mm_update.sh&lt;/h2&gt;
&lt;p&gt;Ce script est plus rapide. Dans ce d&#233;p&#244;t d'exemple, il n'est pas utilis&#233; dans le crontab. Il est &#224; utiliser manuellement lorsque MM doit &#234;tre mis &#224; jour.&lt;/p&gt;
&lt;p&gt;Il arr&#234;te MM par pm2, puis va dans le r&#233;pertoire de MagicMirror. A partir de l&#224;, le d&#233;p&#244;t git est mis &#224; jour avec les derniers fichiers. Une installation et une mise &#224; jour des packages npm sont lanc&#233;es.&lt;/p&gt;
&lt;p&gt;Cela fait, on relance MM sur pm2.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;update_files_config.sh&lt;/h2&gt;
&lt;p&gt;Ce script bash est le nerf de la guerre. Crontab appellera dans notre exemple le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;update_files_config.sh&lt;/code&gt; tous les jours &#224; 00h15.&lt;/p&gt;
&lt;p&gt;Ce script contient 2 fonctions cl&#233;s :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;import_module&lt;/code&gt; ;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;delete_modules&lt;/code&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Apr&#232;s l'utilisation de ces fonctions, une boucle est lanc&#233;e pour v&#233;rifier l'existence du module MMM-AlarmClock. Ce dernier peut utiliser des fichiers mp3 comme sonnerie d'alarme.&lt;/p&gt;
&lt;p&gt;Si vous d&#233;sirez ajouter des fichiers mp3 &#224; votre convenance, il vous suffira de les copier dans le r&#233;pertoire sounds de votre d&#233;p&#244;t &lt;i&gt;&#034;mm_config_automate&#034;&lt;/i&gt;. Automatiquement, tous les soirs (selon le crontab mis en place), chaque fichier mp3 pr&#233;sent sera copi&#233; dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/modules/MMM-AlarmClock/sounds/&lt;/code&gt;. Vous n'aurez plus &#224; vous soucier d'autres choses que sa bonne utilisation dans votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config.js&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;update_files_config.sh : fonction import_module&lt;/h2&gt;
&lt;p&gt;Cette fonction bash attend un param&#232;tre : l'url vers le d&#233;p&#244;t git du module que vous d&#233;sirez installer sur votre MagicMirror.&lt;/p&gt;
&lt;p&gt;Par exemple, si vous d&#233;sirez utiliser le module de pages de MM, vous devez indiquer dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;update_files_config.sh&lt;/code&gt; la commande suivante :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='2' class='spip_cadre spip_cadre_block' dir='ltr'&gt;import_module https://github.com/edward-shen/MMM-pages.git&lt;/textarea&gt;
&lt;p&gt;Elle ira dans le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/modules/&lt;/code&gt;, v&#233;rifiera si le module existe d&#233;j&#224; (en gros l'existence du r&#233;pertoire &#034;MMM-pages&#034;) ou pas. S'il n'existe pas, elle clonera le r&#233;pertoire. Puis :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Acc&#233;der au r&#233;pertoire du module ;&lt;/li&gt;&lt;li&gt; Si un fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;package.json &lt;/code&gt;existe, l'installation des packages &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;npm&lt;/code&gt; est lanc&#233;e.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Il faudra utiliser cette fonction autant de fois que de modules d&#233;sir&#233;s. Vous trouverez des exemples dans ledit fichier. &lt;br class='autobr' /&gt;
Cerise sur le gateau, si le module existe d&#233;j&#224;, il le mettra &#224; jour avec les derniers fichiers provenant du d&#233;p&#244;t que vous avez indiqu&#233; en param&#232;tre.&lt;/p&gt;
&lt;div style=&#034;width:100%;height:0;padding-bottom:92%;position:relative;&#034;&gt;&lt;iframe src=&#034;https://giphy.com/embed/12NUbkX6p4xOO4&#034; width=&#034;100%&#034; height=&#034;100%&#034; style=&#034;position:absolute&#034; frameBorder=&#034;0&#034; class=&#034;giphy-embed&#034; allowFullScreen&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;update_files_config.sh : fonction delete_modules&lt;/h2&gt;
&lt;p&gt;Cette fonction se lance apr&#232;s l'ensemble des appels &#224; &lt;i&gt;import_module&lt;/i&gt;. Elle a pour but de supprimer les modules pr&#233;sents dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/modules/&lt;/code&gt; devenus obsol&#232;tes.&lt;/p&gt;
&lt;p&gt;Comme vous le savez, pour utiliser un module dans MagicMirror, nous devons l'avoir t&#233;l&#233;charg&#233; d'une part dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/modules/&lt;/code&gt; mais d'autre part l'avoir indiqu&#233; dans notre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config.js&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Si le r&#233;pertoire &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/modules/nom_repertoire/&lt;/code&gt; n'est pas indiqu&#233; dans ce fichier, le r&#233;pertoire sera consid&#233;r&#233; comme obsol&#232;te. Donc, qu'il peut &#234;tre supprim&#233;. La pr&#233;sente fonction v&#233;rifiera chaque r&#233;pertoire dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;modules/&lt;/code&gt; &#224; l'exclusion de :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;default/&lt;/code&gt;&lt;/li&gt;&lt;li&gt; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;node_modules/&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Cela pr&#233;servera l'espace disque de votre Raspberry Pi et &#233;vitera des erreurs dans votre MagicMirror.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;disk_usage.sh&lt;/h2&gt;
&lt;p&gt;Ce script permet de savoir le pourcentage d'utilisation d'espace disque. Dans le pr&#233;sent exemple, si le taux d'utilisation arrive &#224; 90% de sa capacit&#233;, un email est envoy&#233; (je vous laisse le soin de configurer le serveur d'envoi d'emails).&lt;/p&gt;
&lt;p&gt;Il faut savoir que pm2 &#233;crit beaucoup d'information dans les logs (cela d&#233;pend surtout des applications lanc&#233;es sous pm2 mais c'est un autre sujet). En prenant cela en compte, si le taux d'utilisation exc&#232;de les 90%, le script lance en premier lieu la commande pm2 flush pour vider l'ensemble des fichiers logs de pm2. Puis v&#233;rifie &#224; nouveau le taux de remplissage. Si la commande n'a pas chang&#233; la donne, l'email est envoy&#233;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;crontab.txt&lt;/h2&gt;
&lt;p&gt;Ce petit bout de fichier vous permet d'indiquer l'heure &#224; laquelle vos routines doivent &#234;tre mises en place.&lt;/p&gt;
&lt;p&gt;Dans le pr&#233;sent exemple, voici les routines :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; A 0h00 : On v&#233;rifie d'abord l'espace disque&lt;/li&gt;&lt;li&gt; A 0h05 : On met &#224; jour les fichiers de mm_config_automate&lt;/li&gt;&lt;li&gt; A 0h10 : On importe le contenu du fichier crontab.txt dans le crontab &#224; 00h10&lt;/li&gt;&lt;li&gt; A 0h15 : On peut maintenant lancer les scripts de routine (update_files_config.sh)&lt;/li&gt;&lt;li&gt; A 0h20 : On relance MagicMirror pour prendre en compte la configuration &#224; jour.&lt;/li&gt;&lt;li&gt; Tous les mois, on red&#233;marre le Raspberry Pi&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Si vous &#234;tes parents et/ou assujetti &#224; des p&#233;riodes de vacances et un planning diff&#233;rents durant ces p&#233;riodes, il est possible de mettre en place un fichier de config d&#233;di&#233; &#224; cette p&#233;riode.&lt;/p&gt;
&lt;p&gt;Dans notre exemple, le contenu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config.js&lt;/code&gt; et &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config_vac.js&lt;/code&gt; sont identiques. Le but est d'illustrer l'existence des fichiers selon la p&#233;riode. En ayant en t&#234;te les dates de vacances qui vous int&#233;ressent, vous pouvez ajouter une ligne d&#233;di&#233;e dans crontab pour que le lien symbolique de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/MagicMirror/config/config.js&lt;/code&gt; pointe vers le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/mm_config_automate/config_vac.js&lt;/code&gt; au lieu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/mm_config_automate/config.js&lt;/code&gt;. Le jour o&#249; vous devez revenir au travail (donc la fin de votre p&#233;riode de vacances) &#224; 00h30, il suffira de remettre le lien symbolique vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/home/pi/mm_config_automate/config.js&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Exemple pour les vacances de l'Ascension de la zone C :&lt;/p&gt; &lt;textarea readonly='readonly' cols='40' rows='9' class='spip_cadre spip_cadre_block' dir='ltr'&gt;############### # Vacances Ascension : 20 mai 30 0 20 5 0 cd /home/pi/MagicMirror/config/; rm -rf config.js; ln -s /home/pi/mm_config_automate/config_vac.js config.js; pm2 restart mm # Rentr&#233;e : 25 mai 30 0 25 5 * cd /home/pi/MagicMirror/config/; rm -rf config.js; ln -s /home/pi/mm_config_automate/config.js config.js; pm2 restart mm&lt;/textarea&gt;
&lt;p&gt;Voil&#224;. A vous de prendre en main ce projet en le copiant dans un d&#233;p&#244;t personnel priv&#233; et de le faire vivre.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le projet sur github&lt;/h2&gt;
&lt;p&gt;Comme indiqu&#233; en d&#233;but de cet article, les diff&#233;rents fichiers ont &#233;t&#233; d&#233;pos&#233; sur github. Ils ont pour but de vous aider &#224; mettre en place votre automatisation :&lt;br class='autobr' /&gt;
&lt;a href=&#034;https://github.com/Ybbet/mm_config_automate&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/Ybbet/mm_config_automate&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Attention de ne pas mettre le projet en public si vous l'utiliser sur VOTRE installation. Pr&#233;servez votre vie... priv&#233;e.&lt;/p&gt;
&lt;div class=&#034;row&#034;&gt; &lt;div class=&#034;col-xs-12&#034;&gt; &lt;h2&gt;A lire aussi&lt;/h2&gt; &lt;ul class=&#034;spip spip-list&#034;&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-miroir-qui-vous-veut-du-bien'&gt;MagicMirror&#178;, un miroir qui vous veut du bien.&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-on-recommence-depuis-le-debut'&gt;MagicMirror&#178;, on recommence depuis le d&#233;but&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-socle-qui-lui-va-comme-un-gant'&gt;MagicMirror&#178;, un socle qui lui va comme un gant&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-Raspberry-Pi-un-ecran-et-cie-sont-dans-un-bateau'&gt;MagicMirror&#178;, un Raspberry Pi, un &#233;cran et cie sont dans un bateau&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-ma-configuration-personnalisee'&gt;MagicMirror&#178;, ma configuration personnalis&#233;e&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-configuration-scriptee'&gt;MagicMirror&#178;, configuration script&#233;e&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;em&gt;MagicMirror&#178;, configuration script&#233;e, 2&#232;me partie&lt;/em&gt;&lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Pourquoi-j-ai-integre-Home-Assistant-dans-mon-MagicMirror'&gt;Pourquoi j'ai int&#233;gr&#233; Home Assistant dans mon MagicMirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Installer-et-configurer-HACS-pour-enrichir-Home-Assistant'&gt;Installer et configurer HACS pour enrichir Home Assistant&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Construire-les-pages-Lovelace-du-Magic-Mirror'&gt;Construire les pages Lovelace du Magic Mirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Calendriers-routines-et-organisation-familiale-Page-2'&gt;Calendriers, routines et organisation familiale (Page 2)&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Suivi-de-l-environnement-et-bien-etre-Page-3'&gt;Suivi de l'environnement et bien-&#234;tre (Page 3)&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Automatiser-la-rotation-des-pages-du-Magic-Mirror'&gt;Automatiser la rotation des pages du Magic Mirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Personnalisation-et-astuces-d-affichage-avec-card_mod'&gt;Personnalisation et astuces d'affichage avec card_mod&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Magic-Mirror-avec-Home-Assistant-pour-aller-plus-loin'&gt;Magic Mirror avec Home Assistant, pour aller plus loin&#8230;&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/20-ans-de-blogging-technique-ce-que-j-ai-appris'&gt;20 ans de blogging technique : ce que j'ai appris&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Des astuces et m&#233;mos pour SVN</title>
		<link>https://www.teddypayet.com/Des-astuces-et-memos-pour-SVN</link>
		<guid isPermaLink="true">https://www.teddypayet.com/Des-astuces-et-memos-pour-SVN</guid>
		<dc:date>2018-06-15T09:00:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Lignes de commandes</dc:subject>
		<dc:subject>SVN</dc:subject>
		<dc:subject>PHPStorm</dc:subject>

		<description>
&lt;p&gt;Je travaille encore tr&#232;s souvent sur des projets sous SVN avec grand plaisir. J'utilise des lignes de commandes pour aller plus vite. Il arrive parfois que je me creuse les m&#233;ninges pour certaines lignes de commandes. Alors, un petit article m&#233;mo ne fera pas de mal. &lt;br class='autobr' /&gt; body background-color:white ; &lt;br class='autobr' /&gt;
Lorsqu'on est sous SVN, il est parfois utile de voir la liste des &#233;l&#233;ments qui ne sont pas encore reconnus dans le d&#233;p&#244;t. svn st | grep ^ ? Et si on ne veut pas avoir le &#034; ?&#034; et les espaces (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Lignes-de-commandes" rel="tag"&gt;Lignes de commandes&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/SVN" rel="tag"&gt;SVN&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/PHPStorm" rel="tag"&gt;PHPStorm&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/arton153-88e97.jpg?1755172405' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Je travaille encore tr&#232;s souvent sur des projets sous SVN avec grand plaisir. J'utilise des lignes de commandes pour aller plus vite. Il arrive parfois que je me creuse les m&#233;ninges pour certaines lignes de commandes. Alors, un petit article m&#233;mo ne fera pas de mal.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;style&gt;body {background-color:white;}&lt;/style&gt;
&lt;p&gt;Lorsqu'on est sous SVN, il est parfois utile de voir la liste des &#233;l&#233;ments qui ne sont pas encore reconnus dans le d&#233;p&#244;t.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^?&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et si on ne veut pas avoir le &#034; ?&#034; et les espaces entre ce &#034; ?&#034; et le nom des &#233;l&#233;ments :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^? | cut -c9-&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour lister tous les &#233;l&#233;ments qui ont &#233;t&#233; modifi&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^M&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour lister tous les &#233;l&#233;ments qui ont &#233;t&#233; ajout&#233; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^A&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour lister tous les &#233;l&#233;ments qui sont introuvables :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^!&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Si vous d&#233;sirez afficher tous les &#233;l&#233;ments autres que modifi&#233;s ou ajout&#233;s :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep -v ^[AM]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Afficher tous les fichiers ayant &#233;t&#233; modifi&#233;, ou ajout&#233; ou qui ne sont pas reconnus par svn :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep ^[AMD\!?]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il arrive parfois qu'on ait besoin de d&#233;poser des fichiers (exemple : un dump d'une base de donn&#233;es) mais sans vouloir t&#233;l&#233;charger tout le r&#233;pertoire cible sur son local. Voici la commande ad&#233;quate :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn co http://example.org/url_depot/bdd_dump/ --depth empty&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela permettra de faire un checkout sur son local sans t&#233;l&#233;charger tous les fichiers pr&#233;sents sur le d&#233;p&#244;t.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;R&#232;gle g&#233;n&#233;rique&lt;/h2&gt;
&lt;p&gt;De mani&#232;re g&#233;n&#233;rale, SVN en lignes de commande ajoute 9 caract&#232;res avant le nom de l'&#233;l&#233;ment affich&#233;. De ce fait, &#224; chaque fois que vous ne d&#233;sirez pas voir ces 9 caract&#232;res (ou 9 colonnes), il faut mettre &#224; la fin de votre commande &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;| cut -c9-&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;En bash, si on d&#233;sire exporter le r&#233;sultat de notre commande dans un fichier, il faut rajouter &#224; la fin de notre commande &lt;i&gt;&#034; &gt; nom_fichier.txt&#034;&lt;/i&gt;&lt;br class='autobr' /&gt;
Soit pour exemple, la liste des fichiers autres que modifi&#233;s et/ou ajout&#233;s :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;svn st | grep -v ^[AM] &gt; files.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Ajouter de nouveaux fichiers/r&#233;pertoires au d&#233;p&#244;t&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for new_element in $(svn st | grep &#034;^?&#034; | cut -c9-); do svn add ${new_element}; done;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Supprimer des fichiers/r&#233;pertoires obsol&#232;tes au d&#233;p&#244;t&lt;/h2&gt;&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;for delete_element in $(svn st | grep &#034;^\!&#034; | cut -c9-); do svn delete ${delete_element}; done;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Visuel : Photo by Moja Msanii on Unsplash&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>MagicMirror&#178;, on recommence depuis le d&#233;but</title>
		<link>https://www.teddypayet.com/MagicMirror2-on-recommence-depuis-le-debut</link>
		<guid isPermaLink="true">https://www.teddypayet.com/MagicMirror2-on-recommence-depuis-le-debut</guid>
		<dc:date>2018-06-08T05:30:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Lignes de commandes</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>MagicMirror</dc:subject>
		<dc:subject>Domotique</dc:subject>

		<description>
&lt;p&gt;R&#233;cemment, j'ai &#233;crit un article pour installer mon MagicMirror&#178;. Ce tutoriel est tout &#224; fait fonctionnel. Malheureusement, pas dans mon cas car j'avais des versions de packages trop anciennes (cf. node.js). Je vais vous expliquer comment j'ai rem&#233;di&#233; &#224; cela. :-) &lt;br class='autobr' /&gt; body background-color : white ; &lt;br class='autobr' /&gt;
J'ai achet&#233; mon Raspberry Pi en juin 2016. J'en avais fait l'acquisition pour tester Gladys. A cette p&#233;riode, la version 2 de Gladys sortait des cartons et avaient peu de plugins pour (&#8230;)&lt;/p&gt;


-
&lt;a href="https://www.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

/ 
&lt;a href="https://www.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Lignes-de-commandes" rel="tag"&gt;Lignes de commandes&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/MagicMirror" rel="tag"&gt;MagicMirror&lt;/a&gt;, 
&lt;a href="https://www.teddypayet.com/Domotique" rel="tag"&gt;Domotique&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://www.teddypayet.com/local/cache-vignettes/L150xH100/arton151-862d6.jpg?1755172405' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;R&#233;cemment, j'ai &#233;crit un article pour installer mon MagicMirror&#178;. Ce tutoriel est tout &#224; fait fonctionnel. Malheureusement, pas dans mon cas car j'avais des versions de packages trop anciennes (cf. node.js). Je vais vous expliquer comment j'ai rem&#233;di&#233; &#224; cela. :-)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;style&gt; body { background-color: white; } &lt;/style&gt;
&lt;p&gt;J'ai achet&#233; mon Raspberry Pi en juin 2016. J'en avais fait l'acquisition pour tester &lt;a href=&#034;https://gladysproject.com/fr/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Gladys&lt;/a&gt;. A cette p&#233;riode, la version 2 de Gladys sortait des cartons et avaient peu de plugins pour agr&#233;menter le tout.&lt;br class='autobr' /&gt;
Je l'ai donc laiss&#233; un peu de c&#244;t&#233; en attendant le bon moment pour r&#233;aliser mon deuxi&#232;me projet pour ce petit bijoux.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Incompatibilit&#233;&lt;/h2&gt;
&lt;p&gt;J'avais install&#233; toutes les librairies n&#233;cessaires pour Gladys et elle-m&#234;me &#233;galement. Or, ces versions sont conflictuelles avec ce que MagicMirror&#178; d&#233;sire. Je vais &#234;tre honn&#234;te, &#231;a me prendrait plus de temps de d&#233;sinstaller chaque composant plut&#244;t que de refaire la carte SD &#224; partir de l'image de Raspbian fourni par raspberry.org.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Recommen&#231;ons&lt;/h2&gt;
&lt;p&gt;Le premier point est de refaire la carte SD avec l'image &lt;i&gt;2018-04-18-raspbian-stretch&lt;/i&gt; issue du site officiel. Cela aura pour effet de repartir de z&#233;ro.&lt;/p&gt;
&lt;p&gt;Cela fait, on remet la carte SD dans le Raspberry PI pour un red&#233;marrage. Ce dernier point se passe quand m&#234;me rapidement. Il n'y a pratiquement rien &#224; faire. Les choses sont bien ficel&#233;es.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation de packages&lt;/h2&gt;
&lt;p&gt;Il est n&#233;cessaire d'installer quelques petits packages pour assurer leur disponibilit&#233; au moment voulu :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt-get install git zip unzip curl wget&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Oui, ce n'est pas vraiment n&#233;cessaire avec une installation fra&#238;che. Toutefois, cette action permettra de mettre tout le monde au m&#234;me niveau.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Mise &#224; jour des packages&lt;/h2&gt;
&lt;p&gt;Comme dans le pr&#233;c&#233;dent tutoriel, j'ai mis &#224; jour les packages et le firmware :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo apt-get update; sudo apt-get upgrade; sudo apt-get autoremove; sudo rpi-update; sudo apt-get clean&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A la fin de cette ligne, je vide le cache puis un red&#233;marrage : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo reboot&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation de Node et MagicMirror&#178;&lt;/h2&gt;
&lt;p&gt;Le red&#233;marrage &#233;tant fait, on va maintenant lancer les scripts initiaux :&lt;br class='autobr' /&gt;
&lt;strong&gt;Node.js&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;wget -O - https://raw.githubusercontent.com/audstanley/NodeJs-Raspberry-Pi/master/Install-Node.sh | sudo bash node -v&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;MagicMirror&#178;&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;bash -c &#034;$(curl -sL https://raw.githubusercontent.com/MichMich/MagicMirror/master/installers/raspberry.sh)&#034;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;J'ai vu qu'une branche develop &#233;tait pr&#233;sente et des commits sur cette branche r&#233;glaient quelques bugs. Alors, je passe &#224; cette branche :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror/ git checkout -b develop git pull&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Apr&#232;s cela, on peut lancer l'installation :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tout s'est bien pass&#233; pour mon installation. Cool.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation des modules&lt;/h2&gt;
&lt;p&gt;Pour mes besoins actuels, j'utilise les modules suivants :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/tataille/MMM-FreeBox-Monitor&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MMM-Freebox-Monitor&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/spectroman/mmm-moon-phases&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MMM-moon-phases&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/edward-shen/MMM-page-indicator&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MMM-page-indicator&lt;/a&gt; ;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/edward-shen/MMM-pages&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MMM-pages&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le principe d'installation est le m&#234;me pour tous les modules :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror/modules/ git clone https://github.com/user/mmm-nom-module&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Soit :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror/modules/ git clone https://github.com/tataille/MMM-FreeBox-Monitor.git git clone https://github.com/spectroman/mmm-moon-phases.git git clone https://github.com/edward-shen/MMM-page-indicator.git git clone https://github.com/edward-shen/MMM-pages.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour le reste, la configuration des modules se fait dans le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/MagicMirror/config/config.js&lt;/code&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Configuration du fichier config.js&lt;/h2&gt;
&lt;p&gt;Comme le demande la documentation de MagicMirror&#178;, on doit copier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/MagicMirror/config/config.js.sample&lt;/code&gt; vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/MagicMirror/config/config.js&lt;/code&gt;&lt;br class='autobr' /&gt;
Cela dit&#8230; Je ne vais pas faire &#231;a. :-D&lt;/p&gt;
&lt;p&gt;En effet, je vais faire en sorte d'avoir une version du fichier config.js qui soit versionn&#233;e sur un git.&lt;br class='autobr' /&gt;
Comme tout projet git, il n'est pas possible de cibler sur un fichier purement et simplement (comme le ferait svn par exemple). De ce fait, j'ai cr&#233;&#233; sur &lt;a href=&#034;https://gitlab.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Gitlab.com&lt;/a&gt; un projet qui sera en mode priv&#233;.&lt;/p&gt;
&lt;p&gt;On peut nommer ce projet &#034;magicmirror_config&#034; pour faire simple.&lt;br class='autobr' /&gt;
Depuis le terminal, je tape les lignes suivantes :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/ git clone https://gitlab.com/user/magicmirror_config.git&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Maintenant, je cr&#233;e un lien symbolique dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/MagicMirror/config/&lt;/code&gt; pointant vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/magicmirror_config/config.js&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror/config/ mv config.js config.js.old ln -s ~/magicmirror_config/config.js config.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Par la m&#234;me occasion, j'ai fait la m&#234;me chose avec le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;~/MagicMirror/css/custom.css&lt;/code&gt;. Pratique pour personnaliser son affichage graphiquement.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror/css/ mv custom.css custom.css.old ln -s ~/magicmirror_config/custom.css custom.css&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;marrage automatique de MagicMirror&#178;&lt;/h2&gt;
&lt;p&gt;Comme indiqu&#233; dans &lt;a href=&#034;https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://github.com/MichMich/MagicMirror/wiki/Auto-Starting-MagicMirror&lt;/a&gt;, il est possible de lancer automatiquement MagicMirror&#178; au d&#233;marrage. Pour cela, il est n&#233;cessaire d'installer PM2 sur la machine.&lt;br class='autobr' /&gt;
Le script d'installation de MagicMirror&#178; le fait. Mais j'ai eu un souci que je ne saurais identifier pour le moment. Je verrai cela plus tard.&lt;/p&gt;
&lt;p&gt;Le script a bien install&#233; pm2 mais n'a pas fait les liens symboliques pour ce stretch. Cela se trouve dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/opt/nodejs/bin/&lt;/code&gt;.&lt;br class='autobr' /&gt;
Sur stretch, on fait un lien vers &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/alternatives/&lt;/code&gt; puis de l&#224;, un lien dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/usr/bin/&lt;/code&gt;.&lt;br class='autobr' /&gt;
Voici le code &#224; taper dans Terminal :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;sudo ln -s /opt/nodejs/bin/pm2 /etc/alternatives/pm2 sudo ln -s /etc/alternatives/pm2 /usr/bin/pm2 sudo ln -s /opt/nodejs/bin/pm2-dev /etc/alternatives/pm2-dev sudo ln -s /etc/alternatives/pm2-dev /usr/bin/pm2-dev sudo ln -s /opt/nodejs/bin/pm2-docker /etc/alternatives/pm2-docker sudo ln -s /etc/alternatives/pm2-docker /usr/bin/pm2-docker sudo ln -s /opt/nodejs/bin/pm2-runtime /etc/alternatives/pm2-runtime sudo ln -s /etc/alternatives/pm2-runtime /usr/bin/pm2-runtime&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Cr&#233;er un fichier de d&#233;marrage de MagicMirror&#178;&lt;/strong&gt;&lt;br class='autobr' /&gt;
Pour nous simplifier la t&#226;che, il est conseill&#233; de cr&#233;er un fichier bash :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~ nano mm.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis d'ajouter les lignes suivantes :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;cd ~/MagicMirror DISPLAY=:0 npm start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On enregistre le tout. Puis on le rend ex&#233;cutable.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;chmod +x mm.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;D&#233;marrer MagicMirror&#178; avec PM2&lt;/h2&gt;
&lt;p&gt;C'est vraiment tout simple :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 start mm.sh&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Activer le d&#233;marrage du script&lt;/strong&gt;&lt;br class='autobr' /&gt;
On doit &#234;tre s&#251;r que le script soit lanc&#233; au d&#233;marrage. Pour cela, on sauvegarde les r&#233;glages actuels de PM2 :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 save&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Contr&#244;ler son MagicMirror&#178; via PM2&lt;/h2&gt;
&lt;p&gt;Avec MagicMirror fonctionnant via PM2, on dispose d'outils pratiques :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Red&#233;marrer MagicMirror&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 restart mm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Arr&#234;ter MagicMirror&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 stop mm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Afficher les logs MagicMirror&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 logs mm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Afficher les informations sur le processus MagicMirror&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;pm2 show mm&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#034;row&#034;&gt; &lt;div class=&#034;col-xs-12&#034;&gt; &lt;h2&gt;A lire aussi&lt;/h2&gt; &lt;ul class=&#034;spip spip-list&#034;&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-miroir-qui-vous-veut-du-bien'&gt;MagicMirror&#178;, un miroir qui vous veut du bien.&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;em&gt;MagicMirror&#178;, on recommence depuis le d&#233;but&lt;/em&gt;&lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-socle-qui-lui-va-comme-un-gant'&gt;MagicMirror&#178;, un socle qui lui va comme un gant&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-un-Raspberry-Pi-un-ecran-et-cie-sont-dans-un-bateau'&gt;MagicMirror&#178;, un Raspberry Pi, un &#233;cran et cie sont dans un bateau&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-ma-configuration-personnalisee'&gt;MagicMirror&#178;, ma configuration personnalis&#233;e&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror2-configuration-scriptee'&gt;MagicMirror&#178;, configuration script&#233;e&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/MagicMirror%C2%B2-configuration-scriptee-2eme-partie'&gt;MagicMirror&#178;, configuration script&#233;e, 2&#232;me partie&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Pourquoi-j-ai-integre-Home-Assistant-dans-mon-MagicMirror'&gt;Pourquoi j'ai int&#233;gr&#233; Home Assistant dans mon MagicMirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Installer-et-configurer-HACS-pour-enrichir-Home-Assistant'&gt;Installer et configurer HACS pour enrichir Home Assistant&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Construire-les-pages-Lovelace-du-Magic-Mirror'&gt;Construire les pages Lovelace du Magic Mirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Calendriers-routines-et-organisation-familiale-Page-2'&gt;Calendriers, routines et organisation familiale (Page 2)&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Suivi-de-l-environnement-et-bien-etre-Page-3'&gt;Suivi de l'environnement et bien-&#234;tre (Page 3)&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Automatiser-la-rotation-des-pages-du-Magic-Mirror'&gt;Automatiser la rotation des pages du Magic Mirror&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Personnalisation-et-astuces-d-affichage-avec-card_mod'&gt;Personnalisation et astuces d'affichage avec card_mod&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/Magic-Mirror-avec-Home-Assistant-pour-aller-plus-loin'&gt;Magic Mirror avec Home Assistant, pour aller plus loin&#8230;&lt;/a&gt; &lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://www.teddypayet.com/20-ans-de-blogging-technique-ce-que-j-ai-appris'&gt;20 ans de blogging technique : ce que j'ai appris&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
