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

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

                   

<item xml:lang="fr">
		<title>MagicMirror&#178;, on recommence depuis le d&#233;but</title>
		<link>https://preprod.teddypayet.com/MagicMirror2-on-recommence-depuis-le-debut</link>
		<guid isPermaLink="true">https://preprod.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://preprod.teddypayet.com/Blog" rel="directory"&gt;Blog&lt;/a&gt;

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

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH100/arton151-862d6.jpg?1724428492' 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://preprod.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://preprod.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://preprod.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://preprod.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://preprod.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://preprod.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;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>MagicMirror&#178;, un miroir qui vous veut du bien.</title>
		<link>https://preprod.teddypayet.com/MagicMirror2-un-miroir-qui-vous-veut-du-bien</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/MagicMirror2-un-miroir-qui-vous-veut-du-bien</guid>
		<dc:date>2018-06-01T15:09: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>Personnel</dc:subject>
		<dc:subject>MagicMirror</dc:subject>
		<dc:subject>Domotique</dc:subject>

		<description>
&lt;p&gt;Le &#8220;MagicMirror&#178;&#8221; est un projet open source qui a &#233;t&#233; mis &#224; disposition par son cr&#233;ateur : Michael Teeuw Pr&#233;sentation : &#8220;MagicMirror&#178; est une plate-forme modulaires open source de miroirs intelligents. Avec une liste croissante de modules installables, le MagicMirror&#178; vous permet de convertir votre couloir ou votre miroir de salle de bains en votre assistant personnel. MagicMirror&#178; est construit par le cr&#233;ateur du MagicMirror original avec l'aide incroyable d'une communaut&#233; croissante de (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH110/arton150-51e5b.png?1724428492' class='spip_logo spip_logo_right' width='150' height='110' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Le &#8220;&lt;a href=&#034;https://magicmirror.builders/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MagicMirror&#178;&lt;/a&gt;&#8221; est un projet open source qui a &#233;t&#233; mis &#224; disposition par son cr&#233;ateur : &lt;a href=&#034;http://michaelteeuw.nl/post/142629029062/magicmirror2-a-huge-announcement&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Michael Teeuw&lt;/a&gt;&lt;br class='autobr' /&gt;
Pr&#233;sentation : &#8220;MagicMirror&#178; est une plate-forme modulaires open source de miroirs intelligents. Avec une liste croissante de modules installables, le MagicMirror&#178; vous permet de convertir votre couloir ou votre miroir de salle de bains en votre assistant personnel. MagicMirror&#178; est construit par le cr&#233;ateur du MagicMirror original avec l'aide incroyable d'une communaut&#233; croissante de contributeurs.&#8221;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;style&gt; body { background-color: white; } .image_intro div.image { background-color: black; } &lt;/style&gt; &lt;iframe src=&#034;https://player.vimeo.com/video/171152845&#034; width=&#034;640&#034; height=&#034;360&#034; frameborder=&#034;0&#034; allowfullscreen&gt;&lt;/iframe&gt;&lt;h2 class=&#034;spip&#034;&gt;Le mat&#233;riel&lt;/h2&gt;
&lt;p&gt;Le mat&#233;riel n&#233;cessaire est le suivant :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Un Raspberry Pi 3 (ne pas oublier une source d'alimentation) ;&lt;/li&gt;&lt;li&gt; Une carte SD de 8Go (minimum) ;&lt;/li&gt;&lt;li&gt; Un clavier ;&lt;/li&gt;&lt;li&gt; Une souris ;&lt;/li&gt;&lt;li&gt; Un c&#226;ble HDMI ;&lt;/li&gt;&lt;li&gt; Un &#233;cran HDMI.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Je vous propose de voir comment installer MagicMirror&#178; (aka MM&#178;) sur votre Raspberry Pi 3. Bien entendu, le moment venu, vous brancherez tous les &#233;l&#233;ments les uns aux autres lorsque vous devrez vous connecter au Raspberry PI.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation du Raspberry Pi&lt;br/&gt;
Pr&#233;parer une carte SD.&lt;/h2&gt;
&lt;p&gt;Il est n&#233;cessaire d'installer Raspbian sur votre carte SD pour optimiser votre utilisation du Raspberry Pi et de MagicMirror&#178;. Cette op&#233;ration doit &#234;tre r&#233;alis&#233;e depuis un ordinateur (Windows, Mac, Linux)&lt;/p&gt;
&lt;p&gt;Aller sur l'url &lt;a href=&#034;https://www.raspberrypi.org/downloads/raspbian/&#034; class=&#034;spip_url spip_out auto&#034; rel=&#034;nofollow external&#034;&gt;https://www.raspberrypi.org/downloads/raspbian/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;T&#233;l&#233;charger la derni&#232;re version de Raspbian (en mai 2018, &lt;i&gt;Raspbian Stretch with desktop&lt;/i&gt;). Une fois t&#233;l&#233;charg&#233; sur votre ordinateur, veuillez d&#233;compresser le fichier.&lt;/p&gt;
&lt;p&gt;Avec le r&#233;pertoire extrait, vous pouvez pr&#233;parer la carte SD. Ins&#233;rez votre carte SD dans votre ordinateur. Ouvrez votre logiciel* de gestion de disques (SD Card Formatter, Win32 Disk Imager, Utilitaire de Disques, etc.). S&#233;lectionnez votre carte SD et lui donner un nom (de pr&#233;f&#233;rence sans espace ou accents pour simplifier les lignes de commandes). R&#233;f&#233;rez-vous &#224; la documentation propre &#224; votre logiciel pour toutes ces &#233;tapes.&lt;/p&gt;
&lt;p&gt;S&#233;lectionnez l'image de Raspbian fra&#238;chement extrait pour l'importer sur la carte SD. Lancez l'&#233;criture de cette image sur la carte.&lt;/p&gt;
&lt;p&gt;Cela fait, &#233;jectez la carte SD.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;D&#233;marrer et configurer le Raspberry Pi&lt;/h2&gt;
&lt;p&gt;Maintenant que la carte SD est pr&#234;te avec Raspbian, il est n&#233;cessaire de l'ins&#233;rer dans le Raspberry Pi.&lt;/p&gt;
&lt;p&gt;Connecter le c&#226;ble HDMI &#224; l'&#233;cran puis au Raspberry. Allumez votre &#233;cran. Branchez le clavier, la souris au Raspberry. Ne pas oublier maintenant de brancher la source d'alimentation du Raspberry.&lt;/p&gt;
&lt;p&gt;Au premier d&#233;marrage du Raspberry Pi, cela peut prendre un peu de temps. Vous serez invit&#233; &#224; renseigner le mot de passe pour l'utilisateur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;pi&lt;/code&gt; (soit par d&#233;faut : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;raspberry&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Depuis le terminal, entrez &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sudo raspi-config&lt;/code&gt; et validez. Cela lancera la configuration du Raspberry. Choisissez &#8220;&lt;i&gt;Expand Filesystem&lt;/i&gt;&#8221; en tapant sur la touche &#8220;&lt;i&gt;Entr&#233;e&lt;/i&gt;&#8221;. On utilisera ainsi tout l'espace de la carte SD.&lt;br class='autobr' /&gt;
Cela fait, on s&#233;lectionne &#8220;Internationalisation Options&#8221; pour choisir la langue d&#233;sir&#233;e. Le faire &#224; votre convenance : la langue, le timezone, le format du clavier, le protocole Wifi.&lt;/p&gt;
&lt;p&gt;Maintenant, on va choisir &#8220;&lt;i&gt;Advanced options&lt;/i&gt;&#8221;, puis &#8220;&lt;i&gt;Hostname&lt;/i&gt;&#8221;. Par d&#233;faut, on a &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;raspberrypi&lt;/code&gt;. Mais au vu du projet, on peut appeler &#231;a &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;magicpi&lt;/code&gt;. A votre convenance ici :-)&lt;/p&gt;
&lt;p&gt;Apr&#232;s cela, revenir sur &#8220;&lt;i&gt;Advanced options&lt;/i&gt;&#8221; et choisir &#8220;&lt;i&gt;SSH&lt;/i&gt;&#8221;. Il sera utile de pouvoir une connexion SSH pour acc&#233;der au Raspberry &#224; distance.&lt;/p&gt;
&lt;p&gt;On devrait &#234;tre bon maintenant. Revenir &#224; l'&#233;cran principal et utiliser la touche de tabulation pour mettre en surbrillance &#8220;&lt;i&gt;Finish&lt;/i&gt;&#8221; en bas de l'&#233;cran et cliquer sur &#8220;&lt;i&gt;Entr&#233;e&lt;/i&gt;&#8221;. A la demande de red&#233;marrage, cliquer sur &#8220;&lt;i&gt;Yes&lt;/i&gt;&#8221;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Configurer le Wifi du Raspberry Pi&lt;/h2&gt;
&lt;p&gt;Une particularit&#233; du Raspberry Pi 3 est d'avoir le wifi nativement. Il va falloir le configurer pour avoir acc&#232;s &#224; votre r&#233;seau internet.&lt;/p&gt;
&lt;p&gt;Apr&#232;s le red&#233;marrage, vous aurez un bureau graphique Linux. Lancez le Terminal, vous y configurez le wifi en &#233;ditant le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;wpa_supplicant.conf&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;sudo nano /etc/wpa_supplicant/wpa_supplicant.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A la fin du fichier, renseignez vos informations de connexion :&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;network={ ssid=&#034;votre_nom_de_reseau&#034; psk=&#034;votre_mot_de_passe_reseau&#034; }&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour enregistrer votre configuration, cliquer sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;CTRL-X&lt;/code&gt; puis sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Y&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Il faut red&#233;marrer votre raspberry : &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;Nettoyer et mettre &#224; jour le syst&#232;me&lt;/h2&gt;
&lt;p&gt;Bon, tout cela est sympa, mais il va falloir mettre tout ce petit monde &#224; jour et faire maigrir tout &#231;a.&lt;/p&gt;
&lt;p&gt;Depuis votre Terminal, taper &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;df -h&lt;/code&gt; pour avoir la capacit&#233; actuelle de votre Raspberry. Notez l'espace utilis&#233; pour le comparer.&lt;/p&gt;
&lt;p&gt;On va supprimer quelques packages inutiles pour le MM&#178; :&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 remove --purge idle3 java-common libreoffice* minecraft-pi scratch nuscratch penguinspuzzle python-minecraftpi python3-minecraftpi smartsim sonic-pi wolfram-engine&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Puis :&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 clean sudo apt-get autoremove&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cela va prendre un petit moment pour que ces op&#233;rations se terminent. Soyez patient et pas trop loin de votre &#233;cran pour valider certaines op&#233;rations. Faites &#224; nouveau &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;df -h&lt;/code&gt; dans votre terminal et remarquez le changement.&lt;/p&gt;
&lt;p&gt;Continuons. Il est temps de mettre &#224; jour vos packages :&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 rpi-update.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;strong&gt;&#8220;update&#8221;&lt;/strong&gt; met &#224; jour la liste des packages disponibles et leur version ;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&#8220;upgrade&#8221;&lt;/strong&gt; met &#224; jour les packages install&#233;es ;&lt;/li&gt;&lt;li&gt; &lt;strong&gt;&#8220;rpi-update&#8221;&lt;/strong&gt; va quant &#224; lui mettre &#224; jour le firmware du Raspberry Pi.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Respirez &#224; nouveau et tapez &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 MagicMirror&#178;&lt;/h2&gt;
&lt;p&gt;Le Raspberry est pr&#234;t. Alors, installons le temps attendu MagicMirror&#178;.&lt;/p&gt;
&lt;p&gt;Il existe un script qui permettra d'installer MM&#178; comme il se doit. Toutefois, il arrive que l'installation du package &#8220;node&#8221; pose un probl&#232;me. Le script installe une version NodeJS 9.x. La version de &lt;strong&gt;node test&#233;e par MM&#178;&lt;/strong&gt; est la &lt;strong&gt;5.1.0&lt;/strong&gt;. Si vous avec une version inf&#233;rieure, cela bloquera l'installation de composants node qui n&#233;cessitent eux un node 4.6.x minimum.&lt;br class='autobr' /&gt;
&lt;i&gt;Il faudra faire attention &#224; la version de NodeJS surtout si vous avez depuis un moment votre Raspberry Pi. Ce qui &#233;tait mon cas. J'avais un node v4.4.2 qui forc&#233;ment n'&#233;tait pas au go&#251;t de MM&#178;.&lt;/i&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation pr&#233;alable de NodeJS&lt;/h2&gt;
&lt;p&gt;Pour y rem&#233;dier, vous allez installer node en premier. Tapez ceci dans votre 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;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;Ce script bash installera par d&#233;faut la version NodeJS 10.x. Il est possible de changer la version de NodeJS en tapant ceci :&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 node-install -v 9; # then you will get prompted with which # specific version of 9 you wish to install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Mais on n'en est pas l&#224;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Ex&#233;cution du script pour MagicMirror&#178;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;NodeJS &#233;tant install&#233;,&lt;/strong&gt; vous allez lancer le script d'installation de MagicMirror&#178; :&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;Cela lancera le processus d'installation pour vous. Ne partez pas trop loin du Raspberry car des validations seront &#224; faire au fil de l'eau.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Attention, le script d'installation de MM&#178; s'occupe d&#233;j&#224; d'installer un NodeJS&lt;/strong&gt; &lt;i&gt;(v9.x en mai 2018)&lt;/i&gt;. Donc, vous pourriez vous passer de l'&#233;tape pr&#233;c&#233;dente en r&#233;alit&#233;. Mais si vous d&#233;sirez tester sur d'autres versions de NodeJS, une installation manuelle, cit&#233;e pr&#233;c&#233;demment, vous facilitera grandement la t&#226;che.&lt;br class='autobr' /&gt;
&lt;strong&gt;Si le script de MM&#178; d&#233;tecte un node existant, il sautera cette &#233;tape et vous indiquera qu'il faudra mettre &#224; jour node si votre version est inf&#233;rieure &#224; la version test&#233;e.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Configuration compl&#233;mentaire&lt;/h2&gt;
&lt;p&gt;Le script s'est bien d&#233;roul&#233;. Vous devez configurer quelques points compl&#233;mentaires sp&#233;cifiques &#224; MM&#178;. Il faut par exemple indiquer que l'&#233;cran est &#224; la verticale. Tapez :&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 nano /boot/config.txt&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et ajoutez &#224; la fin du fichier 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;# Rotate display vertically display_rotate=1&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Appuyez sur &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;CTRL-X&lt;/code&gt; quand vous avez fini puis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Y&lt;/code&gt; pour sauvegarder vos modifications.&lt;br class='autobr' /&gt;
Raspbian lance un &#233;cran de veille au bout d'un certain temps. De ce fait, nous allons d&#233;sactiver ceci en modifiant un fichier :&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 nano /etc/xdg/lxsession/LXDE-pi/autostart&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ajoutez &#224; la fin du fichier ces lignes :&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;@xset s noblank @xset s off @xset -dpms&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Modifiez le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;lightdm.conf&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;sudo nano /etc/lightdm/lightdm.conf&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Recherchez la ligne &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;xserver-command&lt;/code&gt; en descendant plus bas. Y renseigner ces valeurs :&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;xserver-command=X -s 0 -dpms&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Enlevez le &#171; # &#187; en d&#233;but de ligne si besoin. Enregistrez vos modifications &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;CTRL-X&lt;/code&gt; puis &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;Y&lt;/code&gt; et entr&#233;e.&lt;/p&gt;
&lt;p&gt;Pour des soucis d'&#233;conomie d'&#233;nergie Raspberry d&#233;sactive certains composants dont le wifi. En modifiant un param&#232;tre dans &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;/etc/network/interfaces&lt;/code&gt;, cette fonctionnalit&#233; sera ineffective :&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 nano /etc/network/interfaces&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Cherchez &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;wlan0&lt;/code&gt; et ajoutez, en-dessous, la ligne 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;wireless-power off&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Sauvegardez vos modifications et red&#233;marrez votre Raspberry Pi :&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 reboot&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A ce stade, vous avez configur&#233; enti&#232;rement votre MM&#178;. Il vous faudra le personnaliser en &#233;ditant le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;config.js&lt;/code&gt; et/ou en ajoutant des modules suppl&#233;mentaires.&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 cp config.js.sample config.js&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Et maintenant, vous pouvez l'essayer :&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 ~$HOME/MagicMirror npm start&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Enjoy !&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Sources :&lt;/h2&gt;&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &lt;a href=&#034;https://magicmirror.builders/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://magicmirror.builders/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/MichMich/MagicMirror/wiki/Configuring-the-Raspberry-Pi&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/MichMich/MagicMirror/wiki/Configuring-the-Raspberry-Pi&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://github.com/audstanley/NodeJs-Raspberry-Pi&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/audstanley/NodeJs-Raspberry-Pi&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://raspbian-france.fr/creez-carte-sd-raspbian-raspberry-pi-windows/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://raspbian-france.fr/creez-carte-sd-raspbian-raspberry-pi-windows/&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://forum.magicmirror.builders/topic/236/complete-setup-tutorial&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://forum.magicmirror.builders/topic/236/complete-setup-tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href=&#034;https://www.raspberrypi.org/documentation/installation/installing-images/mac.md&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;https://www.raspberrypi.org/documentation/installation/installing-images/mac.md&lt;/a&gt;&lt;/li&gt;&lt;/ul&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;em&gt;MagicMirror&#178;, un miroir qui vous veut du bien.&lt;/em&gt;&lt;/li&gt; &lt;li class=&#034;item&#034;&gt;&lt;a href='https://preprod.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://preprod.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://preprod.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://preprod.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://preprod.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://preprod.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;/ul&gt; &lt;/div&gt; &lt;/div&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>CDC D&#233;veloppement Solidaire</title>
		<link>https://preprod.teddypayet.com/CDC-Developpement-Solidaire</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/CDC-Developpement-Solidaire</guid>
		<dc:date>2014-03-21T08:00:00Z</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>HTML</dc:subject>
		<dc:subject>CSS</dc:subject>
		<dc:subject>MySQL</dc:subject>
		<dc:subject>PHP</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>D&#233;veloppeur Web</dc:subject>
		<dc:subject>Salari&#233;</dc:subject>
		<dc:subject>Bootstrap (CSS et JS)</dc:subject>
		<dc:subject>Sublime Text</dc:subject>
		<dc:subject>SVN</dc:subject>

		<description>
&lt;p&gt;Ce site du groupe de la Caisse des D&#233;p&#244;ts pr&#233;sente les actions d'une filiale du groupe dans le monde. &lt;br class='autobr' /&gt;
Il a &#233;t&#233; port&#233; sous SPIP 3.0 et utilise le framework Bootstrap 3.0 (CSS et JS). L'int&#233;gration a &#233;t&#233; assur&#233; par un d&#233;veloppeur int&#233;grateur. &lt;br class='autobr' /&gt;
J'ai d&#233;velopp&#233; un plugin g&#233;rant les dons et adh&#233;sions &#224; cette filiale. Cr&#233;ation de formulaire CVT multi-&#233;tapes, cr&#233;ation d'empreintes stock&#233;es en base de donn&#233;es, envoi et retour d'informations &#224; un webservice bancaire (norme &#224; respecter) qui assure (&#8230;)&lt;/p&gt;


-
&lt;a href="https://preprod.teddypayet.com/Developpement" rel="directory"&gt;D&#233;veloppement&lt;/a&gt;

/ 
&lt;a href="https://preprod.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/HTML" rel="tag"&gt;HTML&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/CSS" rel="tag"&gt;CSS&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/MySQL" rel="tag"&gt;MySQL&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/PHP" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Developpeur-Web" rel="tag"&gt;D&#233;veloppeur Web&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Salarie" rel="tag"&gt;Salari&#233;&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Bootstrap-CSS-et-JS" rel="tag"&gt;Bootstrap (CSS et JS)&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Sublime-Text" rel="tag"&gt;Sublime Text&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/SVN" rel="tag"&gt;SVN&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH150/arton131-06535.png?1724986472' class='spip_logo spip_logo_right' width='150' height='150' alt=&#034;&#034; /&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Ce site du groupe de la Caisse des D&#233;p&#244;ts pr&#233;sente les actions d'une filiale du groupe dans le monde.&lt;/p&gt;
&lt;p&gt;Il a &#233;t&#233; port&#233; sous SPIP 3.0 et utilise le framework Bootstrap 3.0 (CSS et JS). L'int&#233;gration a &#233;t&#233; assur&#233; par un d&#233;veloppeur int&#233;grateur.&lt;/p&gt;
&lt;p&gt;J'ai d&#233;velopp&#233; un plugin g&#233;rant les dons et adh&#233;sions &#224; cette filiale. Cr&#233;ation de formulaire CVT multi-&#233;tapes, cr&#233;ation d'empreintes stock&#233;es en base de donn&#233;es, envoi et retour d'informations &#224; un webservice bancaire (norme &#224; respecter) qui assure le paiement du don ou de l'abonnement.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Squelettes &#034;Z-core&#034; sous SPIP 3 - astuces</title>
		<link>https://preprod.teddypayet.com/Squelettes-Z-core-sous-SPIP-3-astuces</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Squelettes-Z-core-sous-SPIP-3-astuces</guid>
		<dc:date>2014-01-14T12:10:10Z</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>HTML</dc:subject>
		<dc:subject>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Javascript</dc:subject>

		<description>
&lt;p&gt;Il n'est plus n&#233;cessaire, je pense, de pr&#233;senter l'architecture des squelettes sous la nomenclature &#034;Z&#034;. Beaucoup l'utilise aujourd'hui, moi le premier. &lt;br class='autobr' /&gt; Pr&#233;ambule Le plugin Z-core est l'h&#233;ritage du plugin Zpip d&#233;velopp&#233; par Matthieu Marcillaud, C&#233;dric Morin, Romy T&#234;tue et un collectif SPIP. Z-core est le moteur offrant le d&#233;coupage des squelettes. Il ne fournit pas de squelettes. C'est &#224; nous ou au plugin choisi de fournir les pages qui vont bien. C'est rapide et efficace. Il faut savoir (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/HTML" rel="tag"&gt;HTML&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH100/arton127-cdfe0.jpg?1725524434' class='spip_logo spip_logo_right' width='150' height='100' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Il n'est plus n&#233;cessaire, je pense, de pr&#233;senter l'architecture des squelettes sous la &lt;a href=&#034;http://contrib.spip.net/Le-Squelette-Zpip&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;nomenclature &#034;Z&#034;&lt;/a&gt;. Beaucoup l'utilise aujourd'hui, moi le premier.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;ambule&lt;/h2&gt;
&lt;p&gt;Le plugin &lt;a href=&#034;http://plugins.spip.net/zcore.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Z-core&lt;/a&gt; est l'h&#233;ritage du plugin &lt;a href=&#034;http://plugins.spip.net/plugin4344.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Zpip&lt;/a&gt; d&#233;velopp&#233; par Matthieu Marcillaud, C&#233;dric Morin, Romy T&#234;tue et un collectif SPIP. Z-core est le moteur offrant le d&#233;coupage des squelettes. Il ne fournit pas de squelettes. C'est &#224; nous ou au plugin choisi de fournir les pages qui vont bien.&lt;br class='autobr' /&gt;
&lt;strong&gt;C'est rapide et efficace.&lt;/strong&gt; Il faut savoir aussi que les noms de blocs/zones ont chang&#233; par rapport &#224; Zpip. Presque que chaque zone correspond &#224; un r&#233;pertoire.&lt;br class='autobr' /&gt;
C'est un peu complexe &#224; appr&#233;hender au d&#233;part. Mais c'est un aspect &#034;vite oubli&#233;&#034; au profit de son efficacit&#233;.&lt;/p&gt;
&lt;blockquote class=&#034;alert alert-info&#034;&gt;&lt;h2 class=&#034;spip&#034;&gt;Remarque&lt;/h2&gt;
&lt;p&gt;L'un des premiers jeux de squelettes offerts &#224; la communaut&#233; SPIP utilisant cette m&#233;canique &lt;i&gt;zcore&lt;/i&gt; est le plugin &#034;SPIP-r&#034; d&#233;velopp&#233; par C&#233;dric.&lt;br class='manualbr' /&gt;Toute la doc sur ce site : &lt;a href=&#034;http://spipr.nursit.com/&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://spipr.nursit.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 class=&#034;spip&#034;&gt;Probl&#233;matique&lt;/h2&gt;
&lt;p&gt;Il arrive parfois que l'on d&#233;sire que la page sommaire ait sa propre architecture, diff&#233;rente du reste des pages classiques.&lt;br class='autobr' /&gt;
On pourrait ajouter des balises conditionnelles si on se trouve sur un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV{type-page}|=={sommaire}&lt;/code&gt; mais &#231;a risque de faire lourd si votre mise en page est complexe.&lt;/p&gt;
&lt;p&gt;Voici le &lt;strong&gt;code initial de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;structure.html&lt;/code&gt;&lt;/strong&gt; fournit par Zcore :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#VAL{_Z_DOCTYPE}|defined|?{#VAL{_Z_DOCTYPE}|constant}|sinon{&lt;!DOCTYPE HTML&gt;})][
(#SET{class,[page_(#ENV{type-page,page})[ #ENV{type-page,page}_(#ENV{composition,''})]][ composition_(#ENV{composition})]})][
(#REM) http://paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/]
&lt;!--[if lt IE 7 ]&gt; &lt;html class=&#034;[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie6 lte9 lte8 lte7&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034; xml:lang=&#034;#LANG&#034; lang=&#034;#LANG&#034; dir=&#034;#LANG_DIR&#034;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 7 ]&gt; &lt;html class=&#034;[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie7 lte9 lte8 lte7&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034; xml:lang=&#034;#LANG&#034; lang=&#034;#LANG&#034; dir=&#034;#LANG_DIR&#034;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 8 ]&gt; &lt;html class=&#034;[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie8 lte9 lte8&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034; xml:lang=&#034;#LANG&#034; lang=&#034;#LANG&#034; dir=&#034;#LANG_DIR&#034;&gt; &lt;![endif]--&gt;
&lt;!--[if IE 9 ]&gt; &lt;html class=&#034;[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js ie ie9 lte9&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034; xml:lang=&#034;#LANG&#034; lang=&#034;#LANG&#034; dir=&#034;#LANG_DIR&#034;&gt; &lt;![endif]--&gt;
&lt;!--[if (gt IE 9)|!(IE)]&gt;&lt;!--&gt;
&lt;html class=&#034;[(#GET{class})][ (#LANG_DIR)][ (#LANG)] no-js&#034; xmlns=&#034;http://www.w3.org/1999/xhtml&#034; xml:lang=&#034;#LANG&#034; lang=&#034;#LANG&#034; dir=&#034;#LANG_DIR&#034;&gt;
&lt;!--&lt;![endif]--&gt; &lt;head&gt; &lt;script type='text/javascript'&gt;/*&lt;![CDATA[*/(function(H){H.className=H.className.replace(/\bno-js\b/,'js')})(document.documentElement);/*]]&gt;*/&lt;/script&gt;[ (#REM) Debut du head particulier a chaque page pour inserer un title, des css particulieres(mais surchargees), ou des js *inline* ]&lt;INCLURE{fond=head/#ENV{type-page},env}&gt;[ (#REM) Partie commune a toutes les pages, sans env ]&lt;INCLURE{fond=inclure/head}&gt;[ (#REM) Fin du head particulier a chaque page, pour inserer des js specifiques par exemple pour inserer des js *externes* ]&lt;INCLURE{fond=head_js/#ENV{type-page},env}&gt; &lt;/head&gt; &lt;INCLURE{fond=body,env}&gt;
&lt;/html&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Zcore renvoie vers un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt; unique pour tout le monde.&lt;br class='autobr' /&gt;
Comment dire &#224; Zcore/SPIP qu'on veut une mise en page particuli&#232;re pour le sommaire ?&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Astuce&lt;/h2&gt;
&lt;p&gt;Pour cela, on peut tr&#232;s facilement ajouter 2 ou 3 lignes de codes pour que SPIP s&#233;lectionne le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt; appropri&#233; pour le sommaire. &lt;br class='autobr' /&gt;
Comme dit plus haut et vu dans le code initial, Z-core envoie une variable d'environnement nomm&#233; &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;type-page&lt;/code&gt;. &lt;br class='autobr' /&gt;
Une page &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;sommaire.html&lt;/code&gt; aura pour variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;type-page=sommaire&lt;/code&gt;. Pour un article, nous aurons &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;type-page=article&lt;/code&gt;, rubrique &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;type-page=rubrique&lt;/code&gt;, etc.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le code magique&lt;/h2&gt;
&lt;p&gt;Pour se faire, on va remplacer &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=body,env} /&gt;&lt;/code&gt; par ceci :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;#SET{body,body}
[(#CHEMIN{body_#ENV{type-page}.html}|?{#SET{body,body_#ENV{type-page}},#SET{body,#GET{body}}})]
[(#CHEMIN{body_#ENV{type-page}-#ENV{composition}.html}|?{#SET{body,body_#ENV{type-page}-#ENV{composition}},#SET{body,#GET{body}}})]
&lt;INCLURE{fond=#GET{body},env} /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Explications&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; On initialise une variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body&lt;/code&gt; avec pour valeur par d&#233;faut &#034;body&#034;.&lt;/li&gt;&lt;li&gt; Gr&#226;ce &#224; la premi&#232;re balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#CHEMIN&lt;/code&gt;&lt;span class=&#034;spip_note_ref&#034;&gt; [&lt;a href=&#034;#nb1&#034; class=&#034;spip_note&#034; rel=&#034;appendix&#034; title=&#034;La doc est par ici&#034; id=&#034;nh1&#034;&gt;1&lt;/a&gt;]&lt;/span&gt;, on va chercher l'existence d'un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body_sommaire.html&lt;/code&gt;. Mais avec ce code, on va aussi regarder si &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body_article.html&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body_rubrique.html&lt;/code&gt; ou autre existent. Sinon, on garde &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt; par d&#233;faut.&lt;/li&gt;&lt;li&gt; La deuxi&#232;me balise &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#CHEMIN&lt;/code&gt; va plus loin en regardant s'il existe une composition en plus de notre type de page. Soit pour une composition &lt;i&gt;&#034;ma_super_compo&#034;&lt;/i&gt; pour mon article, Zcore/SPIP regardera l'existence de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body_article-ma_super_compo.html&lt;/code&gt;. Si elle n'existe pas, on garde la valeur pr&#233;c&#233;dente de la variable &#034;body&#034;.&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Erratum du 17/01/2014&lt;/h2&gt;&lt;blockquote class=&#034;alert alert-error&#034;&gt;
&lt;strong&gt;Attention&lt;/strong&gt;&lt;br class='manualbr' /&gt;Il n'est pas n&#233;cessaire de faire tout cela. Rendons justice en pointant vers l'article de la doc expliquant cela : &lt;a href=&#034;http://spipr.nursit.com/framework-z#layoutsspecifiques&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://spipr.nursit.com/framework-z...&lt;/a&gt;
&lt;/blockquote&gt;
&lt;p&gt;Gr&#226;ce au message de Val&#233;ry dans le forum ci dessous, j'ai fouill&#233; un peu plus dans le code de z-core et il s'av&#232;re qu'il n'est pas n&#233;cessaire d'utiliser le code ci-dessus pour le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt;&lt;br class='autobr' /&gt;
Z-core va d&#233;tecter &#034;naturellement&#034; et sans artifice la pr&#233;sence de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body-rubrique.html&lt;/code&gt; ou &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body-rubrique-ma_compo.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mais le code ci-dessous est toujours d'actualit&#233; :&lt;/strong&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Aller plus loin&lt;/h2&gt;
&lt;p&gt;On pourrait &#233;tendre ce principe sur les zones de d&#233;coupage dans notre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt;.&lt;br class='autobr' /&gt;
En effet, on pourrait avoir besoin pour un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;aside&lt;/code&gt;, d'une composition de rubrique particuli&#232;re, un autre contenu que celui donner par &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;aside/rubrique.html&lt;/code&gt;. Pour cela, ajouter en d&#233;but de votre fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt; le code suivant :&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;[(#SET{html,#ENV{type-page}})]
[(#SET{html2,#ENV{type-page}-#ENV{composition}})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;On instancie 2 valeurs :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; &#034;html&#034; qui contient le type de page ;&lt;/li&gt;&lt;li&gt; &#034;html2&#034; contient le type de page et la composition associ&#233;e.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;A la place de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=aside/#ENV{type-page},env} /&gt;&lt;/code&gt; de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;body.html&lt;/code&gt;, mettre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;&lt;INCLURE{fond=aside/#GET{aside},env} /&gt;&lt;/code&gt;.&lt;br class='autobr' /&gt;
Et la ligne juste au dessus, mettre ce code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;[(#CHEMIN{aside/#GET{html2}.html}|?{#SET{aside,#GET{html2}},#SET{aside,#GET{html}}})]&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;L'astuce est donc la m&#234;me que plus haut. Pour une composition &lt;i&gt;&#034;ma_super_compo&#034;&lt;/i&gt; pour une rubrique, on va chercher l'existence de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;aside/rubrique-ma_super_compo.html&lt;/code&gt;, sinon on prend &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;aside/rubrique.html&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Et voil&#224; !&lt;br class='autobr' /&gt;
A vous de tester si cette m&#233;canique vous convient ou pas ! &lt;strong&gt;Pour ma part c'est test&#233; et approuv&#233; !&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;div id=&#034;nb1&#034;&gt;
&lt;p&gt;&lt;span class=&#034;spip_note_ref&#034;&gt;[&lt;a href=&#034;#nh1&#034; class=&#034;spip_note&#034; title=&#034;Notes 1&#034; rev=&#034;appendix&#034;&gt;1&lt;/a&gt;] &lt;/span&gt;La doc est par &lt;a href=&#034;http://www.spip.net/fr_article4332.html&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ici&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;Image : &#169; &lt;a href=&#034;http://skitterphoto.com/?portfolio=fish-skeleton&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Skitterphoto&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Afficher les globals tout en boucle SPIP</title>
		<link>https://preprod.teddypayet.com/Afficher-les-globals-tout-en-boucle-SPIP</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Afficher-les-globals-tout-en-boucle-SPIP</guid>
		<dc:date>2013-11-15T17:11:41Z</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>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>PHP</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>Boucle DATA</dc:subject>
		<dc:subject>Boucle CONDITION</dc:subject>
		<dc:subject>jQuery</dc:subject>

		<description>
&lt;p&gt;Lorsqu'on fait un d&#233;veloppement PHP, on a besoin parfois de savoir ce qu'on a dans nos $GLOBALS. Il en va de m&#234;me lorsqu'on est en d&#233;veloppement avec SPIP. Voici un bout de code qui peut d&#233;panner. &lt;br class='autobr' /&gt; Pr&#233;ambule Il existe des solutions plus pouss&#233;es comme les logiciels IDE qui permettent de voir les fonctions appell&#233;es dans la page. Malheureusement, on n'a pas toujours la possibilit&#233; de coder avec ces logiciels dans l'infrastructure o&#249; nous sommes. Dans SPIP, on peut m&#234;me utiliser le plugin (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/PHP" rel="tag"&gt;PHP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Boucle-DATA" rel="tag"&gt;Boucle DATA&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Boucle-CONDITION" rel="tag"&gt;Boucle CONDITION&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH95/arton120-cc7f7.png?1725293379' class='spip_logo spip_logo_right' width='150' height='95' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Lorsqu'on fait un d&#233;veloppement PHP, on a besoin parfois de savoir ce qu'on a dans nos &lt;i&gt;$GLOBALS&lt;/i&gt;. Il en va de m&#234;me lorsqu'on est en d&#233;veloppement avec SPIP. Voici un bout de code qui peut d&#233;panner.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;ambule&lt;/h2&gt;
&lt;p&gt;Il existe des solutions plus pouss&#233;es comme les logiciels IDE qui permettent de voir les fonctions appell&#233;es dans la page. Malheureusement, on n'a pas toujours la possibilit&#233; de coder avec ces logiciels dans l'infrastructure o&#249; nous sommes.&lt;br class='autobr' /&gt;
Dans SPIP, on peut m&#234;me utiliser le plugin &lt;a href=&#034;http://contrib.spip.net/TestBuilder&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Test Builder&lt;/a&gt; pour cr&#233;er... nos tests. C'est super pratique quand on a pris le coup de main.&lt;/p&gt;
&lt;p&gt;Mais voil&#224;... Ca, c'est dans le meilleur des mondes. Parfois, tout cela n'est pas possible ou on a juste besoin d'une information sans avoir &#224; utiliser un couteau Suisse(c) l&#224; o&#249; un cure-dent suffirait.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Le code&lt;/h2&gt;
&lt;p&gt;Pour faire illustrer notre exemple, on va cr&#233;er dans notre r&#233;pertoire squelettes l'arborescence suivante :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; prive/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; squelettes/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; contenu/
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; globals.html&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Le fichier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;globals.html&lt;/code&gt; contiendra, soyons originaux, l'affichage de nos globals. Tout se fera par cette page.&lt;/p&gt;
&lt;p&gt;Pour l'appeller, aller &#224; l'adresse &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ecrire/?exec=globals&lt;/code&gt;. Comme le fichier est vide, vous devriez peut-&#234;tre avoir une erreur ou au mieux une page &#034;blanche&#034;.&lt;/p&gt;
&lt;p&gt;Voici le code &#224; ins&#233;rer dans la page &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;globals.html&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint html spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;&lt;div class=&#034;nettoyeur&#034;&gt; &lt;/div&gt; &lt;BOUCLE_index(CONDITION){si #ENV{index}}&gt; #SET{global,$GLOBALS[#ENV{index}]} &lt;/BOUCLE_index&gt; #SET{global,$GLOBALS} &lt;//B_index&gt; &lt;B_form&gt; &lt;div class=&#034;liste globals&#034;&gt; &lt;h2 class=&#034;h2&#034;&gt;Index des $GLOBALS&lt;/h2&gt; &lt;form method=&#034;GET&#034; action=&#034;#SELF&#034; class=&#034;ajax&#034;&gt; [(#SELF|parametre_url{'index',''}|parametre_url{'affichage',''}|form_hidden)] &lt;select id=&#034;index_select&#034; name=&#034;index&#034;&gt; &lt;BOUCLE_form(DATA) {source table, #EVAL{$GLOBALS}|array_keys} {par valeur}&gt;[(#SET{nom_index,#VAL{&#034;'&#034;}|concat{#VALEUR,&#034;'&#034;}})] #SET{datatype,$GLOBALS[#GET{nom_index}]} &lt;option value=&#034;#VALEUR&#034;[ (#ENV{index}|=={#VALEUR}|oui) selected=&#034;selected&#034;] data-type=&#034;[(#EVAL{#GET{datatype}}|gettype)]&#034;&gt;#VALEUR&lt;/option&gt; &lt;/BOUCLE_form&gt; &lt;/select&gt; &lt;select id=&#034;affichage_select&#034; name=&#034;affichage&#034;&gt; &lt;option value=&#034;var_dump&#034;[ (#ENV{affichage}|=={#VALEUR}|oui) selected=&#034;selected&#034;]&gt;var_dump&lt;/option&gt; &lt;option value=&#034;cles&#034;[ (#ENV{affichage}|=={#VALEUR}|oui) selected=&#034;selected&#034;]&gt;Afficher uniquement les cl&#233;s&lt;/option&gt; &lt;/select&gt; &lt;input type=&#034;submit&#034; value=&#034;Valider&#034; /&gt; &lt;/form&gt; &lt;/div&gt; &lt;/B_form&gt; [(#SET{nom_index,#VAL{&#034;'&#034;}|concat{#ENV{index},&#034;'&#034;}})] #SET{datatype,$GLOBALS[#GET{nom_index}]} [(#ENV{index}|non) &lt;h3&gt;$GLOBALS [ &lt;br/&gt;&lt;small&gt;(#EVAL{$GLOBALS}|gettype)&lt;/small&gt;] &lt;/h3&gt; ] [(#ENV{index}|oui) [&lt;h3&gt;(#GET{datatype}) [ &lt;br/&gt;&lt;small&gt;(#EVAL{#GET{datatype}}|gettype)&lt;/small&gt;] &lt;/h3&gt;] ] [(#ENV{affichage}|=={var_dump}|oui) [&lt;pre&gt;(#EVAL{#GET{global}}|print|sinon{'vide'})&lt;/pre&gt;] ] [(#ENV{affichage}|=={cles}|oui) [&lt;pre&gt;(#EVAL{#GET{global}}|array_keys|foreach|sinon{'vide'})&lt;/pre&gt;] ] [(#ENV{affichage}|non) [&lt;pre&gt;(#EVAL{#GET{global}}|array_keys|foreach|sinon{'vide'})&lt;/pre&gt;] ] &lt;script type=&#034;text/javascript&#034;&gt; (function($) { $('#index_select').change(function(){ var datatype = $(this).find('option:selected').attr('data-type'); if (datatype == 'array') { $('#affichage_select').val('cles'); } else { $('#affichage_select').val('var_dump'); } }); })(jQuery); &lt;/script&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 class=&#034;spip&#034;&gt;Explications&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;La boucle &#034;index&#034;&lt;/strong&gt;&lt;br class='autobr' /&gt;
Elle va tout simplement regarder si on a pass&#233; un param&#232;tre &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;index&lt;/code&gt; dans notre URL. Si oui, on affichera le contenu de &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS[#ENV{index}]&lt;/code&gt;. Sinon, on prend &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;La boucle &#034;form&#034;&lt;/strong&gt;&lt;br class='autobr' /&gt;
Elle va cr&#233;er un formulaire avec 2 champs &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt;. Le premier &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; listera tous les &#034;index&#034; de notre super variable PHP &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;$GLOBALS&lt;/code&gt;.&lt;br class='autobr' /&gt;
Le deuxi&#232;me &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; se charge d'indiquer quel type d'affichage d&#233;sire-t-on avoir pour notre variable :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;i&gt;var_dump&lt;/i&gt; : pour les utilisateurs PHP, cela parle de source : &#034;affiche les informations structur&#233;es d'une variable, y compris son type et sa valeur.&#034; Sauf que dans notre cas, on n'a pas le type :-P
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; &lt;i&gt;cles&lt;/i&gt; : affiche le tableau associatif des cl&#233;s de notre variable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les ENV&lt;/strong&gt;&lt;br class='autobr' /&gt;
Les &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;#ENV&lt;/code&gt; apr&#232;s notre boucle &#034;form&#034; v&#233;rifie la pr&#233;sence du param&#232;tre &#034;affichage&#034; dans notre url. Selon sa valeur, on affichera d'une certaine fa&#231;on le contenu de notre variable.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Le javascript&lt;/strong&gt;&lt;br class='autobr' /&gt;
Le javascript en fin de page va juste changer la s&#233;lection du deuxi&#232;me &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; selon le type de variable qu'on aura. Si notre variable est de type &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;array&lt;/code&gt;, le &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;select&lt;/code&gt; affichage sera &#034;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;cles&lt;/code&gt;&#034;. Tous les autres types (Object, string, etc.) auront un affichage &#034;&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;var_dump&lt;/code&gt;&#034;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Fini...&lt;/h2&gt;
&lt;p&gt;Ce code vous permet donc depuis l'espace priv&#233; d'avoir les globals. Mais il vous suffit de faire une page accessible sur la partie publique de votre site avec exactement le m&#234;me code pour avoir les globals dans cet environnement.&lt;/p&gt;
&lt;p&gt;Encore une fois, ce n'est qu'une astuce parmis d'autres. Si vous en avez aussi, elles sont les bienvenues en commentaires !&lt;br class='autobr' /&gt;
Cela permettra d'avoir d'autres pratiques de d&#233;veloppeurs SPIP/PHP.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Lister la liste des squelettes de var_mode=inclure</title>
		<link>https://preprod.teddypayet.com/Lister-la-liste-des-squelettes-de-var_mode-inclure</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Lister-la-liste-des-squelettes-de-var_mode-inclure</guid>
		<dc:date>2013-09-23T15:30:00Z</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>Astuce</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>jQuery</dc:subject>

		<description>
&lt;p&gt;Depuis SPIP 2, il existe un mode tr&#232;s int&#233;ressant pour retrouver ses petits : var_mode=inclure. Cet aide au d&#233;buggage s'est am&#233;lior&#233; au fur et &#224; mesure. Mais il n'est pas ais&#233; de retrouver la liste compl&#232;te des squelettes (noisettes, inclure, etc.) en un seul endroit et un seul regard. &lt;br class='autobr' /&gt; Voici un petit bout de javascript qui va vous permettre d'avoir le nom de chaque bloc appel&#233; dans une liste ordonn&#233;e. &lt;br class='autobr' /&gt;
Pour SPIP 2.0 : var text = '' ; $('.blocs legend').each(function() text +='' (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH113/arton114-b3443.png?1725293379' class='spip_logo spip_logo_right' width='150' height='113' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;Depuis SPIP 2, il existe un mode tr&#232;s int&#233;ressant pour retrouver ses petits : &lt;a href=&#034;http://www.spip.net/fr_article4453.html#var_mode_inclure&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;var_mode=inclure&lt;/a&gt;. Cet aide au d&#233;buggage s'est am&#233;lior&#233; au fur et &#224; mesure. Mais il n'est pas ais&#233; de retrouver la liste compl&#232;te des squelettes (noisettes, inclure, etc.) en un seul endroit et un seul regard.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;Voici un petit bout de javascript qui va vous permettre d'avoir le nom de chaque bloc appel&#233; dans une liste ordonn&#233;e.&lt;/p&gt;
&lt;p&gt;Pour SPIP 2.0 :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint linenums spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;var text = '&lt;div style=&#034;position:absolute; top: 10%; right:0; z-index:1000; max-width:25%; background-color:#646464; color:white;&#034;&gt;&lt;ol&gt;'; $('.blocs legend').each(function(){ text +='&lt;li&gt;' + this.innerHTML + '&lt;/li&gt;'; }); text += '&lt;/ol&gt;&lt;/div&gt;'; $('body').append(text);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Pour SPIP 2.1 et SPIP 3 :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint linenums spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;var text = '&lt;div style=&#034;position:absolute; top: 10%; right:0; z-index:1000; max-width:25%; background-color:#646464; color:white;&#034;&gt;&lt;ol&gt;'; $('.inclure_blocs h6').each(function(){ text +='&lt;li&gt;' + this.innerHTML + '&lt;/li&gt;'; }); text += '&lt;/ol&gt;&lt;/div&gt;'; $('body').append(text);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Ce code est &#224; mettre dans la console de votre navigateur bien entendu.&lt;br class='autobr' /&gt;
Enjoy !&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Partager sur #G+ en #javascript</title>
		<link>https://preprod.teddypayet.com/Partager-sur-G-en-javascript</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Partager-sur-G-en-javascript</guid>
		<dc:date>2013-07-16T08:29:52Z</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>Javascript</dc:subject>

		<description>
&lt;p&gt;Pour ceux qui me suivent un peu, vous avez remarqu&#233; que j'utilise Google+ et Twitter. Lorsque Google Reader existait encore :-$ il me suffisait de cliquer sur le bouton de partage pour que ce que je voulais se publie sur Google+ puis, par RSS sur Twitter. &lt;br class='autobr' /&gt;
Malheureusement, depuis le 1er juillet, Google reader n'est plus de ce monde&#8230; &lt;br class='autobr' /&gt; J'ai d&#251; trouver un autre lecteur RSS en ligne qui soit sympa et surtout fonctionnel. J'ai test&#233; The Old Reader qui est plut&#244;t bien fait. On retrouve les (&#8230;)&lt;/p&gt;


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

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

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Pour ceux qui me suivent un peu, vous avez remarqu&#233; que j'utilise Google+ et Twitter. Lorsque Google Reader existait encore :-$ il me suffisait de cliquer sur le bouton de partage pour que ce que je voulais se publie sur Google+ puis, par RSS sur Twitter.&lt;/p&gt;
&lt;p&gt;Malheureusement, depuis le 1er juillet, Google reader n'est plus de ce monde&#8230;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p&gt;J'ai d&#251; trouver un autre lecteur RSS en ligne qui soit sympa et surtout fonctionnel. J'ai test&#233; &lt;a href=&#034;http://theoldreader.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;The Old Reader&lt;/a&gt; qui est plut&#244;t bien fait. On retrouve les fonctions principales qu'on attend d'un reader. Manque les partages&#8230;&lt;br class='autobr' /&gt;
J'ai test&#233; depuis 1 semaine &lt;a href=&#034;http://cloud.feedly.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Feedly&lt;/a&gt;. Esth&#233;tiquement, on est dans du Flat-UI. C'est simple et agr&#233;able. &lt;br class='autobr' /&gt;
Je ne m'attarderai pas dans cet article sur ses fonctions car ce n'est pas le sujet.&lt;/p&gt;
&lt;p&gt;Que ce soit sur &lt;a href=&#034;http://theoldreader.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;The Old Reader&lt;/a&gt; ou &lt;a href=&#034;http://cloud.feedly.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Feedly&lt;/a&gt;, le partage vers Google+ n'est pas &#034;naturel&#034; comme avec Google Reader. Sur Feedly, on a un bouton &#034;&lt;i&gt;g+1&lt;/i&gt;&#034;. Il renvoie vers la page &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;http://plus.google.com/share?url=votre_url_a_partager.tld&lt;/code&gt;.&lt;/p&gt;
&lt;div class='spip_document_217 spip_document spip_documents spip_document_image spip_documents_center spip_document_center spip_document_avec_legende' data-legende-len=&#034;28&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/jpg/plus_google_com_share.jpg' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/jpeg&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH595/plus_google_com_share-2772d.jpg?1725919401' width='500' height='595' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page de partage de Google+
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;Vous pouvez voir une pr&#233;visualisation de votre lien en dessous de la zone de commentaires : le titre de la page, une image s&#233;lectionn&#233;e et l'url.&lt;br class='autobr' /&gt;
Je vais utiliser cette page pour mon besoin.&lt;/p&gt;
&lt;p&gt;Si vous &#234;tes comme moi, vous aimez &#034;personnaliser&#034; le titre en y mettant des mots-cl&#233;s (&lt;i&gt;hashtags&lt;/i&gt;). Mais voil&#224;&#8230; Il vous faut retaper tout le titre manuellement. Long quand on partage beaucoup d'articles en une journ&#233;e.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Vif du sujet : du javascript&lt;/h2&gt;
&lt;p&gt;Firefox, Chrome et Safari permettent d'avoir un bookmark contenant du javascript. J'ai utilis&#233; cette m&#233;thode pour pouvoir partager et copier le titre de mon article dans la zone de commentaire.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Les premi&#232;res lignes de codes&lt;/strong&gt;&lt;br class='autobr' /&gt;
&lt;i&gt;Dans les lignes de codes que j'&#233;crirai sur cette page, je ferai la version &#233;tendue. La version minifi&#233;e sera en lien.&lt;/i&gt;&lt;br class='autobr' /&gt;
Tout d'abord, quand je suis sur une page que je d&#233;sire partager, il y a plusieurs m&#233;thodes :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; copier le lien, aller sur mon compte Google+, coller le lien dans la zone de partage, entrer mon texte et enfin &#034;partager&#034; en cliquant sur le bouton&#8230;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Un petit bout de javascript pour partager le lien sur mon compte Google+ (Ce dernier n'ayant pas d'API, il reste des &#233;tapes manuelles que je ne peux &#233;viter).&lt;/p&gt;
&lt;p&gt;Bien entendu, j'utilise la deuxi&#232;me m&#233;thode de pr&#233;f&#233;rence. Voici enfin le code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint linenums javascript spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;location.href='https://plus.google.com/share?url='+encodeURIComponent(location.href);&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Tr&#232;s simple, non ? Ajouter &lt;a href=&#034;javascript:location.href='https://plus.google.com/share?url='+encodeURIComponent(location.href);&#034;&gt;ce lien&lt;/a&gt; dans votre barre personnelle.&lt;br class='autobr' /&gt;
&lt;code class='spip_code spip_code_inline' dir='ltr'&gt;location.href&lt;/code&gt; correspond &#224; l'url de votre barre d'adresse. Vous en voyez 2. Le premier c'est l'url vers laquelle vous allez &#234;tre redirig&#233;. Le second est l'url de la page actuelle.&lt;/p&gt;
&lt;p&gt;Cool. Mais l&#224;, on est que redirig&#233; uniquement. La zone de commentaires n'a pas &#233;t&#233; personnalis&#233;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Personnaliser la zone de commentaires&lt;/h2&gt;
&lt;p&gt;Actuellement, j'utilise un deuxi&#232;me &#034;bouton&#034; quand je suis sur cette page de partage. J'ai fait des tests qui n'ont pas &#233;t&#233; concluant selon les diff&#233;rentes machines sur lesquelles j'&#233;tais. Le temps de chargement diff&#232;re selon le type de connection, la rapidit&#233; de l'ordinateur, le navigateur, etc.&lt;br class='autobr' /&gt;
Donc, le deuxi&#232;me bouton est le meilleur compromis pour le moment.&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint linenums spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;(function(){ var titre = document.getElementsByClassName(&#034;ot-anchor&#034;)[1].textContent; document.getElementsByClassName(&#034;editable&#034;)[0].innerHTML = titre;
})();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La premi&#232;re variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;titre&lt;/code&gt; va chercher le titre de ma page. &lt;br class='manualbr' /&gt;L'image, le titre et l'url ont tous les 3 la class &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;ot-anchor&lt;/code&gt;. Celui qui m'int&#233;resse est le 2&#232;me&#8230; soit un index &#034;1&#034;.&lt;br class='autobr' /&gt;
Une fois le titre trouv&#233;, je l'ins&#232;re dans la zone de commentaires. Ce n'est pas un textarea classique&#8230; C'est un div avec la class &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;editable&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&#192; tester en rajoutant &lt;a href=&#034;javascript:(function(){var titre = document.getElementsByClassName(&#034;ot-anchor&#034;)[1].textContent; document.getElementsByClassName(&#034;editable&#034;)[0].innerHTML = titre;})();&#034;&gt;ce lien&lt;/a&gt; dans votre barre personnelle.&lt;br class='autobr' /&gt;
Copie conforme du titre donc&#8230; On peut maintenant y ajouter nos hashtags.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;On ne peut pas faire plus ?&lt;/h2&gt;
&lt;p&gt;C'est bien cool tout &#231;a, mais je dois &#224; chaque fois rentrer les &#034;#&#034; devant les mots-cl&#233;s que je veux&#8230; Ils sont quasiment les m&#234;me. Ne pourrais-je pas simplifier cette saisie aussi ?&lt;br class='autobr' /&gt;
Et bien oui. Voici le code :&lt;/p&gt;
&lt;div class=&#034;precode&#034;&gt;&lt;pre class='prettyprint linenums spip_code spip_code_block' dir='ltr' style='text-align:left;'&gt;&lt;code&gt;(function(){ var titre = document.getElementsByClassName(&#034;ot-anchor&#034;)[1].textContent; var tableau=titre.split(&#034; &#034;); for(i=0;i&lt;tableau.length;i++){ if(tableau[i].length&gt;3){ tableau[i]=&#034;#&#034;+tableau[i]; } } titre=tableau.join(&#034; &#034;); document.getElementsByClassName(&#034;editable&#034;)[0].innerHTML = titre;
})();&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;La diff&#233;rence avec le pr&#233;c&#233;dent code, c'est que je cr&#233;e une variable &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;tableau&lt;/code&gt;. Elle va se charger de mettre le hashtag devant chaque mot&#8230; J'aurais pu me contenter d'un &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;replace{&#034; &#034;,&#034; #&#034;}&lt;/code&gt;. Mais son inconv&#233;nient est qu'il mettra aussi un &#034;#&#034; devant &#034;of&#034;, &#034;the&#034;, &#034;les&#034;, &#034;le&#034;, &#034;la&#034;, etc.&lt;br class='autobr' /&gt;
Dans mon utilisation, g&#233;n&#233;ralement, les mots que je mets en hashtag font plus de 3 caract&#232;res. &lt;br class='autobr' /&gt;
J'ai r&#233;alis&#233; une petite v&#233;rification gr&#226;ce &#224; une boucle &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;FOR&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Voici &lt;a href=&#034;javascript:(function(){var titre = document.getElementsByClassName(&#034;ot-anchor&#034;)[1].textContent;var tableau=titre.split(&#034; &#034;);for(i=0;i&lt;tableau.length;i++){if(tableau[i].length&gt;3){tableau[i]=&#034;#&#034;+tableau[i];}}titre=tableau.join(&#034; &#034;);document.getElementsByClassName(&#034;editable&#034;)[0].innerHTML = titre;})();&#034;&gt;le bouton&lt;/a&gt; &#224; rajouter dans votre barre personnelle de votre navigateur.&lt;/p&gt;
&lt;p&gt;Dites moi ce que vous en pensez et si vous avez trouv&#233; une meilleure m&#233;thode. Je suis preneur de suggestions. :-)&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Refonte de l'espace priv&#233; de SPIP en Bootstrap</title>
		<link>https://preprod.teddypayet.com/Refonte-de-l-espace-prive-de-SPIP-en-Bootstrap</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Refonte-de-l-espace-prive-de-SPIP-en-Bootstrap</guid>
		<dc:date>2013-04-09T18:02:53Z</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>Web Design</dc:subject>
		<dc:subject>Notes de d&#233;veloppement</dc:subject>
		<dc:subject>Javascript</dc:subject>
		<dc:subject>Bootstrap (CSS et JS)</dc:subject>
		<dc:subject>SVN</dc:subject>

		<description>
&lt;p&gt;En octobre 2012, C&#233;dric (qu'on ne pr&#233;sente plus dans la communaut&#233; SPIP) a publi&#233; sur la zone SPIP un plugin permettant de faire du Bootstrap (anciennement connu sous le nom de &#034;Twitter Bootstrap&#034;) avec notre outil favori. Il a incorpor&#233; dans ce plugin le travail colossale de Tetue sur le respect de la typographie propre &#224; SPIP. Le temps que je me familiarise avec ce Framework CSS (et javascript) avec diff&#233;rents projets, l'envie m'est venue de refaire l'espace priv&#233; de SPIP gr&#226;ce &#224; (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/SPIP" rel="tag"&gt;SPIP&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Web-Design" rel="tag"&gt;Web Design&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Bootstrap-CSS-et-JS" rel="tag"&gt;Bootstrap (CSS et JS)&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/SVN" rel="tag"&gt;SVN&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;En octobre 2012, C&#233;dric (qu'on ne pr&#233;sente plus dans la communaut&#233; SPIP) a publi&#233; sur la zone SPIP un plugin permettant de faire du &lt;a href=&#034;http://twitter.github.io/bootstrap/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Bootstrap&lt;/a&gt; (anciennement connu sous le nom de &#034;&lt;i&gt;Twitter Bootstrap&lt;/i&gt;&#034;) avec notre outil favori. Il a incorpor&#233; dans ce plugin le travail colossale de &lt;a href=&#034;http://spip.tetue.net/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Tetue&lt;/a&gt; sur le respect de la typographie propre &#224; SPIP.&lt;br class='manualbr' /&gt;Le temps que je me familiarise avec ce Framework CSS (et javascript) avec diff&#233;rents projets, l'envie m'est venue de refaire l'espace priv&#233; de SPIP gr&#226;ce &#224; Bootstrap&#8230;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;ambule&lt;/h2&gt;
&lt;p&gt;Cette phase n'est pas une refonte ergonomique de l'espace priv&#233; mais un portage de l'espace priv&#233; sur Bootstrap. Le but &#233;tant de retrouver les fonctionnalit&#233;s de l'ancienne interface et si possible, d'apporter les r&#233;flexions et avantages de Bootstrap. &lt;br class='manualbr' /&gt;&lt;i&gt; &lt;strong&gt;Un groupe de travail pourra &#234;tre mont&#233; &#224; la suite de cette phase de portage pour se pencher sur l'ergonomie de l'espace priv&#233;.&lt;/strong&gt; &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Le choix de Bootstrap a &#233;t&#233; fait pour ma part gr&#226;ce &#224; l'existence du plugin de C&#233;dric. Des personnes pourraient dire que ce choix n'est pas judicieux. Certes, mais nous avons un plugin existant alors autant en profiter. De plus, les phases de portage vers un framework pourront aider si on d&#233;cide de partir vers un autre framework CSS (exemple : &lt;a href=&#034;http://foundation.zurb.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Foundation&lt;/a&gt;, &lt;a href=&#034;http://www.52framework.com/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;52Framework&lt;/a&gt;, &lt;a href=&#034;http://yuilibrary.com/yui/docs/cssgrids/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;YUI Grids&lt;/a&gt;, etc.).&lt;/p&gt;
&lt;p&gt;&lt;i&gt;La r&#233;daction du pr&#233;sent article sur mon blog a &#233;t&#233; fait pour ne pas polluer SPIP Contrib comme l'a tr&#232;s justement not&#233; C&#233;dric &lt;a href=&#034;http://archives.rezo.net/archives/spip-dev.mbox/SHNJ6ASNQZFZY5XMTM2ZFZD343GCS4KP/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;ici&lt;/a&gt;. Quand tout sera sur une version stable, j'&#233;crirai un article sur SPIP Contrib.&lt;/i&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Plus que des mots&#8230;&lt;/h2&gt;
&lt;p&gt;&#8230; des images. &lt;br class='manualbr' /&gt;Pour que vous vous rendiez compte du rendu, je vous invite &#224; regarder les images ci-dessous d'avant/apr&#232;s.&lt;/p&gt;
&lt;div class=&#034;clearfix&#034;&gt; &lt;/div&gt;&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Page d'accueil&lt;/h2&gt;&lt;div class='spip_document_216 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;24&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.42.43.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.42.43-e6ff1.png?1725553524' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page d'accueil - avant
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_215 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;24&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.42.49.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.42.49-23244.png?1725553524' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page d'accueil - apr&#232;s
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_218 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;23&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/070_page_accueil.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH368/070_page_accueil-ed085.png?1725553524' width='500' height='368' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - v0.7.1
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class=&#034;clearfix&#034;&gt; &lt;/div&gt;&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Page d'accueil - Menu de navigation&lt;/h2&gt;&lt;div class='spip_document_213 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;40&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.43.07.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.43.07-2ec36.png?1725553524' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation - avant
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_214 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;40&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.42.57.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.42.57-0d682.png?1725553524' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation - apr&#232;s
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_219 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;41&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/070_page_accueil_menu_navigation.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH368/070_page_accueil_menu_navigation-37057.png?1725553524' width='500' height='368' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation - v0.7.1
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class=&#034;clearfix&#034;&gt; &lt;/div&gt;&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Page d'accueil - Menu de navigation au survol&lt;/h2&gt;&lt;div class='spip_document_212 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;47&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.43.13.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.43.13-d9fe6.png?1725553524' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation survol - avant
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_211 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;47&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.43.18.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.43.18-35910.png?1725553525' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation survol - apr&#232;s
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_220 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;48&#034; data-legende-lenx=&#034;x&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/070_page_accueil_menu_navigation_survol.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH368/070_page_accueil_menu_navigation_survol-ff6ff.png?1725553525' width='500' height='368' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page accueil - Menu navigation survol - v0.7.1
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class=&#034;clearfix&#034;&gt; &lt;/div&gt;&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Page d'article&lt;/h2&gt;&lt;div class='spip_document_209 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;22&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.43.57.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.43.57-a1d0c.png?1725553525' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page article - avant
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_210 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;22&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/capture_d_e_cran_2013-04-09_a_18.43.39.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH296/capture_d_e_cran_2013-04-09_a_18.43.39-e7faa.png?1725553525' width='500' height='296' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page article - apr&#232;s
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div class='spip_document_221 spip_document spip_documents spip_document_image spip_documents_left spip_document_left spip_document_avec_legende' data-legende-len=&#034;25&#034; data-legende-lenx=&#034;&#034;
&gt;
&lt;figure class=&#034;spip_doc_inner&#034;&gt; &lt;a href='https://preprod.teddypayet.com/IMG/png/070_page_article.png' class=&#034;spip_doc_lien mediabox&#034; type=&#034;image/png&#034;&gt; &lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH368/070_page_article-6bbc5.png?1725553525' width='500' height='368' alt='' /&gt;&lt;/a&gt;
&lt;figcaption class='spip_doc_legende'&gt; &lt;div class='spip_doc_titre '&gt;&lt;strong&gt;Page d'article - v0.7.1
&lt;/strong&gt;&lt;/div&gt; &lt;/figcaption&gt;&lt;/figure&gt;
&lt;/div&gt;&lt;div class=&#034;clearfix&#034;&gt; &lt;/div&gt;&lt;hr class=&#034;spip&#034; /&gt;&lt;h2 class=&#034;spip&#034;&gt;Appel &#224; tester&lt;/h2&gt;
&lt;p&gt;Comme vous pouvez le voir, l'interface a pas mal chang&#233; mais il reste beaucoup de travail &#224; r&#233;aliser. De ce fait, j'aurais besoin de beta testeur.&lt;br class='manualbr' /&gt;Un appel a d&#233;j&#224; &#233;t&#233; fait sur la liste &lt;a href=&#034;http://archives.rezo.net/archives/spip-dev.mbox/N4JBYT7ETH75D6FHKPUWLMTLHEOWBEWJ/&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;spip-dev&lt;/a&gt;. On peut continuer la conversation sur la liste mais vous pouvez aussi poster vos commentaires (appr&#233;ciations, remont&#233;es de bugs, pertes de fonctionnalit&#233;s, am&#233;liorations, etc.) sur l'article ici pr&#233;sent.&lt;br class='manualbr' /&gt;Je m'efforcerai &#224; noter chaque bug sur cet article et au moins sur le fichier TODO du r&#233;pertoire dudit plugin.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Pour tester&lt;/h2&gt;
&lt;p&gt;Et bien, pour tester, il vous faudra r&#233;cup&#233;rer les fichiers par svn :&lt;br class='autobr' /&gt;
&lt;code class='prettyprint spip_code spip_code_inline' dir='ltr'&gt;svn checkout svn://zone.spip.org/spip-zone/_plugins_/bootstrap_prive&lt;/code&gt;&lt;br class='autobr' /&gt;
Ce plugin est d&#233;pendant de 2 autres plugins :
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Bootstrap : &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/browser/_plugins_/bootstrap&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt; ;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; LESSCSS : &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/browser/_plugins_/less-css/trunk&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;.&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;R&#233;alisations&lt;/h2&gt;
&lt;p&gt;10/04/2013 :&lt;br class='manualbr' /&gt;Avec le commit &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/changeset/71868&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;, le bandeau de navigation devient blanc (la classe navbar-inverse a &#233;t&#233; retir&#233;e) et laisse place aux ic&#244;nes de couleur propre &#224; SPIP. L'interface en est plus l&#233;g&#232;re, plus douce.&lt;/p&gt;
&lt;p&gt;01/01/2014&lt;br class='manualbr' /&gt;Avec le commit &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/changeset/79796/_plugins_/bootstrap_prive/trunk&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;, le bug sur la page article est r&#233;gl&#233;.&lt;br class='manualbr' /&gt;La pagination est conventionnelle &#224; Bootstrap avec ceci &lt;a href=&#034;http://zone.spip.org/trac/spip-zone/changeset/79797/_plugins_/bootstrap_prive/trunk&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://zone.spip.org/trac/spip-zone...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Quelques packages pour Sublime text 2</title>
		<link>https://preprod.teddypayet.com/Quelques-packages-pour-Sublime-text-2</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Quelques-packages-pour-Sublime-text-2</guid>
		<dc:date>2012-11-27T11:52:51Z</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>Javascript</dc:subject>
		<dc:subject>jQuery</dc:subject>
		<dc:subject>Sublime Text</dc:subject>

		<description>
&lt;p&gt;J'utilise depuis mi-octobre Sublime Text 2 pour la cr&#233;ation de mes pages (html, javascript, css, etc.). De base, il est tr&#232;s bien, mais il montre toute sa puissance lorsqu'on lui ajoute des packages (des extensions). Voici une liste de packages que j'ai install&#233;. &lt;br class='autobr' /&gt; Pr&#233;alable Avant de commencer vous devez installer le &#034;Package Control&#034; pour pouvoir, comme son nom l'indique, g&#233;rer vos diff&#233;rents packages. Suivre la d&#233;marche sur ce site pour l'avoir : &lt;br class='autobr' /&gt; Installation d'un package Pour (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/Astuce" rel="tag"&gt;Astuce&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Notes-de-developpement" rel="tag"&gt;Notes de d&#233;veloppement&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;, 
&lt;a href="https://preprod.teddypayet.com/Sublime-Text" rel="tag"&gt;Sublime Text&lt;/a&gt;

		</description>


 <content:encoded>&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L150xH113/arton100-ee0be.jpg?1724986472' class='spip_logo spip_logo_right' width='150' height='113' alt=&#034;&#034; /&gt;
		&lt;div class='rss_chapo'&gt;&lt;p&gt;J'utilise depuis mi-octobre &lt;a href=&#034;http://www.sublimetext.com&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;Sublime Text 2&lt;/a&gt; pour la cr&#233;ation de mes pages (html, javascript, css, etc.). De base, il est tr&#232;s bien, mais il montre toute sa puissance lorsqu'on lui ajoute des packages (des extensions). Voici une liste de packages que j'ai install&#233;.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2 class=&#034;spip&#034;&gt;Pr&#233;alable&lt;/h2&gt;
&lt;p&gt;Avant de commencer vous devez installer le &lt;i&gt;&#034;Package Control&#034;&lt;/i&gt; pour pouvoir, comme son nom l'indique, g&#233;rer vos diff&#233;rents packages.&lt;br class='manualbr' /&gt;Suivre la d&#233;marche sur ce site pour l'avoir : &lt;a href=&#034;http://wbond.net/sublime_packages/package_control/installation&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://wbond.net/sublime_packages/p...&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a id=&#034;installation&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation d'un package&lt;/h2&gt;
&lt;p&gt;Pour installer un package, appuyez sur &lt;i&gt;&#034;Ctrl+Maj+P&#034;&lt;/i&gt;.&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Tapez &lt;i&gt;&#034;install&#034;&lt;/i&gt;. Vous verrez appara&#238;tre &lt;i&gt;&#034;Package Control : Install Package&#034;&lt;/i&gt;. Cliquez dessus.&lt;/li&gt;&lt;li&gt; En bas de votre fen&#234;tre, &#224; gauche, vous verrez que Sublime Text est en train de r&#233;fl&#233;chir. Il recherche les packages &#224; installer. Il y en a une flopp&#233;e par d&#233;faut.&lt;/li&gt;&lt;li&gt; Cela fait, un champ s'affiche en haut de la fen&#234;tre avec en dessous la liste compl&#232;te des packages disponibles.&lt;/li&gt;&lt;li&gt; Tapez les premi&#232;res lettres du package que vous d&#233;sirez installer. La liste se r&#233;duit comme peau de chagrin pour afficher les r&#233;sultats correspondants &#224; votre recherche.&lt;/li&gt;&lt;li&gt; Cliquez sur celui d&#233;sir&#233;. &#199;a mouline en bas &#224; gauche de votre fen&#234;tre&#8230; Et voil&#224;, votre package est install&#233;.&lt;/li&gt;&lt;li&gt; Si vous ne voyez pas les effets escompt&#233;s de votre package, red&#233;marrez Sublime Text.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;a id=&#034;list_package&#034;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Installation d'un package non r&#233;pertori&#233;&lt;/h2&gt;
&lt;p&gt;On doit maintenant ajouter un package qui n'est pas install&#233; par d&#233;faut dans Package Control. Pour cela, suivre les &#233;tapes suivantes :&lt;/p&gt;
&lt;ul class=&#034;spip&#034; role=&#034;list&#034;&gt;&lt;li&gt; Appuyez sur &lt;i&gt;&#034;Ctrl+Maj+P&#034;&lt;/i&gt;. Taper &lt;i&gt;&#034;repository&#034;&lt;/i&gt;. S'affiche alors &lt;i&gt;&#034;Package Control : add repository&#034;&lt;/i&gt;, validez ce choix.&lt;/li&gt;&lt;li&gt; En bas de votre fen&#234;tre, un champ est apparu. Vous devez coller l'url de votre nouveau package (sur GitHub, c'est l'url indiqu&#233; pour &#034;Git Read-only&#034;). Validez.&lt;/li&gt;&lt;li&gt; &#199;a mouline&#8230; C'est pr&#234;t. Maintenant, passer &#224; la &lt;a href=&#034;#installation&#034; class=&#034;spip_ancre&#034;&gt;m&#233;thode classique&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2 class=&#034;spip&#034;&gt;Zen Coding&lt;/h2&gt;
&lt;p&gt;C'est LE premier package que j'ai install&#233; ! Il vous simplifie la vie quand vous avez des centaines de lignes de codes &#224; rentrer.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Nom dans la liste des repositories : &lt;i&gt;&#034;Zen Coding&#034;&lt;/i&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Plus d'infos : &lt;a href=&#034;http://code.google.com/p/zen-coding/&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://code.google.com/p/zen-coding/&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Prefixr&lt;/h2&gt;
&lt;p&gt;Vous avez tous entendu parler de CSS3&#8230; (entre autres). Et chaque navigateur y va de sa sauce pour son impl&#233;mentation : &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;-moz-border-radius&lt;/code&gt;, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;-webkit-border-radius&lt;/code&gt;, etc.&lt;br class='manualbr' /&gt;Avec Prefixr, il vous suffit d'&#233;crire, par exemple, &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;border-radius : 10px&lt;/code&gt; puis &lt;strong&gt;Edit &gt; Prefixr&lt;/strong&gt;. Et hop ! Il vous met tous les pr&#233;fixes ad&#233;quates.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Nom dans la liste des repositories : &lt;i&gt;&#034;Prefixr&#034;&lt;/i&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Plus d'infos : &lt;a href=&#034;http://prefixr.com&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;http://prefixr.com&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;jQuery&lt;/h2&gt;
&lt;p&gt;Il y a un package de base dans Sublime Text. Mais la version de jQuery utilis&#233;e est inf&#233;rieure &#224; la 1.7 (on n'a pas l'&#233;vent &lt;code class='spip_code spip_code_inline' dir='ltr'&gt;.on()&lt;/code&gt;). Ce qui n'est pas tr&#232;s pratique &#224; la longue. J'ai trouv&#233; un package un peu plus complet par hasard sur github (Une petite recherche sur google avec &lt;i&gt;&#034;jquery sublime text&#034;&lt;/i&gt; ram&#232;ne le lien suivant) : &lt;a href=&#034;https://github.com/mrmartineau/Jquery&#034; class=&#034;spip_out&#034; rel=&#034;external&#034;&gt;MrMartineau&lt;/a&gt;&lt;br class='manualbr' /&gt;Ce n'est pas un package par d&#233;faut, donc suivre la d&#233;marche &lt;a href=&#034;#list_package&#034; class=&#034;spip_ancre&#034;&gt;ci-dessus&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Nom dans la liste des repositories : &lt;i&gt;&#034;jQuery&#034;&lt;/i&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Git Read-only : &lt;a href=&#034;https://github.com/mrmartineau/jQuery.git&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/mrmartineau/jQue...&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Plus d'infos : &lt;a href=&#034;https://github.com/mrmartineau/Jquery&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/mrmartineau/Jquery&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;SideBar Enhancements&lt;/h2&gt;
&lt;p&gt;Ce package &#233;tend votre menu contextuel (clic droit de la souris) sur vos fichiers. Vous pouvez personnaliser les applications qui pourront ouvrir tel ou tel fichier.
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Nom dans la liste des repositories : &lt;i&gt;&#034;SideBar Enhancement&#034;&lt;/i&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Plus d'infos : &lt;a href=&#034;https://github.com/titoBouzout/SideBarEnhancements&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/titoBouzout/Side...&lt;/a&gt;&lt;/p&gt;
&lt;h2 class=&#034;spip&#034;&gt;Bracket Highlighter&lt;/h2&gt;
&lt;p&gt;Un &#034;d&#233;faut&#034; dans Sublime Text, c'est qu'on a un peu de mal &#224; visualiser les &#233;l&#233;ments d'ouverture ou de fermeture du code en comparaison &#224; &lt;i&gt;NotePad++&lt;/i&gt; ou &lt;i&gt;Komodo Edit&lt;/i&gt;. Et bien, il existe un package pour cela. &lt;br class='manualbr' /&gt;Ce n'est pas un package par d&#233;faut, donc suivre la d&#233;marche &lt;a href=&#034;#list_package&#034; class=&#034;spip_ancre&#034;&gt;ci-dessus&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Nom dans la liste des repositories : &lt;i&gt;&#034;BracketHighlighter&#034;&lt;/i&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Git Read-only : &lt;a href=&#034;https://github.com/facelessuser/BracketHighlighter.git&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/facelessuser/Bra...&lt;/a&gt;
&lt;br /&gt;&lt;span class=&#034;spip-puce ltr&#034;&gt;&lt;b&gt;&#8211;&lt;/b&gt;&lt;/span&gt; Plus d'infos : &lt;a href=&#034;https://github.com/facelessuser/BracketHighlighter&#034; class=&#034;spip_url spip_out&#034; rel=&#034;external&#034;&gt;https://github.com/facelessuser/Bra...&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;&lt;p&gt;J'ajouterai au fur et &#224; mesure des packages au fil de l'eau. &lt;br class='manualbr' /&gt;Si vous en avez de sympa, vous pouvez les lister dans les commentaires ou m'envoyer un message pour que je les r&#233;f&#233;rence dans l'article.&lt;/p&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>
<item xml:lang="fr">
		<title>Les ressources du lundi #4</title>
		<link>https://preprod.teddypayet.com/Les-ressources-du-lundi-4</link>
		<guid isPermaLink="true">https://preprod.teddypayet.com/Les-ressources-du-lundi-4</guid>
		<dc:date>2012-05-14T06:30:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Teddy Payet</dc:creator>


		<dc:subject>Javascript</dc:subject>

		<description>
&lt;p&gt;Ce lundi, on va s'int&#233;resser &#224; quelques articles en rapport avec le javascript. Mais on ne va pas oublier l'inspiration et les ressources. Vous trouverez ci-dessous les liens, bien entendu, mais aussi en dessous de la capture, les premi&#232;res phrases de l'article de la ressource. Ainsi, vous aurez un aper&#231;u un peu plus complet. Le mieux : lire tout l'article de la ressource ! ;-) 70+ Best Books On Web Design &lt;br class='autobr' /&gt;
These days there are so many books on the web about Design, Development, &amp; (&#8230;)&lt;/p&gt;


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

/ 
&lt;a href="https://preprod.teddypayet.com/Javascript" rel="tag"&gt;Javascript&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p&gt;Ce lundi, on va s'int&#233;resser &#224; quelques articles en rapport avec le javascript. Mais on ne va pas oublier l'inspiration et les ressources.&lt;br class='manualbr' /&gt;Vous trouverez ci-dessous les liens, bien entendu, mais aussi en dessous de la capture, les premi&#232;res phrases de l'article de la ressource. Ainsi, vous aurez un aper&#231;u un peu plus complet. Le mieux : lire tout l'article de la ressource ! ;-)&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.andysowards.com/blog/2012/70-best-books-on-web-design/&#034;&gt;70+ Best Books On Web Design&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_166 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH349/70_best_books_on_web_design-8d333-efca6.png?1725919402' width='500' height='349' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-166 spip_doc_descriptif&#034;&gt;&lt;p&gt;These days there are so many books on the web about Design, Development, &amp; Programming. What are the best ones ? Where Do I Begin ? Well the best place to start, is right here ! Today we go through some of the latest, and best, Design books on the web. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://tutorialzine.com/2011/10/ios-homescreen-coffeescript/&#034;&gt;Creating an iOS-like Home Screen with CoffeeScript&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_167 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH349/creating_an_ios-like_home_screen_with_coffeescript-bbf94-2f479.png?1725919402' width='500' height='349' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-167 spip_doc_descriptif&#034;&gt;&lt;p&gt;Today we are going to create an iOS-like home screen using CoffeeScript &#8211; a new JavaScript based language, and the jQuery library. CoffeScript has a clean syntax that lies somewhere in between Ruby and Python. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://speckyboy.com/2012/05/09/jcsml-a-new-cross-platform-animation-library/&#034;&gt;jCSML &#8211; A New Cross Platform Animation Library&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_168 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH298/jcsml_-_a_new_cross_platform_animation_library-4edc8-033d4.png?1725919402' width='500' height='298' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-168 spip_doc_descriptif&#034;&gt;&lt;p&gt;With mobile access and tablets, cross-platform media compatibility has become one of the most important features for new web technologies. With Adobe Flash not being supported on iOS and HTML5 not being native to earlier versions of Internet Explorer, the jCS Media Library has arrived just in time. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.redlemonclub.com/brand-you/25-inspiring-quotes-for-creative-people/&#034;&gt;25 Inspiring Quotes for Creative People&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_169 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH298/25_inspiring_quotes_for_creative_people-7aa1c-26cf2.png?1725919402' width='500' height='298' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-169 spip_doc_descriptif&#034;&gt;&lt;p&gt;I find one of the most effective solutions to feeling unmotivated or disinterested in what I'm doing is to read a couple of quotes from others who have been and done it. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.downgraf.com/all-articles/40-essential-ui-design-tools-for-web-designers/&#034;&gt;40 Essential UI Design Tools For Web Designers&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_170 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH298/40_essential_ui_design_tools_for_web_designers-a64f5-c224b.png?1725919402' width='500' height='298' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-170 spip_doc_descriptif&#034;&gt;&lt;p&gt;Web User Interface (UI) elements happen to be the entire crux associated with the matter for internet programmer not to mention designer. A designers concepts not to mention shape decisions always affect the entire end users of the site. Designing consumer interface especially within the initial levels typically is a complex thing then UI design elements may come handy.[&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.dhtmlx.com/blog/ ?p=1384&#034;&gt;Cross-Browser JavaScript Message Library&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_171 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH298/cross-browser_javascript_message_library-579cd-01ee0.png?1725919402' width='500' height='298' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-171 spip_doc_descriptif&#034;&gt;&lt;p&gt;After introducing a new dhtmlxMessage component in DHTMLX 3.0, we decided to enhance it and provide a complete solution for displaying dialog boxes on a web page. Using the code of dhtmlxMessage, we've created a lightweight JavaScript message library that is released under MIT license and can be used for free in any web app. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.designyourway.net/blog/inspiration/custom-blog-posts-design-inspiration-50-amazing-examples/&#034;&gt;Custom Blog Posts Design Inspiration &#8211; 50 Amazing Examples&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_172 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH300/custom_blog_posts_design_inspiration_-_50_amazing_examples-d7c62-accb3.png?1725919402' width='500' height='300' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-172 spip_doc_descriptif&#034;&gt;&lt;p&gt;Creating custom blog posts can have many advantages. For starters, they look a lot better than the plain old repetitive style that normal posts have which makes your site look dynamic in the eyes of your readers who are, maybe, border with your old post style.[&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://css-tricks.com/which-responsive-images-solution-should-you-use/&#034;&gt;Which responsive images solution should you use ?&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_173 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH300/which_responsive_images_solution_should_you_use_-330b1-3621e.png?1725919402' width='500' height='300' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-173 spip_doc_descriptif&#034;&gt;&lt;p&gt;There are a bunch of techniques going around for dealing with responsive images lately. That is, solutions to help us serve the right image for the occasion (e.g. size of screen and bandwidth available). [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://webdesignledger.com/inspiration/inspiration-packaging-design&#034;&gt;Inspiration : Packaging Design&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_174 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH300/inspiration-_packaging_design-586e1-8be67.png?1725919402' width='500' height='300' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-174 spip_doc_descriptif&#034;&gt;&lt;p&gt;Package design can be a good alternative place for finding inspiration. From textures to color schemes and typography, we can get a lot of references from packaging designs. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://freshome.com/2012/05/11/nestled-in-a-lush-forest-in-pennsylvania-the-seidenberg-house/&#034;&gt;Nestled in a Lush Forest in Pennsylvania : The Seidenberg House&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_175 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH299/nestled_in_a_lush_forest_in_pennsylvania-_the_seidenberg_house-ab9d8-9bb7f.png?1725919402' width='500' height='299' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-175 spip_doc_descriptif&#034;&gt;&lt;p&gt;The Seidenberg House, designed by Metcalfe A&amp;D, is a remodeling project of an existing mid-century dwelling. located in Conshohocken, Pennsylvania. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://www.muuuz.com/2012/05/11/comac-restaurant-a-lenvi/&#034;&gt;Comac : Restaurant A l'Envi&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_176 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH299/comac_-_restaurant_a_l_envi-3a3e0-a0859.png?1725919402' width='500' height='299' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-176 spip_doc_descriptif&#034;&gt;&lt;p&gt;Dans le village m&#233;di&#233;val de Charroux, l'agence Comac a r&#233;alis&#233; le r&#233;am&#233;nagement de cette grange du XVII &#232;me si&#232;cle en restaurant. Derri&#232;re les murs de pierre enduite &#224; la chaux se glisse la cuisine et la salle, dans deux volumes de bois, distincts et ouverts, r&#233;unis par un deck. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;
&lt;h3 class=&#034;h3 spip&#034;&gt;&lt;a href=&#034;http://blog.smartpress.com/top-tips-and-tools-for-creating-an-infographic-resume&#034;&gt;Top Tips and Tools for Creating an Infographic Resume&lt;/a&gt;&lt;/h3&gt;
&lt;dl class=&#034;spip_document_177 spip_documents spip_documents_center spip_lien_ok&#034;&gt; &lt;dt&gt;&lt;img src='https://preprod.teddypayet.com/local/cache-vignettes/L500xH297/top_tips_and_tools_for_creating_an_infographic_resume-5ca1b-46cae.png?1725919402' width='500' height='297' /&gt;&lt;/dt&gt; &lt;dd class=&#034;crayon document-descriptif-177 spip_doc_descriptif&#034;&gt;&lt;p&gt;Infographic resumes are all the rage, and with so many people in a position of unemployment, it is not hard to see why job seekers are looking for an innovative and unique way to make themselves stand out when applying for a new job. [&#8230;]&lt;/p&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



</channel>

</rss>
