<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xml:base="http://planete.drupalfr.org" xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel>
 <title>planete drupalfr -</title>
 <link>http://planete.drupalfr.org/frontpage</link>
 <description>The basic front page view.</description>
 <language>en</language>
<item>
 <title>Co-voiturage pour le DC Lyon</title>
 <link>http://planete.drupalfr.org/node/1545</link>
 <description>&lt;p&gt;Bonjour,&lt;/p&gt;
&lt;p&gt;En profitent de l&#039;idée du co-voiturage pour la voyage de Paris vers Lyon &lt;a href=&quot;http://groups.drupal.org/node/229448#comment-750223&quot; rel=&quot;nofollow&quot;&gt;lancé&lt;/a&gt; par Julien.&lt;/p&gt;
&lt;p&gt;Est-ce qu&#039;il y a des offres? Ça serait sympa de s&#039;organiser pour avoir une co-voiturage drupalienne.&lt;/p&gt;
&lt;ul class=&quot;links&quot;&gt;
&lt;li class=&quot;og_links first last&quot;&gt;&lt;a href=&quot;http://groups.drupal.org/france&quot; rel=&quot;nofollow&quot;&gt;France&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/1164">co-voiturage</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/249">Communauté</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/120">DrupalCamp</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1159">perusio</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1165">sedéplacer</category>
 <pubDate>Sun, 20 May 2012 12:23:53 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">1545 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupalcamp Lyon</title>
 <link>http://planete.drupalfr.org/node/1544</link>
 <description>&lt;p&gt;Le 26 et 27 mai prochain, va se dérouler le premier DrupalCamp de l&#039;année dans la ville de Lyon, consacré au CMS Drupal, dont j&#039;effectuerai le déplacement et donc je serais bien présent.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Cet évènement regroupera de nombreux acteurs de scène Drupal, tant au niveau de l&#039;association, que des utilisateurs Techniques, chef de projets ou DSI.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Pendant les 2 jours, une série de conférence est prévue avec 4 tracks en parallèle, provoquant une sélection très difficile pour les personnes présentes. Hors, la deuxième journée, sera plus consacrée au Sprint code et traduction.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Par ailleurs, une salle supplémentaire est disponible en libre accès pour permettre de déposer et de parler d&#039;un autre sujet. Les thèmes seront connus le matin de l&#039;évènement.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Enfin, le programme avec les différents thèmes traités est disponible sur le site de l&#039;évènement et il est important de s&#039;inscrire très rapidement car les places partent très vite.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Liens&amp;nbsp;: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://drupalcamp.fr/fr/programme-lyon&quot; rel=&quot;nofollow&quot;&gt;Programme DrupalCamp Lyon&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://drupalcamp.fr/fr/comment-sinscrire-au-drupalcamp-lyon-2012&quot; rel=&quot;nofollow&quot;&gt;Inscription DrupalCamp Lyon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;
Prochain évènement :&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://afup.org/pages/forumphp2012/&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://blog.hello-design.fr/public/evenement/.bandeau-forum-php-2012-fr-small_m.jpg&quot; alt=&quot;Forum PHP 2012&quot; title=&quot;Forum PHP 2012, mai 2012&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1163">drupalcamp cms drupal lyon drupalfr drupalff</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1024">hello</category>
 <pubDate>Fri, 18 May 2012 13:51:00 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1544 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Drupal &#039;n Drink Paris - jeudi 24 mai</title>
 <link>http://planete.drupalfr.org/node/1543</link>
 <description>&lt;p&gt;Start:&amp;nbsp;&lt;br /&gt;
                    2012-05-24 18:30 UTC        &lt;/p&gt;
&lt;p&gt;                    User group meeting        &lt;/p&gt;
&lt;p&gt;      Organizers:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://groups.drupal.org/user/37662&quot; title=&quot;Voir le profil utilisateur.&quot; rel=&quot;nofollow&quot;&gt;JulienD&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;                    &lt;a href=&quot;http://groups.drupal.org/user/101&quot; title=&quot;Voir le profil utilisateur.&quot; rel=&quot;nofollow&quot;&gt;smokinggoat&lt;/a&gt;        &lt;/p&gt;
&lt;p&gt;Parce que ça fait longtemps que l&#039;on a pas fait un Drink &amp;amp; Drupal sur Paris et parce que les beaux jours reviennent je vous propose que l’on se retrouve jeudi 24 mai vers 18h30. Cette occasion nous permettra aussi de discuter du DrupalCamp qui se déroulera les 26 et 27 mai à Lyon (d&#039;ailleurs si vous n&#039;avez pas encore votre place, sachez qu&#039;il est encore temps - &lt;a href=&quot;http://lyon2012.drupalcamp.fr&quot; / rel=&quot;nofollow&quot;&gt;http://lyon2012.drupalcamp.fr&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Juste pour rappel, un «drink» ou «rencontre autour d’un verre» c’est un moment convivial et informel, sans internet et ce uniquement entouré de passionnés et de débutants. C’est une occasion idéale pour échanger et partager votre expérience contrairement aux meetups bien plus cadrés.&lt;/p&gt;
&lt;p&gt;N’hésitez donc pas à venir avec vos questions, quel que soit votre niveau ou votre utilisation de Drupal vous êtes les bienvenus.&lt;/p&gt;
&lt;p&gt;Le rendez-vous est donc fixé au jeudi 24 mai vers 18h30.&lt;/p&gt;
&lt;p&gt;Le lieu : Cuba Compagnie Cafe 48 Bd Beaumarchais Paris 11e&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Comme d&#039;habitude les inscriptions se font &lt;a href=&quot;http://www.meetup.com/drupal-france-francophonie/events/64908102/&quot; rel=&quot;nofollow&quot;&gt;ici, sur meetup.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul class=&quot;links&quot;&gt;
&lt;li class=&quot;og_links first last&quot;&gt;&lt;a href=&quot;http://groups.drupal.org/france&quot; rel=&quot;nofollow&quot;&gt;France&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/724">Drink &amp;amp;amp; Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/723">JulienD</category>
 <pubDate>Tue, 15 May 2012 18:54:39 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">1543 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Séminaire d&#039;Inauguration d&#039;Acquia France: &quot;La Puissance de Drupal en Entreprise&quot; le 25 Mai à Paris !</title>
 <link>http://planete.drupalfr.org/node/1542</link>
 <description>&lt;p&gt;Start:&amp;nbsp;&lt;br /&gt;
                    2012-05-25 09:30 - 14:30 Europe/Paris        &lt;/p&gt;
&lt;p&gt;                    Related event (ie. not Drupal specific)        &lt;/p&gt;
&lt;p&gt;Scheduled May 25th, 2012 at the Hotel Baltimore in Paris from 9:30 to 14:30, this launch marks another milstone in the global development of the Opensource company.&lt;/p&gt;
&lt;p&gt;Drupal early-adopters, &lt;a href=&quot;http://www.linalis.com/en&quot; rel=&quot;nofollow&quot;&gt;Linalis&lt;/a&gt; is proud to be part of Acquia launch on the French Market!&lt;/p&gt;
&lt;p&gt;During this outstanding Event, participants will have the opportunity to discover the Drupal solution, its features, and &lt;strong&gt;meet the creator of Drupal, Dries Buytaert&lt;/strong&gt;,and professionals partner of Acquia of whom Linalis.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.linalis.com/en/publications/2012/05/acquia-france-grand-opening-seminar-la-puissance-de-drupal-en-entreprise-may-25&quot; rel=&quot;nofollow&quot;&gt;Sign up today&lt;/a&gt; and come tell us about your projects!&lt;/p&gt;
&lt;ul class=&quot;links&quot;&gt;
&lt;li class=&quot;og_links first last&quot;&gt;&lt;a href=&quot;http://groups.drupal.org/france&quot; rel=&quot;nofollow&quot;&gt;France&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/1132">jfedida_linalis</category>
 <pubDate>Tue, 15 May 2012 15:34:13 +0000</pubDate>
 <dc:creator>Drupal Groupe France</dc:creator>
 <guid isPermaLink="false">1542 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 52 - A la découverte de Drupal Commerce avec Commerce Kickstart</title>
 <link>http://planete.drupalfr.org/node/1541</link>
 <description>&lt;p&gt;Alors qu&#039;il existe déjà de nombreuses solutions e-commerce sur le marché (&lt;a href=&quot;http://www.magentocommerce.com/fr/&quot; rel=&quot;nofollow&quot;&gt;Magento&lt;/a&gt;, &lt;a href=&quot;http://www.prestashop.com/fr/&quot; rel=&quot;nofollow&quot;&gt;PrestaShop&lt;/a&gt;...), Drupal 6 a fait une première incursion vers les magasins en ligne avec &lt;a href=&quot;http://drupal.org/project/ubercart&quot; rel=&quot;nofollow&quot;&gt;Ubercart&lt;/a&gt; mais c&#039;est réellement avec &lt;a href=&quot;http://drupal.org/project/commerce&quot; rel=&quot;nofollow&quot;&gt;Drupal Commerce &lt;/a&gt;pour Drupal 7 qu&#039;une solution mature, fiable et évolutive existe. Plus qu&#039;une simple suite de modules, c&#039;est un framework de commerce puissant qui donne une part très importante à &lt;a href=&quot;http://drupal.org/project/views&quot; rel=&quot;nofollow&quot;&gt;Views&lt;/a&gt; et &lt;a href=&quot;http://drupal.org/project/rules&quot; rel=&quot;nofollow&quot;&gt;Rules&lt;/a&gt; pour personnaliser à l&#039;envie son magasin. Découvrez la distribution &lt;a href=&quot;http://drupal.org/project/commerce_kickstart&quot; rel=&quot;nofollow&quot;&gt;Commerce Kickstart&lt;/a&gt; qui package une boutique tout prête pour vous familiariser.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/e-commerce&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;E-commerce&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 14 May 2012 06:17:24 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1541 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>1er Rendez-vous proposé par l&#039;antenne @afup_paris</title>
 <link>http://planete.drupalfr.org/node/1540</link>
 <description>&lt;p&gt;Quelques semaines après son lancement, le premier Rendez-vous de l&#039;antenne AFUP Paris a été mi sur pied, sur le thème&amp;nbsp;:&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Les CMS Open-source en PHP&amp;nbsp;: Drupal - Joomla - Wordpress&lt;/strong&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;L&#039;évènement se déroulera le 23 mai prochain à &quot;&lt;a href=&quot;http://www.lacantine.org&quot; rel=&quot;nofollow&quot;&gt;La cantine&lt;/a&gt;&quot;, dont l&#039;entrée est gratuite sur pré-inscription.&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Par ailleurs, le choix de ces trois CMS sont parmi les plus utilisés, les plus populaires et les plus récompensés, arrivant en tête de nombreux classements.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Du coté des intervenants, 3 personnes impliqués dans chaque CMS ont été conviées pour répondre aux points suivants&amp;nbsp;:&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quelles sont les spécificités de chacune de ces solutions ?&lt;/li&gt;
&lt;li&gt;Quelles sont leurs forces, leurs faiblesses ?&lt;/li&gt;
&lt;li&gt;Quelles possibilités d&#039;évolution, quels outils d&#039;administration&amp;nbsp;? &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cette soirée doit permettre de répondre aux nombreuses attentes et interrogations de chacun, mais aussi&amp;nbsp;:&lt;/p&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Des programmeurs PHP qui souhaitent en utiliser un, &lt;/li&gt;
&lt;li&gt;Mais aussi des utilisateurs de Frameworks, qui ont la charge de réaliser un projet avec un CMS&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Enfin, toutes les personnes désireux d&#039;en connaître plus sur ces CMS.&lt;/p&gt;
&lt;p&gt;Alors n&#039;hésitez pas à vous rendre sur la page du rendez-vous pour vous inscrire et connaître tous les détails.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://afup.org/pages/rendezvous/&quot; rel=&quot;nofollow&quot;&gt;Détails soirée&amp;nbsp;: Les CMS Open-source en PHP&amp;nbsp;: Drupal - Joomla - Wordpress&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/1162">cms php drupal joomla wordpress soiree cantine lacantine afup</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1024">hello</category>
 <pubDate>Thu, 10 May 2012 16:41:00 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1540 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 51 - Initiation à l&#039;optimisation de performances sous Drupal 7</title>
 <link>http://planete.drupalfr.org/node/1538</link>
 <description>&lt;p&gt;La plupart des administrateurs de sites Drupal oublient souvent que quelques réglages simples peuvent faire une différence fondamentale pour améliorer les performances de rendu de pages. Grâce au cache de pages, de blocs mais aussi à l&#039;agrégation CSS/JS et à la mise en cache des vues, un site peut radicalement se métamorphoser et supporter bien plus de visiteurs anonymes et/ou authentifiés que vous ne le pensez. Votre serveur aussi vous dira merci !&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Confirmé&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/performance&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Performance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 07 May 2012 09:43:10 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1538 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Conférences Drupal au Forum PHP 2012</title>
 <link>http://planete.drupalfr.org/node/1536</link>
 <description>&lt;p&gt;L’Association Française des Utilisateurs de PHP (AFUP) vient de publier le programme du Forum PHP 2012 qui se déroulera le 5 et 6 juin 2012 à la cité universitaire de Paris. Il s’agit d’un évènement majeur de la communauté PHP francophone depuis plus de 10 ans avec un programme de conférences de haut niveau.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Le CMS Drupal sera à cette occasion représentée par l’intermédiaire de conférences avec Bastien Jaillot et Simon Perdrisat pour «Drupal comme vous ne l’avez jamais vu», Jonathan-David SCHRÖDER pour «Bien comprendre et choisir Lucene, Solr…». Ainsi que la présence de Christophe Villeneuve (‘Trésorier Adjoint de DrupalFR’) avec un retour d’expérience.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Par ailleurs, pour cette édition 2012, l’accent a été mis sur la performance, la qualité et les nouveaux usages avec des conférenciers reconnus et une programmation riche et variée.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;De nombreux intervenants vont effectuer le déplacement comme Rasmus Lerdorf qui proposera un tour d’horizon du PHP en 2012. Enrico Zimuel présentera&amp;nbsp;» A quick start on Zend Framework 2», LB Denker proposera&amp;nbsp;» Scaling Communication through Continious Integration «. Du coté des conférenciers francophones, la venue de Frédéric Hardy pour&amp;nbsp;» Anatomie du test «, accompagné de Ivan Enderlin, ainsi que pour un atelier&amp;nbsp;» TDD avec atoum «. Jérôme Renard présentera quant à lui&amp;nbsp;» Varnish pour le développeur PHP «.&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Enfin deux grandes nouveautés de ce Forum PHP 2012&amp;nbsp;:&lt;br /&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une série de lightning talks (10 mini-confs de 4 minutes)… l’appel à sujets sera annoncé prochainement&lt;/li&gt;
&lt;li&gt;Et une table ronde spéciale DSI sur l’utilisation de PHP dans les grands groupes, avec la participation exceptionnelle de e-TF1 et de La Fourchette.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Les liens utiles :&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;* &lt;a href=&quot;http://afup.org/pages/forumphp2012/sessions.php&quot; rel=&quot;nofollow&quot;&gt;La liste des conférences&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://afup.org/pages/forumphp2012/conferenciers.php&quot; rel=&quot;nofollow&quot;&gt;Les conférenciers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Pour vous inscrire, ne perdez pas de temps, &lt;a href=&quot;http://afup.org/pages/forumphp2012/inscription.php&quot; rel=&quot;nofollow&quot;&gt;réservez votre place au Forum PHP 2012&lt;/a&gt; !&lt;/p&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1158">drupal forumphp forum php 2012 forumphp2012</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1024">hello</category>
 <pubDate>Thu, 03 May 2012 21:25:00 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1536 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Info utile #2 – Simpletest et le multilinguisme</title>
 <link>http://planete.drupalfr.org/node/1535</link>
 <description>&lt;p&gt;J&amp;#8217;ai identifié un problème assez ennuyeux il y a quelques jours lorsque j&amp;#8217;essayais de lancer des tests simpletests depuis un module du core, quelque soit le test déclenché, le batch plantait. Après vérification que la résolution du nom de ma VM se faisait bien localement, c&amp;#8217;est la panne sèche, pas d&amp;#8217;idée sur la cause du problème.&lt;/p&gt;
&lt;p&gt;La cause du problème était pourtant sous mes yeux depuis le début, dans la barre d&amp;#8217;adresse, ce petit préfixe qui traîne et qui ne paie pas de mine, en remplaçant le &amp;#8216;fr&amp;#8217; par un &amp;#8216;en&amp;#8217; ou en le supprimant, le problème s&amp;#8217;est résolu.&lt;/p&gt;
&lt;p&gt;Pensez-y si le problème vous arrive, la négociation de langue n&amp;#8217;est pas compatible avec simpletest.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/161">Développement</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/652">Julien Dubois</category>
 <pubDate>Mon, 30 Apr 2012 15:40:53 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1535 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 50 - A la découverte de Views 3 pour Drupal 7</title>
 <link>http://planete.drupalfr.org/node/1534</link>
 <description>&lt;p&gt;Après de longs mois de gestation, &lt;a href=&quot;http://drupal.org/project/views&quot; rel=&quot;nofollow&quot;&gt;Views 3&lt;/a&gt; est sorti tout d&#039;abord sur &lt;a href=&quot;http://www.drupalgardens.com/&quot; rel=&quot;nofollow&quot;&gt;Drupal Gardens&lt;/a&gt; puis dans la communauté avec pas mal de changements et d&#039;améliorations, notamment au niveau de l&#039;expérience utilisateur, l&#039;accessibilité et la facilité de création de nouvelles vues dynamiques. &lt;a href=&quot;http://drupal.org/project/ctools&quot; rel=&quot;nofollow&quot;&gt;Chaos Tools Suite (ctools)&lt;/a&gt; est toujours une dépendance et tous deux sont désormais disponibles en version stable, ce qui a vraiment donné le la de la migration de nombreux sites de Drupal 6 vers Drupal 7.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/configuration&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;taxonomy-term-reference-1&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/blocs&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Blocs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 30 Apr 2012 08:49:44 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1534 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 49 - Utiliser des menus déroulants jQuery avec Superfish</title>
 <link>http://planete.drupalfr.org/node/1531</link>
 <description>&lt;p&gt;Plutôt que de devoir développer un menu déroulant JavaScript/jQuery et CSS et surtout devoir le mettre en forme et l&#039;intégrer à Drupal 7, le module &lt;a href=&quot;http://drupal.org/project/superfish&quot; rel=&quot;nofollow&quot;&gt;Superfish&lt;/a&gt; pour Drupal 7 vous facilite tout cela et propose en quelques clics des menus complets, fonctionnels, compatibles avec les téléphones portables et tablettes mais aussi les langues RTL (Right To Left).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/menus&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Menus&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;taxonomy-term-reference-1&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/ux&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;UX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 23 Apr 2012 12:15:27 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1531 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Changer dynamiquement la palette d&#039;URXVT (et donc de VIM)</title>
 <link>http://planete.drupalfr.org/node/1526</link>
 <description>&lt;p&gt;&lt;a class=&quot;tool print&quot; href=&quot;http://artisan.karma-lab.net/print/1798&quot; title=&quot;Version imprimable&quot; rel=&quot;nofollow&quot;&gt;Print&lt;/a&gt;&lt;br /&gt;
      &lt;a class=&quot;tool pdf&quot; href=&quot;http://artisan.karma-lab.net/flux/drupalfrorg/sites/default/files/pdfcache/1798/changer-dynamiquement-la-palette-d-urxvt-et-donc-de-vim.pdf&quot; title=&quot;Version PDF&quot; rel=&quot;nofollow&quot;&gt;PDF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/big_icon/contents/1798/crystal_project_colors.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-big_icon&quot; width=&quot;64&quot; height=&quot;64&quot; /&gt;&lt;/p&gt;
&lt;p&gt;   &lt;a href=&quot;http://artisan.karma-lab.net/categories/urxvt&quot; rel=&quot;nofollow&quot;&gt;urxvt&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/vim&quot; rel=&quot;nofollow&quot;&gt;VIM&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/xterm&quot; rel=&quot;nofollow&quot;&gt;xterm&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/xtermcontrol&quot; rel=&quot;nofollow&quot;&gt;xtermcontrol&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/couleurs&quot; rel=&quot;nofollow&quot;&gt;couleurs&lt;/a&gt;&lt;br /&gt;
   Changer dynamiquement la palette d&#039;URXVT (et donc de VIM)&lt;br /&gt;
   Le 20 avril, 2012 - 11:09 | Ulhume&lt;/p&gt;
&lt;p&gt;
L&#039;un des avantages de gVIM par rapport à VIM/terminal est sa capacité à charger dynamique un thème de colorisation autonome. Dans un terminal, on est en effet lié à la palette qui ne peut pas être modifiée autrement qu&#039;en passant par le fichier de ressources, et donc un redémarrage du terminal. Impossible donc de basculer de manière fluide d&#039;un thème &quot;light&quot; en journée à un thème &quot;dark&quot; en soirée avec VIM/Terminal ? En fait non, comme souvent, il existe une solution élégante à cette problématique.
&lt;/p&gt;
&lt;h2&gt;Pour quoi faire ?&lt;/h2&gt;
&lt;p&gt;
Comme beaucoup, lorsque j&#039;ai commencé à utiliser VIM à plein temps, mon choix naturel c&#039;est porté sur sa version graphique (gVim) principalement pour l&#039;usage de la souris (pratique tout de même pour redimensionner les panneaux) et les changements de polices/couleurs à la volée (pratique pour utiliser un thème de couleurs adapté à l&#039;ambiance lumineuse du moment). Plus tard, je me suis rendu compte qu&#039;avec Urxvt, je pouvais modifier facilement mes palettes et utiliser la souris à peu prés comme en mode graphique. Je suis donc passé à un VIM full terminal. L&#039;intérêt du terminal étant pour moi d&#039;avoir un seul framework applicatif à gérer, et plus précisément pour VIM d&#039;avoir la même configuration en local et en distant. Mais restait tout de même le problème du dynamisme.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche statico-dynamique&lt;/h2&gt;
&lt;p&gt;
Dans la mesure où URxvt va pomper ses couleurs dans le fichier ~/.Xdefaults et qu&#039;il est possible de définir un jeu de couleur par classe, on peut envisager l&#039;idée d&#039;écrire des palettes spécifiques par classe d&#039;application. Ainsi lancer un urxvt -name solarized donnerait la classe &quot;solarized&quot; à URvt permettant à X11 de lui fournir la configuration de couleur adéquate.
&lt;/p&gt;
&lt;p&gt;
Si cette approche est fonctionnelle (c&#039;est ce que je faisais jusqu&#039;à hier), elle est un peu galère car demande à redémarrer vim pour passer d&#039;un thème de couleur à l&#039;autre. Cas classique, un vim plein à craquer que je reprend le soir pour continuer à bosser. L&#039;envie de changer de thème pour quelque chose de plus sombre et l&#039;obligation de relancer et donc de perdre l&#039;ensemble de mon workspace (oui, je sais, je pourrais sauvegarder ma session, mais j&#039;aime pas ça...).
&lt;/p&gt;
&lt;h2&gt;L&#039;approche 256 couleurs&lt;/h2&gt;
&lt;p&gt;
La solution utilisée par certain consiste à écrire des fichiers de syntaxe VIM en exploitant les 256 couleurs du terminal. C&#039;est une approche en effet mais pour moi il reste plus simple de gérer une petite palette de 16 couleurs en mode RGB. En plus, toutes les applications ne prennent pas en charge les 256 couleurs d&#039;un terminal, autant donc rester sur du standard.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche par échappement&lt;/h2&gt;
&lt;p&gt;
Pour octroyer un peu de dynamisme à URxvt, la première possibilité à laquelle j&#039;ai pensé consiste à exploiter ses codes d&#039;échappement propriétaires d&#039;URxvt. J&#039;utilisais déjà cette technique pour changer la police à la volée, bien pratique pour basculer une console en petits caractères pour voir plus de contenu. Cela donnait quelque chose comme cela :&lt;/p&gt;
&lt;p&gt;    gaston$printf &#039;\33]50;%s%d\007&#039; &quot;xft:Droid Sans Mono:size=&quot; 8&lt;/p&gt;
&lt;p&gt;    Changement dynamique de la police d&amp;#039;URXVT&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Déjà ce n&#039;est pas super pratique, mais surtout j&#039;ai été infichu de trouver de telles séquences pour la palette même si j&#039;ai lu à quelques reprise des traces de leur existence.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche &quot;xterm&quot;&lt;/h2&gt;
&lt;p&gt;
C&#039;est alors que je suis tombé sur un outil appelé &lt;a href=&quot;http://www.thrysoee.dk/xtermcontrol/&quot; rel=&quot;nofollow&quot;&gt;xtermcontrol&lt;/a&gt;. Sur le papier il fait tout ce que je désire et même plus. Il n&#039;a qu&#039;un petit soucis, il est dédié à... xterm. Alors fin de l&#039;histoire ? Ben non, car il fonctionne aussi très bien avec URxvt.
&lt;/p&gt;
&lt;p&gt;
xtermcontrol s&#039;installe par un simple sudo aptitude install xtermcontrol. Cet outil en pure ligne de commande dispose de nombreuses options permettant de lire et de régler la police (exit donc la séquence d&#039;échappements), le fond et l&#039;encre, la couleur du curseur texte ou souris, et bien évidemment les 16 couleurs de la palette primaire du terminal.
&lt;/p&gt;
&lt;p&gt;
Il m&#039;a donc suffit de créer de petits scripts tout con pour régler le boulot proprement. Voici ce que cela donne pour basculer un terminal en mode &quot;solarized&quot; :&lt;/p&gt;
&lt;p&gt;    #! /bin/bash&lt;br /&gt;
xtermcontrol --bg=#002B36&lt;br /&gt;
xtermcontrol --fg=#FDF6E3&lt;br /&gt;
xtermcontrol --color0=#002B36&lt;br /&gt;
xtermcontrol --color1=#073642&lt;br /&gt;
xtermcontrol --color2=#93A1A1&lt;br /&gt;
xtermcontrol --color3=#5C3569&lt;br /&gt;
xtermcontrol --color4=#335057&lt;br /&gt;
xtermcontrol --color5=#251000&lt;br /&gt;
xtermcontrol --color6=#572703&lt;br /&gt;
xtermcontrol --color7=#FDF6E3&lt;br /&gt;
xtermcontrol --color8=#B58900&lt;br /&gt;
xtermcontrol --color9=#CB4B16&lt;br /&gt;
xtermcontrol --color10=#DC322F&lt;br /&gt;
xtermcontrol --color11=#D33682&lt;br /&gt;
xtermcontrol --color12=#6C71C4&lt;br /&gt;
xtermcontrol --color13=#268BD2&lt;br /&gt;
xtermcontrol --color14=#2AA198&lt;br /&gt;
xtermcontrol --color15=#859900&lt;/p&gt;
&lt;p&gt;    Bascule le terminal en couleurs Solarized&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Et voilà. Ce script est à exécuter dans un terminal ou au sein même de VIM par un :!palette-solarized.
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
L&#039;intérêt de cette commande va bien plus loin que la colorisation sous VIM. Vous pouvez ainsi créer des scripts pour augmenter/diminuer la taille de la police d&#039;un terminal, adapter les couleurs à une application spécifique peu configurable (au hasard htop) et restaurer l&#039;ancienne palette à la sortie, etc...
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/291">Article</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1149">couleurs</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/216">Planet Libre</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/214">Ulhume</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1150">urxvt</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1130">VIM</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1131">vimfr</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1152">xterm</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1154">xtermcontrol</category>
 <pubDate>Fri, 20 Apr 2012 09:09:34 +0000</pubDate>
 <dc:creator>Artisan Numérique</dc:creator>
 <guid isPermaLink="false">1526 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Changer dynamiquement la palette d&#039;URXVT (et donc de VIM)</title>
 <link>http://planete.drupalfr.org/node/1527</link>
 <description>&lt;p&gt;&lt;a class=&quot;tool print&quot; href=&quot;http://artisan.karma-lab.net/print/1798&quot; title=&quot;Version imprimable&quot; rel=&quot;nofollow&quot;&gt;Print&lt;/a&gt;&lt;br /&gt;
      &lt;a class=&quot;tool pdf&quot; href=&quot;http://artisan.karma-lab.net/flux/drupalfrorg/sites/default/files/pdfcache/1798/changer-dynamiquement-la-palette-d-urxvt-et-donc-de-vim.pdf&quot; title=&quot;Version PDF&quot; rel=&quot;nofollow&quot;&gt;PDF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/big_icon/contents/1798/crystal_project_colors.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-big_icon&quot; width=&quot;64&quot; height=&quot;64&quot; /&gt;&lt;/p&gt;
&lt;p&gt;   &lt;a href=&quot;http://artisan.karma-lab.net/categories/urxvt&quot; rel=&quot;nofollow&quot;&gt;urxvt&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/vim&quot; rel=&quot;nofollow&quot;&gt;VIM&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/xterm&quot; rel=&quot;nofollow&quot;&gt;xterm&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/xtermcontrol&quot; rel=&quot;nofollow&quot;&gt;xtermcontrol&lt;/a&gt; &lt;a href=&quot;http://artisan.karma-lab.net/categories/couleurs&quot; rel=&quot;nofollow&quot;&gt;couleurs&lt;/a&gt;&lt;br /&gt;
   Changer dynamiquement la palette d&#039;URXVT (et donc de VIM)&lt;br /&gt;
   Le 20 avril, 2012 - 11:09 | Ulhume&lt;/p&gt;
&lt;p&gt;
L&#039;un des avantages de gVIM par rapport à VIM/terminal est sa capacité à charger dynamique un thème de colorisation autonome. Dans un terminal, on est en effet lié à la palette qui ne peut pas être modifiée autrement qu&#039;en passant par le fichier de ressources, et donc un redémarrage du terminal. Impossible donc de basculer de manière fluide d&#039;un thème &quot;light&quot; en journée à un thème &quot;dark&quot; en soirée avec VIM/Terminal ? En fait non, comme souvent, il existe une solution élégante à cette problématique.
&lt;/p&gt;
&lt;h2&gt;Pour quoi faire ?&lt;/h2&gt;
&lt;p&gt;
Comme beaucoup, lorsque j&#039;ai commencé à utiliser VIM à plein temps, mon choix naturel c&#039;est porté sur sa version graphique (gVim) principalement pour l&#039;usage de la souris (pratique tout de même pour redimensionner les panneaux) et les changements de polices/couleurs à la volée (pratique pour utiliser un thème de couleurs adapté à l&#039;ambiance lumineuse du moment). Plus tard, je me suis rendu compte qu&#039;avec Urxvt, je pouvais modifier facilement mes palettes et utiliser la souris à peu prés comme en mode graphique. Je suis donc passé à un VIM full terminal. L&#039;intérêt du terminal étant pour moi d&#039;avoir un seul framework applicatif à gérer, et plus précisément pour VIM d&#039;avoir la même configuration en local et en distant. Mais restait tout de même le problème du dynamisme.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche statico-dynamique&lt;/h2&gt;
&lt;p&gt;
Dans la mesure où URxvt va pomper ses couleurs dans le fichier ~/.Xdefaults et qu&#039;il est possible de définir un jeu de couleur par classe, on peut envisager l&#039;idée d&#039;écrire des palettes spécifiques par classe d&#039;application. Ainsi lancer un urxvt -name solarized donnerait la classe &quot;solarized&quot; à URvt permettant à X11 de lui fournir la configuration de couleur adéquate.
&lt;/p&gt;
&lt;p&gt;
Si cette approche est fonctionnelle (c&#039;est ce que je faisais jusqu&#039;à hier), elle est un peu galère car demande à redémarrer vim pour passer d&#039;un thème de couleur à l&#039;autre. Cas classique, un vim plein à craquer que je reprend le soir pour continuer à bosser. L&#039;envie de changer de thème pour quelque chose de plus sombre et l&#039;obligation de relancer et donc de perdre l&#039;ensemble de mon workspace (oui, je sais, je pourrais sauvegarder ma session, mais j&#039;aime pas ça...).
&lt;/p&gt;
&lt;h2&gt;L&#039;approche 256 couleurs&lt;/h2&gt;
&lt;p&gt;
La solution utilisée par certain consiste à écrire des fichiers de syntaxe VIM en exploitant les 256 couleurs du terminal. C&#039;est une approche en effet mais pour moi il reste plus simple de gérer une petite palette de 16 couleurs en mode RGB. En plus, toutes les applications ne prennent pas en charge les 256 couleurs d&#039;un terminal, autant donc rester sur du standard.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche par échappement&lt;/h2&gt;
&lt;p&gt;
Pour octroyer un peu de dynamisme à URxvt, la première possibilité à laquelle j&#039;ai pensé consiste à exploiter ses codes d&#039;échappement propriétaires d&#039;URxvt. J&#039;utilisais déjà cette technique pour changer la police à la volée, bien pratique pour basculer une console en petits caractères pour voir plus de contenu. Cela donnait quelque chose comme cela :&lt;/p&gt;
&lt;p&gt;    gaston$printf &#039;\33]50;%s%d\007&#039; &quot;xft:Droid Sans Mono:size=&quot; 8&lt;/p&gt;
&lt;p&gt;    Changement dynamique de la police d&amp;#039;URXVT&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Déjà ce n&#039;est pas super pratique, mais surtout j&#039;ai été infichu de trouver de telles séquences pour la palette même si j&#039;ai lu à quelques reprise des traces de leur existence.
&lt;/p&gt;
&lt;h2&gt;L&#039;approche &quot;xterm&quot;&lt;/h2&gt;
&lt;p&gt;
C&#039;est alors que je suis tombé sur un outil appelé &lt;a href=&quot;http://www.thrysoee.dk/xtermcontrol/&quot; rel=&quot;nofollow&quot;&gt;xtermcontrol&lt;/a&gt;. Sur le papier il fait tout ce que je désire et même plus. Il n&#039;a qu&#039;un petit soucis, il est dédié à... xterm. Alors fin de l&#039;histoire ? Ben non, car il fonctionne aussi très bien avec URxvt.
&lt;/p&gt;
&lt;p&gt;
xtermcontrol s&#039;installe par un simple sudo aptitude install xtermcontrol. Cet outil en pure ligne de commande dispose de nombreuses options permettant de lire et de régler la police (exit donc la séquence d&#039;échappements), le fond et l&#039;encre, la couleur du curseur texte ou souris, et bien évidemment les 16 couleurs de la palette primaire du terminal.
&lt;/p&gt;
&lt;p&gt;
Il m&#039;a donc suffit de créer de petits scripts tout con pour régler le boulot proprement. Voici ce que cela donne pour basculer un terminal en mode &quot;solarized&quot; :&lt;/p&gt;
&lt;p&gt;    #! /bin/bash&lt;br /&gt;
xtermcontrol --bg=#002B36&lt;br /&gt;
xtermcontrol --fg=#FDF6E3&lt;br /&gt;
xtermcontrol --color0=#002B36&lt;br /&gt;
xtermcontrol --color1=#073642&lt;br /&gt;
xtermcontrol --color2=#93A1A1&lt;br /&gt;
xtermcontrol --color3=#5C3569&lt;br /&gt;
xtermcontrol --color4=#335057&lt;br /&gt;
xtermcontrol --color5=#251000&lt;br /&gt;
xtermcontrol --color6=#572703&lt;br /&gt;
xtermcontrol --color7=#FDF6E3&lt;br /&gt;
xtermcontrol --color8=#B58900&lt;br /&gt;
xtermcontrol --color9=#CB4B16&lt;br /&gt;
xtermcontrol --color10=#DC322F&lt;br /&gt;
xtermcontrol --color11=#D33682&lt;br /&gt;
xtermcontrol --color12=#6C71C4&lt;br /&gt;
xtermcontrol --color13=#268BD2&lt;br /&gt;
xtermcontrol --color14=#2AA198&lt;br /&gt;
xtermcontrol --color15=#859900&lt;/p&gt;
&lt;p&gt;    Bascule le terminal en couleurs Solarized&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Et voilà. Ce script est à exécuter dans un terminal ou au sein même de VIM par un :!palette-solarized.
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
L&#039;intérêt de cette commande va bien plus loin que la colorisation sous VIM. Vous pouvez ainsi créer des scripts pour augmenter/diminuer la taille de la police d&#039;un terminal, adapter les couleurs à une application spécifique peu configurable (au hasard htop) et restaurer l&#039;ancienne palette à la sortie, etc...
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/291">Article</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1148">couleurs</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/216">Planet Libre</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/214">Ulhume</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1151">urxvt</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1130">VIM</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1131">vimfr</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1153">xterm</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1155">xtermcontrol</category>
 <pubDate>Fri, 20 Apr 2012 09:09:34 +0000</pubDate>
 <dc:creator>Artisan Numérique</dc:creator>
 <guid isPermaLink="false">1527 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 48 - Mettre en place un système de notation sous Drupal 7</title>
 <link>http://planete.drupalfr.org/node/1525</link>
 <description>&lt;p&gt;Pour fidéliser votre communauté et déterminer la popularité et la qualité de vos articles, vous pouvez mettre en place un système de notation sous Drupal 7, grâce à l&#039;utilisation du module &lt;a href=&quot;http://drupal.org/project/fivestar&quot; rel=&quot;nofollow&quot;&gt;Fivestar&lt;/a&gt; et de sa dépendance &lt;a href=&quot;http://drupal.org/project/votingapi&quot; rel=&quot;nofollow&quot;&gt;Voting API&lt;/a&gt;. Avec son rollover &lt;a href=&quot;http://jquery.com/&quot; rel=&quot;nofollow&quot;&gt;jQuery&lt;/a&gt; et à la technologie &lt;a href=&quot;http://fr.wikipedia.org/wiki/Ajax_(informatique)&quot; rel=&quot;nofollow&quot;&gt;AJAX&lt;/a&gt; qui ne nécessite pas de rechargement de page, c&#039;est une façon rapide et efficace de mesurer la satisfaction utilisateur.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/notation&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Notation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 16 Apr 2012 06:47:48 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1525 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 47 - Naviguer aisément dans l&#039;admin de votre site avec le module Coffee</title>
 <link>http://planete.drupalfr.org/node/1521</link>
 <description>&lt;p&gt;Les utilisateurs de Mac OSX seront sûrement très à l&#039;aise avec le module &lt;a href=&quot;http://drupal.org/project/coffee&quot; rel=&quot;nofollow&quot;&gt;Coffee&lt;/a&gt;, qui, à la manière de &lt;a href=&quot;http://en.wikipedia.org/wiki/Spotlight_(software)&quot; rel=&quot;nofollow&quot;&gt;Spotlight&lt;/a&gt; ou &lt;a href=&quot;http://www.alfredapp.com/&quot; rel=&quot;nofollow&quot;&gt;Alfred&lt;/a&gt; permet une recherche ultra rapide dans les pages d&#039;administration du site, en proposant notamment une auto-complétion très efficace et l&#039;ajout de nouveaux nodes en un clin d&#039;œil.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/administration&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Administration&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 09 Apr 2012 10:25:22 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1521 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Ajout de formats de date spécifiques</title>
 <link>http://planete.drupalfr.org/node/1519</link>
 <description>&lt;p&gt;Les formats de date permettent sur Drupal, permettent de faire abstraction de la syntaxe PHP de la fonction date. Concrètement, dans le code, on fait appel à la fonction &lt;a href=&quot;http://api.drupal.org/api/drupal/includes!common.inc/function/format_date/7&quot; target=&quot;_blank&quot; rel=&quot;nofollow&quot;&gt;format_date&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les formats de date sont également récupérés par Views.&lt;/p&gt;
&lt;p&gt;Il est souvent utile de disposer de son propre format de date, car ceux qui sont fournis par défaut ne sont pas toujours suffisants. Pour cela, une petite méthode simple pour créer un format de date spécifique depuis un hook_install ou un profil d&amp;#8217;installation :&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
								&lt;code class=&quot;php&quot;&gt;  /*&lt;br /&gt;
   * Les formats de date spécifiques&lt;br /&gt;
   * Ajout d&#039;un format de date &#039;example&#039;&lt;br /&gt;
   * Sous la forme d/m/Y (ex : 20/05/2012)&lt;br /&gt;
   */&lt;br /&gt;
  $machine_name = &#039;example&#039;;&lt;/p&gt;
&lt;p&gt;  $date_format = array(&lt;br /&gt;
    &#039;type&#039; =&amp;#62; $machine_name,&lt;br /&gt;
    &#039;format&#039; =&amp;#62; &#039;d/m/Y&#039;,&lt;br /&gt;
    &#039;locked&#039; =&amp;#62; TRUE,&lt;br /&gt;
    &#039;is_new&#039; =&amp;#62; TRUE&lt;br /&gt;
  );&lt;br /&gt;
  system_date_format_save($date_format);&lt;br /&gt;
  $type = array(&lt;br /&gt;
    &#039;type&#039; =&amp;#62; $machine_name,&lt;br /&gt;
    &#039;title&#039; =&amp;#62; &#039;Exemple&#039;,&lt;br /&gt;
    &#039;locked&#039; =&amp;#62; TRUE,&lt;br /&gt;
    &#039;is_new&#039; =&amp;#62; TRUE&lt;br /&gt;
  );&lt;br /&gt;
  system_date_format_type_save($type);&lt;/code&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/211">admin</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/656">Drupal 6</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/451">drupal 7</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/206">PHP</category>
 <pubDate>Fri, 06 Apr 2012 15:42:12 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1519 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Se former avec nous! Nous annoncons nos formations en vedette ce printemps.</title>
 <link>http://planete.drupalfr.org/node/1522</link>
 <description>&lt;p&gt;Notre fameuse formation en CSS/Theming Drupal pour débutants est de retour ce printemps! &lt;/p&gt;
&lt;p&gt;Nos formations visent à initier les gens de niveau débutant à intermédiaire à ce système de gestion de contenu et à favoriser votre appropriation des dernières technologies en gestion de sites web. &lt;/p&gt;
&lt;p&gt;Durant le cours, nos formateurs vous aiderons à comprendre les notions de base de la communauté Drupal, le css, l&#039;installation et la configuration des thèmes Drupal pour donner un look sur mesure à votre site. &lt;/p&gt;
&lt;p&gt;Les places sont limitées: réservez la vôtre aussitôt que possible!&lt;/p&gt;
&lt;p&gt;Notez que les formations sont offertes en français, mais quelques ressources et parties peuvent être disponibles en anglais. Des sessions en anglais pourront être organisées selon l&#039;intérêt manifesté.&lt;/p&gt;
&lt;p&gt;Les cours auront lieu &lt;a href=&quot;http://www.koumbit.org/fr/contact&quot; rel=&quot;nofollow&quot;&gt;au local de Koumbit&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;HTML / CSS et theming Drupal pour débutants&lt;/h3&gt;
&lt;p&gt;Suivez avec nous la création d&#039;un look unique pour un site web Drupal. Nous apprendrons tout le processus de création d&#039;un thème, cheminant ensemble pendant la transformation d&#039;une maquette en un thème Drupal. En plus des défis uniques au theming dans Drupal, nous aborderons les derniers standards Web et leurs défis: CSS 3 et HTML 5. Selon les besoins et envies des participants, nous pourrons aussi aborder quelques pratiques plus avancées, par exemple, des &quot;sprites,&quot; ou un bref introduction au theming mobile. &lt;/p&gt;
&lt;p&gt;Suite à cette formation vous serez être en mesure de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer un thème Drupal fonctionnel à partir d&#039;une maquette.&lt;/li&gt;
&lt;li&gt;Connaître et appliquer les bonnes pratiques en theming.&lt;/li&gt;
&lt;li&gt;Connaître les pièges les plus importants (et idéalement les éviter)&lt;/li&gt;
&lt;li&gt;Connaître les outils pratiques pour l&#039;intégration.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Connaissances requises :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Connaissances de base en HTML et CSS (c&#039;est à dire: savoir ce que c&#039;est!). Nous allons revoir les notions de base si besoin est.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Profs&lt;/p&gt;
&lt;p&gt;    &lt;a href=&quot;https://wiki.koumbit.net/LydieServanin&quot; rel=&quot;nofollow&quot;&gt;Lydie Servanin&lt;/a&gt;, intégratrice  et &lt;a href=&quot;https://wiki.koumbit.net/HeidiStrohl&quot; rel=&quot;nofollow&quot;&gt;Heidi Strohl&lt;/a&gt;, graphiste&lt;/p&gt;
&lt;p&gt;Coût&lt;/p&gt;
&lt;p&gt;    375$ pour trois cours/ateliers de 4 heures chaque.&lt;/p&gt;
&lt;p&gt;Dates&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;18 mai, 10h à 14h30&lt;/li&gt;
&lt;li&gt;25 mai, 10h à 14h30&lt;/li&gt;
&lt;li&gt;1 juin, 10h à 14h30&lt;/li&gt;
&lt;p&gt;Note : nous prenons une heure de pause pour le repas.
&lt;/p&gt;
&lt;/ul&gt;
&lt;p&gt;Details&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://wiki.koumbit.net/FormationsExternes/CssIntegration&quot; rel=&quot;nofollow&quot;&gt;Voir le plan de cours&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://membres.koumbit.org/content/cours/html-css-et-theming-drupal-pour-debutants-0&quot; rel=&quot;nofollow&quot;&gt;Inscrivez-vous!&lt;/a&gt; (Limite de 8 participant(e)s) N&#039;oubliez pas de nous laisser savoir si vous avez une requête particulière que vous voulez traiter durant la formation. &lt;/li&gt;
&lt;/ul&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/961">heidi strohl</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/746">Planet Drupal</category>
 <pubDate>Tue, 03 Apr 2012 19:46:50 +0000</pubDate>
 <dc:creator>Koumbit</dc:creator>
 <guid isPermaLink="false">1522 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 46 - Tester les fonctionnalités et restrictions utilisateur avec Masquerade</title>
 <link>http://planete.drupalfr.org/node/1518</link>
 <description>&lt;p&gt;Lorsque l&#039;on met en place des rôles, des restrictions ou des fonctionnalités bien spécifiques pour ses utilisateurs, c&#039;est une véritable corvée que de tester que tout fonctionne correctement. Grâce au module &lt;a href=&quot;http://drupal.org/project/masquerade&quot; rel=&quot;nofollow&quot;&gt;Masquerade&lt;/a&gt; pour Drupal 7, plus de problème puisque vous allez pouvoir prendre possession de n&#039;importe quel compte et tester exactement ce à quoi vos utilisateurs auront droit et ce qu&#039;ils verront sur le site.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/administration&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Administration&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;taxonomy-term-reference-1&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/permissions&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Permissions&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Mon, 02 Apr 2012 12:44:04 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1518 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Convertir un site Drupal MySQL vers PostgreSQL simplement</title>
 <link>http://planete.drupalfr.org/node/1516</link>
 <description>&lt;p&gt;sam, 31/03/2012 - 17:10&lt;br /&gt;
           | &lt;a href=&quot;http://arnumeral.fr/users/yoran&quot; title=&quot;Voir le profil de l&amp;#039;utilisateur&quot; rel=&quot;nofollow&quot;&gt;Yoran&lt;/a&gt;&lt;br /&gt;
           &amp;nbsp; &lt;a href=&quot;http://arnumeral.fr/tutoriels&quot; rel=&quot;nofollow&quot;&gt;Tutoriels&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/drupal&quot; rel=&quot;nofollow&quot;&gt;Drupal&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/database-api&quot; rel=&quot;nofollow&quot;&gt;Database API&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/drupal-7&quot; rel=&quot;nofollow&quot;&gt;Drupal 7&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/module-schema&quot; rel=&quot;nofollow&quot;&gt;Module Schema&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/mysql&quot; rel=&quot;nofollow&quot;&gt;MySQL&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/postgresql&quot; rel=&quot;nofollow&quot;&gt;PostgreSQL&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/schema-api&quot; rel=&quot;nofollow&quot;&gt;Schema API&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    		&lt;H1&gt;Convertir un site Drupal MySQL vers PostgreSQL simplement&lt;/H1&gt;&lt;/p&gt;
&lt;p&gt;    			&lt;a href=&quot;http://arnumeral.fr/files/arnumeral/contenus/960/200px-postgresql_elephant.svg_.png&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://arnumeral.fr/files/arnumeral/imagecache/illustration/contenus/960/200px-postgresql_elephant.svg_.png&quot; alt=&quot;200px-postgresql_elephant.svg_.png&quot; title=&quot;&quot; class=&quot;imagecache imagecache-illustration&quot; width=&quot;200&quot; height=&quot;206&quot; /&gt;&lt;/a&gt;    		&lt;/p&gt;
&lt;p&gt;
Combien de fois ais-je entendu &quot;Postgres c&#039;est super lent comparé à MySQL&quot; (version polie). Et ce qui est amusant c&#039;est que généralement cette affirmation s&#039;appuie uniquement sur un ressenti de développeur assis devant sa bécane de compétition qui n&#039;aura donc jamais qu&#039;un seul pauvre utilisateur à servir... Assez faible vous en conviendrez. Le problème c&#039;est que pour faire une vraie comparaison, il faudrait travailler sur un vrai site qui existerait pour les deux bases de données. Un cas de test généralement délicat voir impossible à monter tant les SGBDR sont mauvais dés qu&#039;il s&#039;agit de les interchanger.
&lt;/p&gt;
&lt;p&gt;
Partant de cela, je me suis demandé, dans le cas exclusif d&#039;un site sous Drupal, comment permettre une telle conversion. Et j&#039;ai fini par tomber sur une méthode finalement assez simple.
&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;Déjà, pourquoi est-ce normalement compliqué ?&lt;/h2&gt;
&lt;/p&gt;
&lt;p&gt;
En effet, puisque tout &lt;a href=&quot;http://fr.wikipedia.org/wiki/Base_de_donn%C3%A9es_relationnelle&quot; rel=&quot;nofollow&quot;&gt;SGBDR&lt;/a&gt; utilise le langage &lt;a href=&quot;http://fr.wikipedia.org/wiki/Structured_Query_Language&quot; rel=&quot;nofollow&quot;&gt;SQL&lt;/a&gt;, convertir une application devrait être l&#039;enfance de l&#039;art. Malheureusement, ça c&#039;est sur le papier. Dans la réalité, c&#039;est un peu comme la norme CSS et Internet Explorer, chaque éditeur de base de données y vas de ses exotismes tant et si bien qu&#039;à la fin, l&#039;application se retrouve pieds et poings liés. Si l&#039;on réduit le champ à une application PHP, les problèmes sont les suivants :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les fonctions PHP (connexion, requêtes, etc) utilisées sont différentes d&#039;une base à l&#039;autre.&lt;/li&gt;
&lt;li&gt;Les créations de tables ne fonctionnent que pour un moteur de base de données.&lt;/li&gt;
&lt;li&gt;Les requêtes utilisent des fonctions spécifiques et même parfois des syntaxes propres à une base.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
En bref, tester les performances sous PostgreSQL d&#039;une application PHP écrite pour MySQL, c&#039;est même pas la peine d&#039;y penser?
&lt;/p&gt;
&lt;h2&gt;Abstraction&lt;/h2&gt;
&lt;p&gt;
C&#039;est pour cela que Drupal, comme une majorité de cadres applicatifs, cherche depuis bien longtemps à mettre en place une certaine forme d&#039;abstraction de la couche de stockage, adressant les trois aspects vu plus haut : la connexion et l&#039;échange de données, la création de tables et le requêtage.
&lt;/p&gt;
&lt;p&gt;
Drupal étant assez simpliste (euphémisme) dans son usage d&#039;une base (pas de clefs étrangères, pas de procédures stockées, pas de triggers, pas de vues, etc), il s&#039;est longtemps borné avec succès à l&#039;abstraction de la connexion et ce principalement pour deux bases : PostgreSQL et MySQL. Avec Drupal 7 et l&#039;adoption de &lt;a href=&quot;http://php.net/manual/fr/book.pdo.php&quot; rel=&quot;nofollow&quot;&gt;PDO&lt;/a&gt;, cette aspect a été encore grandement amélioré.
&lt;/p&gt;
&lt;p&gt;
Depuis Drupal6, &lt;a href=&quot;http://drupal.org/node/146843&quot; rel=&quot;nofollow&quot;&gt;Schema API&lt;/a&gt; adresse l&#039;épineux problème des disparités dans la syntaxe de création des tables. Il est depuis cette version possible d&#039;écrire des modules qui créent des tables dans une sorte de langage pivot (dans le plus pur style d&#039;Array Oriented Programming Drupalien) laissant au système le soin de le traduire dans celui de la base utilisée.
&lt;/p&gt;
&lt;p&gt;
Enfin, avec Drupal 7, arrive l&#039;excellente &lt;a href=&quot;http://drupal.org/developing/api/database&quot; rel=&quot;nofollow&quot;&gt;Database API&lt;/a&gt; qui vient compléter l&#039;attirail en proposant l&#039;abstraction des requêtes dynamiques.
&lt;/p&gt;
&lt;p&gt;
En somme, depuis Drupal 7, nous pouvons donc, avec un peu de soin et de méthode, commencer à écrire des modules qui sont ainsi quasiment agnostiques concernant la couche de stockage.
&lt;/p&gt;
&lt;h2&gt;Schema API et conversion de base&lt;/h2&gt;
&lt;p&gt;
Pour revenir à notre question d&#039;origine, dans la mesure où Drupal peut facilement basculer d&#039;une base à l&#039;autre (abstraction de la connexion), convertir une base de donnée Drupal de MySQL à PostgreSQL se simplifie donc à la résolution de deux problématiques :
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créer une base PostgreSQL content l&#039;ensemble des tables de notre installation MySQL.&lt;/li&gt;
&lt;li&gt;Injecter dans PostgreSQL un dump provenant de MySQL.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Si le second point ne semble pas bien sorcier (ce ne sont au fond juste que des insert), la création du schéma de la base est autrement plus épineux car il s&#039;agit littéralement de traduire le langage MySQL en langage PostgreSQL. Bon courage...
&lt;/p&gt;
&lt;p&gt;
C&#039;est là que Schema API vient à notre rescousse. En effet, à quoi sert de convertir le schéma de MySQL puisque drupal depuis sa version 6 dispose pour l&#039;ensemble de ses modules activés d&#039;une description précise des tables créées. La seule astuce qu&#039;il nous faut trouver, c&#039;est comment le forcer à produire du code &quot;PostgreSQL&quot; lorsqu&#039;il travaille avec MySQL.
&lt;/p&gt;
&lt;p&gt;
Problématique résolue par l&#039;usage de l&#039;indispensable module &lt;a href=&quot;http://drupal.org/project/schema&quot; rel=&quot;nofollow&quot;&gt;Schema&lt;/a&gt;. Ce module a été écrit pour lister les schémas définis par chaque module installés. Il est surtout utilisé pour vérifier que la base de donnée physique est bien en accord avec la description que drupal en a gardé et permet notamment de faire du ménage sur des tables laissées sans objets par exemple lors de mises à jour.
&lt;/p&gt;
&lt;p&gt;
Mais schema permet aussi de générer un script SQL de création de l&#039;ensemble des tables répertoriées. Premier pas vers notre conversion qui s&#039;arrête rapidement car il se limite à utiliser la syntaxe du moteur en cours d&#039;usage.
&lt;/p&gt;
&lt;p&gt;
  Pour contourner cela, nous allons utiliser les fonctionnalités du module Schema dans un petit script très simple :&lt;/p&gt;
&lt;p&gt;    #! /usr/bin/php&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
define&amp;#40;&#039;DRUPAL_ROOT&#039;, getcwd&amp;#40;&amp;#41;&amp;#41;;&lt;/p&gt;
&lt;p&gt;require_once DRUPAL_ROOT . &#039;/includes/bootstrap.inc&#039;;&lt;br /&gt;
drupal_bootstrap&amp;#40;DRUPAL_BOOTSTRAP_FULL&amp;#41;;&lt;/p&gt;
&lt;p&gt;$schema = drupal_get_schema&amp;#40;NULL, TRUE&amp;#41;;&lt;br /&gt;
$sql = &#039;&#039;;&lt;br /&gt;
$class_name = &#039;SchemaDatabaseSchema_pgsql&#039;;&lt;br /&gt;
$engine = new $class_name&amp;#40;Database::getConnection&amp;#40;&amp;#41;&amp;#41;;&lt;br /&gt;
foreach &amp;#40;$schema as $name =&amp;gt; $table&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; if &amp;#40;substr&amp;#40;$name, 0, 1&amp;#41; == &#039;#&#039;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; continue;&lt;br /&gt;
&amp;nbsp; &amp;#125;&lt;br /&gt;
&amp;nbsp; $stmts = $engine-&amp;gt;getCreateTableSql&amp;#40;$name, $table&amp;#41;;&lt;br /&gt;
&amp;nbsp; $sql .= implode&amp;#40;&amp;quot;;\n&amp;quot;, $stmts&amp;#41; . &amp;quot;;\n\n&amp;quot;;&lt;br /&gt;
&amp;#125;&lt;br /&gt;
echo str_replace&amp;#40;array&amp;#40;&#039;{&#039;, &#039;}&#039;&amp;#41;, &#039;&#039;, $sql&amp;#41;;&lt;/p&gt;
&lt;p&gt;    dump_schema.php&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Tout le début n&#039;est qu&#039;une recopie du script PHP de démarrage de Drupal (index.php). Ce qui suit le boostrap est la fonction du module Schema modifiée de sorte à forcer l&#039;usage du traducteur PostgreSQL et ainsi produire un script SQL pour ce moteur.
&lt;/p&gt;
&lt;p&gt;
Il suffit ensuite de lancer ce script pour avoir régler 80% de notre problématique avec code SQL généré en sortie standard qu&#039;il suffira d&#039;injecter dans PostgreSQL. Ensuite il ne restera plus qu&#039;à injecter les données elles-mêmes. La procédure complète donne dés lors quelque chose comme ceci :&lt;/p&gt;
&lt;p&gt;    # Création de la base de donnée sur postgresgaston$echo &quot;create database mon_site&quot; | psql -Upostgres&amp;nbsp;# Injection du schemagaston$php ./dump_schema.php | psql -Upostgres mon_site&amp;nbsp;# Injection des donnéesgaston$mysqldump -uroot -pmot_de_passe_root --no-create-info --compatible=postgresql  mon_site | sed &quot;s/\\\&#039;/\&#039;\&#039;/g&quot; | psql -Upostgres mon_site&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Avouez que ce n&#039;est pas sorcier, et le pire c&#039;est que cela fonctionne. La dernière ligne de la procédure, un peu longuette, permet de générer un dump MySQL contenant seulement les inserts (--no-create-info) et formalisé pour PostgreSQL (--compatible=postgresql). La commande SED est juste là pour convertir les \&#039; en &#039;&#039;. L&#039;exécution de cet import va générer un paquet de warning car PostgreSQL aimerait bien que l&#039;on utilise un approche standard pour les autres échappements (\r, \n, etc.) mais au final, il ne faut que crier et les données sont bien insérées.
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
Cette méthode est grandement améliorable, automatisable et généralisable à d&#039;autres échanges. Je verrais si j&#039;ai le temps d&#039;écrire une procédure plus générique. Mais déjà en l&#039;état j&#039;ai pu la tester sur un gros site en Drupal 7/MySQL qui s&#039;est mis à tourner sous PostgreSQL sans autre tracas.  Magique.
&lt;/p&gt;
&lt;p&gt;
J&#039;ai à cette occasion pu constater que les performances de MySQL teeeeellllement meilleurs que PostgreSQL était pipo/clarinette mais ça, c&#039;est une autre histoire :-)
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/1141">Database API</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/451">drupal 7</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1143">Module Schema</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/404">mysql</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/484">planetlibre.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1144">PostgreSQL</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/613">postgresql.fr</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1145">Schema API</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/284">Tutoriels</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/483">Yoran</category>
 <pubDate>Sat, 31 Mar 2012 15:10:45 +0000</pubDate>
 <dc:creator>arNuméral</dc:creator>
 <guid isPermaLink="false">1516 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Episode 45 - Raccourcir des adresses sous Drupal 7 grâce au module Shorten URLs</title>
 <link>http://planete.drupalfr.org/node/1514</link>
 <description>&lt;p&gt;Avec l&#039;omniprésence des réseaux sociaux dans notre quotidien et désormais des URLs raccourcies, il paraît presque obligatoire de s&#039;assurer que son site Drupal 7 va être capable d&#039;en générer facilement, que ce soit avec des services populaires tels que &lt;a href=&quot;https://bitly.com/&quot; rel=&quot;nofollow&quot;&gt;bit.ly&lt;/a&gt; ou &lt;a href=&quot;http://tinyurl.com/&quot; rel=&quot;nofollow&quot;&gt;tinyurl.com&lt;/a&gt; ou pourquoi pas avec son propre service. Le module &lt;a href=&quot;http://drupal.org/project/shorten&quot; rel=&quot;nofollow&quot;&gt;Shorten URLs&lt;/a&gt; va donc vous y aider en vous permettant de générer des URLs courtes à la demande.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Niveau:&amp;nbsp;Débutant&lt;br /&gt;
&lt;h3 class=&quot;field-label&quot;&gt;Tags: &lt;/h3&gt;
&lt;ul class=&quot;links inline&quot;&gt;
&lt;li class=&quot;taxonomy-term-reference-0&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/reseaux-sociaux&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Réseaux sociaux&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;taxonomy-term-reference-1&quot;&gt;&lt;a href=&quot;http://www.drupalfacile.org/drupal/saas&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;SaaS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;		&lt;a class=&quot;da2a_button&quot; href=&quot;http://www.addtoany.com/share_save&quot; id=&quot;da2a_1&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://www.drupalfacile.org/sites/drupalfacile.org/files/share.gif&quot; alt=&quot;Partager&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/866">DrupalFacile</category>
 <pubDate>Sun, 25 Mar 2012 11:03:05 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1514 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Quoi de neuf dans Drush 5 ?</title>
 <link>http://planete.drupalfr.org/node/1513</link>
 <description>&lt;p&gt;Durant la &lt;a href=&quot;http://denver2012.drupal.org/&quot; title=&quot;DrupalCon Denver 2012&quot; rel=&quot;nofollow&quot;&gt;DrupalCon Denver&lt;/a&gt; cette semaine a eu lieu une conférence par &lt;a href=&quot;http://drupal.org/user/23&quot; title=&quot;Moshe Weitzman on Drupal.org&quot; rel=&quot;nofollow&quot;&gt;Moshe Weitzman&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/user/208732&quot; title=&quot;Jonathan Hedstrom on drupal.org&quot; rel=&quot;nofollow&quot;&gt;Jonathan Hedstrom&lt;/a&gt;, &lt;a href=&quot;http://drupal.org/user/19668&quot; title=&quot;Owen Barton on drupal.org&quot; rel=&quot;nofollow&quot;&gt;Owen Barton&lt;/a&gt; et &lt;a href=&quot;http://drupal.org/user/75278&quot; title=&quot;Mark Sonnabaum on drupal.org&quot; rel=&quot;nofollow&quot;&gt;Mark Sonnabaum&lt;/a&gt;. À l&#039;issue de celle-ci devait être releasée la version 5 stable de Drush (je suis peut-être un peu en avance sur ceci).&lt;/p&gt;
&lt;p&gt;Drush est votre ami, si vous êtes un développeur, vous devez forcément l&#039;avoir installé, et je vais donc partir du principe que vous avez utilisé la version 4. Je vais vous présenter dans cet article &lt;strong&gt;les nouvelles fonctionnalités&lt;/strong&gt; de la version 5.&lt;/p&gt;
&lt;h2&gt;Emplacement de configuration&lt;/h2&gt;
&lt;p&gt;Les configurations, au travers de fichiers drushrc.php, peuvent maintenant être placées à plusieurs endroits :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Relatif à l&#039;utilisateur unix : &lt;code&gt;~/.drush/drushrc.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Relatif au site Drupal : &lt;code&gt;sites/{default|example.com}/drushrc.php&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Relatif au système/serveur :  &lt;code&gt;/etc/drush/drushrc.php&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Alias shell&lt;/h2&gt;
&lt;p&gt;Vous pouvez maintenant fournir &lt;strong&gt;vos propres alias de commandes Drush&lt;/strong&gt; dans la configuration, exemple :&lt;br /&gt;
1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
$options&amp;#91;&#039;shell-aliases&#039;&amp;#93; =&amp;gt; &lt;a href=&quot;http://www.php.net/array&quot; rel=&quot;nofollow&quot;&gt;array&lt;/a&gt;&amp;#40;&lt;br /&gt;
&amp;nbsp; &#039;pull&#039; =&amp;gt; &#039;!git pull&#039;,&lt;br /&gt;
&amp;nbsp; &#039;pulldb&#039; =&amp;gt; &#039;!git pull &amp;amp;&amp;amp; drush updatedb&#039;,&lt;br /&gt;
&amp;#41;;&lt;br /&gt;
Vous pouvez donc renseigner des commandes drush mais ausi des commandes système tel que git ou rm.&lt;/p&gt;
&lt;h2&gt;Gestion des options&lt;/h2&gt;
&lt;p&gt;Les options non reconnues renvoient maintenant une erreur, plus &quot;Mais pourquoi ma commande n&#039;a pas marché ?&quot;, les erreurs de syntaxe sont ainsi plus facilement évitées.&lt;/p&gt;
&lt;p&gt;L&#039;aide des commandes Drush a adopté uniformément une syntaxe pour les paramètres des options :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--option=&amp;lt;valeur&amp;gt;&lt;/code&gt; pour les paramètres obligatoires&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--option=[valeur]&lt;/code&gt; pour les paramètres optionnels&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Compatibilité Windows&lt;/h2&gt;
&lt;p&gt;Enfin ! Oui, ils ont fait du bon boulot... Sponsorisés par Microsoft en personne, un &lt;strong&gt;installer&lt;/strong&gt; est maintenant dispo, et plus (forcément) besoin de cygwin.&lt;/p&gt;
&lt;h2&gt;Tracking&lt;/h2&gt;
&lt;p&gt;Il est maintenant possible de garder un &lt;strong&gt;log des commandes utilisées&lt;/strong&gt;, celles-ci peuvent être anonymisées et envoyées à MongoLab (sponsor des développeurs de Drush) pour faire évoluer Drush dans la bonne voie.&lt;br /&gt;
Ceci peut également être utilisé par les sysadmins pour garder un œil sur ce que font les développeurs.&lt;br /&gt;
Cette option est désactivée par défaut.&lt;/p&gt;
&lt;h2&gt;Drush make&lt;/h2&gt;
&lt;p&gt;Le célèbre gestionnaire de paquet s&#039;invite dans le core de Drush, il est dès à présent possible de créer ses fichiers .make out-of-the-box pour installer ses modules et thèmes préférés toujours plus vite.&lt;br /&gt;
Ce n&#039;est pas tout, les différents téléchargements sont maintenant &lt;strong&gt;réalisés en parallèle&lt;/strong&gt; (4 processus par défaut), pour toujours plus de rapidité !&lt;br /&gt;
D&#039;ailleurs si vous ne le saviez pas, il existe &lt;strong&gt;un cache dans Drush&lt;/strong&gt; qui permet de récupérer les tarball déjà dans le système au lieu de toujours aller les chercher sur le réseau.&lt;/p&gt;
&lt;h2&gt;Autocomplétion&lt;/h2&gt;
&lt;p&gt;Oui, mesdames et messieurs ! L&#039;autocomplétion des alias de sites, des commandes, des alias de shell, des options et des modules est maintenant disponible. Une &lt;strong&gt;gestion des contextes&lt;/strong&gt; permet de ne pas être surchargés par toutes les possibilités. Je vous invite à le tester à l&#039;usage ou à regarder la vidéo pour en savoir plus.&lt;br /&gt;
Pour l&#039;activer il suffit de copier/coller &lt;em&gt;drush.complete.sh&lt;/em&gt; vers &lt;em&gt;/etc/bash_completion.d&lt;/em&gt;, ou, si vous n&#039;avez pas les droits, il suffit d&#039;inclure un petit bout de code dans votre &lt;em&gt;~/.bashrc&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Certaines options vous permettent même de vous passer du mot-clé drush en début de commande, exemple :&lt;br /&gt;&lt;code&gt;@monsite dl views&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;Built-in WebServer&lt;/h2&gt;
&lt;p&gt;Drush propose maintenant un &lt;strong&gt;serveur HTTP léger&lt;/strong&gt; afin d&#039;exécuter vos sites Drupal. &quot;À quoi cela sert&quot; me direz-vous, et bien si vous voulez tester une configuration Drupal sans vous embêter avec les VHosts d&#039;Apache, cette commande est très utile. Outre le fait d&#039;afficher les logs d&#039;accès aux pages, elle affiche également les messages watchdog.&lt;br /&gt;
Ainsi, la commande &lt;code&gt;drush run-server :8889/&lt;/code&gt; ouvrira une page dans votre navigateur vers le site Drupal courant. Ceci requiert php-cgi et PHP 5.3&lt;/p&gt;
&lt;p&gt;Ce n&#039;est pas tout, on peut maintenant faire du &lt;strong&gt;Drupal jetable&lt;/strong&gt; avec la commande &lt;code&gt;quick-drupal&lt;/code&gt;. C&#039;est parfait si vous voulez épater Marcel et son site Joomla en quelques secondes :&lt;br /&gt;&lt;code&gt;cd /tmp&lt;br /&gt;
drush quick-drupal&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Cela télécharge un Drupal 7, crée une base SQLite (donc dans un fichier), et installe le profil d&#039;installation standard. Vous pouvez ensuite jouer avec les très nombreuses options :&lt;br /&gt;&lt;code&gt;drush qd &quot;Ma boutique&quot; --core=commerce_kickstart --profile=commerce_kickstart --yes --watchdog&lt;/code&gt; (Marcel va avoir une attaque après celle-ci)&lt;/p&gt;
&lt;p&gt;Si vous n&#039;en avez plus besoin, &lt;em&gt;rm -r&lt;/em&gt; du dossier, au revoir.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Je l&#039;avoue, j&#039;ai applaudi tout seul chez moi là...&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Queue API&lt;/h2&gt;
&lt;p&gt;Il semblerait que le fonctionnement de la nouvelle Queue API de Drupal 7 soit un peu trop cachée et éxécutable dans le cron, Drush résout maintenant ce problème avec deux commandes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;drush queue-list&lt;/code&gt; liste toutes les queues recensées par les modules&lt;/li&gt;
&lt;li&gt;&lt;code&gt;drush queue-run&lt;/code&gt; exécute ces queues&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Multisites&lt;/h2&gt;
&lt;p&gt;Pour les gens qui bossent sur les multisites, il peut être frustrant de ne pas exécuter la commande dans le bon site ou même que celle-ci s&#039;exécute dans sites/default, Drush 5 fournit les commandes &lt;code&gt;drush site-set&lt;/code&gt; et &lt;code&gt;drush site-reset&lt;/code&gt; pour que ce &lt;strong&gt;paramètre devienne persistant&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Beaucoup de nouveautés, et de taille ! Un conseil personnel, pour bénéficier des dernières fonctionnalités de Drush au jour le jour, clonez le dépôt directement. Celles-ci présentent encore quelques bugs et ils semblerait que les développeurs n&#039;ont pas pu sortir la version stable à temps. Bravo à eux quand même !&lt;/p&gt;
&lt;p&gt;&quot;We&#039;ll see you on the command line&quot; — Moshe Weitzman&lt;/p&gt;
&lt;p&gt;La &lt;strong&gt;vidéo de la présentation&lt;/strong&gt; est disponible &lt;a href=&quot;http://blip.tv/drupalcondenver/drush-5-mile-high-productivity-6041515&quot; title=&quot;DrupalCon Denver Drush 5&quot; rel=&quot;nofollow&quot;&gt;ici&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Tags:&amp;nbsp;&lt;a href=&quot;http://blog.sebcorbin.fr/categorie/tags/drupal&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Drupal&lt;/a&gt;&lt;a href=&quot;http://blog.sebcorbin.fr/categorie/tags/drush&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;Drush&lt;/a&gt;&lt;a href=&quot;http://blog.sebcorbin.fr/categorie/tags/drupalcon&quot; typeof=&quot;Concept&quot; property=&quot;prefLabel&quot; rel=&quot;nofollow&quot;&gt;DrupalCon&lt;/a&gt;&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/800">Seb</category>
 <pubDate>Fri, 23 Mar 2012 08:15:03 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1513 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Débugger une requête dynamique</title>
 <link>http://planete.drupalfr.org/node/1512</link>
 <description>&lt;p&gt;ven, 23/03/2012 - 02:06&lt;br /&gt;
           | &lt;a href=&quot;http://arnumeral.fr/users/yoran&quot; title=&quot;Voir le profil de l&amp;#039;utilisateur&quot; rel=&quot;nofollow&quot;&gt;Yoran&lt;/a&gt;&lt;br /&gt;
           &amp;nbsp; &lt;a href=&quot;http://arnumeral.fr/tutoriels&quot; rel=&quot;nofollow&quot;&gt;Tutoriels&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/drupal&quot; rel=&quot;nofollow&quot;&gt;Drupal&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/database-api&quot; rel=&quot;nofollow&quot;&gt;Database API&lt;/a&gt; &lt;a href=&quot;http://arnumeral.fr/cat%C3%A9gorie/drupal-7&quot; rel=&quot;nofollow&quot;&gt;Drupal 7&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    		&lt;H1&gt;Débugger une requête dynamique&lt;/H1&gt;&lt;/p&gt;
&lt;p&gt;    			&lt;a href=&quot;http://arnumeral.fr/files/arnumeral/contenus/959/sql.png&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;img src=&quot;http://arnumeral.fr/files/arnumeral/imagecache/illustration/contenus/959/sql.png&quot; alt=&quot;sql.png&quot; title=&quot;&quot; class=&quot;imagecache imagecache-illustration&quot; width=&quot;200&quot; height=&quot;200&quot; /&gt;&lt;/a&gt;    		&lt;/p&gt;
&lt;p&gt;
Avec Drupal 7 a été introduit une toute nouvelle couche d&#039;accès aux bases de données. Et parmi les nombreuses possibilités offertes par cette Database API, nous trouvons la manipulation dynamiquement des requêtes SQL pour ajouter une jointure, un tri, une condition, etc.
&lt;/p&gt;
&lt;p&gt;
Mais cette fantastique possibilité induit aussi de véritables maux de crâne lorsqu&#039;arrive l&#039;inévitable heure du debuggage. &lt;/p&gt;
&lt;h2&gt;Requêtes dynamiques avec Drupal 6&lt;/h2&gt;
&lt;p&gt;
  Avec Drupal 6, lorsque l&#039;on devait créer une requête à géométrie variable, cela donnait un code de ce genre :&lt;/p&gt;
&lt;p&gt;    if &amp;#40;!is_null&amp;#40;$uid&amp;#41;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; $bout = &amp;quot;n.uid=$uid&amp;quot;; // oui je sais, ce n&#039;est pas safe, c&#039;est pour l&#039;exemple ;-)&lt;br /&gt;
&amp;#125; else &amp;#123;&lt;br /&gt;
&amp;nbsp; $bout = &#039;&#039;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;$query = &amp;quot;&lt;br /&gt;
&amp;nbsp; SELECT n.nid, n.title&lt;br /&gt;
&amp;nbsp; WHERE&lt;br /&gt;
&amp;nbsp; &amp;nbsp; $bout&lt;br /&gt;
&amp;nbsp; &amp;nbsp; n.type=&#039;mon_type&#039; AND&lt;br /&gt;
&amp;nbsp; &amp;nbsp; n.status=1&lt;br /&gt;
&amp;nbsp; ORDER BY n.created DESC&amp;quot;;&lt;/p&gt;
&lt;p&gt;$result = db_query&amp;#40;$query&amp;#41;;&lt;br /&gt;
while &amp;#40;$row = db_fetch_object&amp;#40;$result&amp;#41;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; ...&lt;br /&gt;
&amp;#125;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Alors pas de doute, c&#039;est moche. Cela peut être rendu moins moche avec les placeholders, mais bon, pas terrible tout de même...
  &lt;/p&gt;
&lt;h2&gt;Drupal 7 et db_select&lt;/h2&gt;
&lt;p&gt;
  Maintenant, écrivons le même code en utilisant les requêtes dynamiques de Drupal 7 :&lt;/p&gt;
&lt;p&gt;    // Création d&#039;une requête en définissant le &amp;quot;from&amp;quot;&lt;br /&gt;
$query = db_select&amp;#40;&#039;node&#039;, &#039;n&#039;&amp;#41;;&lt;/p&gt;
&lt;p&gt;// Ici une clause &amp;quot;where&amp;quot; conditionnée par la présence d&#039;un user ID valide&lt;br /&gt;
if &amp;#40;!is_null&amp;#40;$uid&amp;#41;&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; $query-&amp;gt;condition&amp;#40;&#039;n.uid&#039;, $uid&amp;#41;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;
&lt;p&gt;// Clause Where : n.type=&#039;mon_type&#039;&lt;br /&gt;
$query-&amp;gt;condition&amp;#40;&#039;n.type&#039;, &#039;mon_type&#039;&amp;#41;;&lt;/p&gt;
&lt;p&gt;// Clause Where : n.status=1&lt;br /&gt;
$query-&amp;gt;condition&amp;#40;&#039;n.status&#039;, 1&amp;#41;;&lt;/p&gt;
&lt;p&gt;// On trie le tout&lt;br /&gt;
$query-&amp;gt;orderBy&amp;#40;&#039;n.created&#039;, &#039;DESC&#039;&amp;#41;;&lt;/p&gt;
&lt;p&gt;// Et on itère sur le résultat, tout simplement...&lt;br /&gt;
foreach &amp;#40;$query-&amp;gt;execute&amp;#40;&amp;#41; as $row&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; ...&lt;br /&gt;
&amp;#125;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Comme vous pouvez le constater, cela n&#039;a pas la même gueule... Le sujet de ce papier n&#039;étant pas d&#039;expliquer en détail le fonctionnement de cette API, je vous conseille d&#039;aller bouquiner l&#039;excellent documentation disponible &lt;a href=&quot;http://drupal.org/developing/api/database&quot; rel=&quot;nofollow&quot;&gt;ici&lt;/a&gt;.
&lt;/p&gt;
&lt;h2&gt;Et quant ça coince ?&lt;/h2&gt;
&lt;p&gt;
Seul souci dans cette histoire, comment debugger une requête qui plante. Et justement, la requête donnée plus haut plante salement (c&#039;est même fait exprès ;-). Avant, avec Drupal 6, un simple echo $query aurait suffit. Et avec Drupal 7 ce n&#039;est guère plus compliqué.&lt;/p&gt;
&lt;p&gt;  $$echo (string)$query;&lt;br /&gt;
  SELECT FROM {node} n WHERE (n.type = :db_condition_placeholder_0) AND (n.status = :db_condition_placeholder_1) ORDER BY n.created DESC&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
En effet, $query est maintenant un objet dont la classe a le bon goût d&#039;implémenter la méthode magique __toString() et de fournir en résultat une requête SQL correctement formée, ou presque. Presque car nous avons encore ces &quot;placeholder&quot; qui nous bouchent la vue. Qu&#039;à cela ne tienne, il suffit d&#039;aller piocher les valeurs de ces placeholders, qui sont les paramètres de notre requêtes, grâce à la méthode $query-&amp;gt;getArguments() qui nous renvoie un tableau utilisable par la fonction PHP strtr :&lt;/p&gt;
&lt;p&gt;  $$echo strtr((string)$query, $query-&amp;gt;getArguments());&lt;br /&gt;
  SELECT FROM {node} n WHERE (n.type = mon_type) AND (n.status = 1) ORDER BY n.created DESC&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
Voilà qui est bien mieux. On voit immédiatement qu&#039;il manque quelque chose d&#039;assez fondamental entre le SELECT et le FROM, les champs à remonter. Cela se corrige facilement :&lt;/p&gt;
&lt;p&gt;    // Création d&#039;une requête en définissant le &amp;quot;from&amp;quot;&lt;br /&gt;
$query = db_select&amp;#40;&#039;node&#039;, &#039;n&#039;&amp;#41;;&lt;/p&gt;
&lt;p&gt;// Ajout des champs n.nid et n.title&lt;br /&gt;
$query-&amp;gt;fields&amp;#40;&#039;n&#039;, array&amp;#40;&#039;nid&#039;, &#039;title&#039;&amp;#41;&amp;#41;;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
  Voilà, c&#039;est réglé. Et nous pouvons donc ajouter à nos fonctions pratiques celle qui permet de debugger une requête dynamique :&lt;/p&gt;
&lt;p&gt;    function db_debug&amp;#40;$query&amp;#41; &amp;#123;&lt;br /&gt;
&amp;nbsp; return strtr&amp;#40;&amp;#40;string&amp;#41;$query, $query-&amp;gt;getArguments&amp;#40;&amp;#41;+array&amp;#40;&#039;{&#039;=&amp;gt;&#039;&#039;, &#039;}&#039;=&amp;gt;&#039;&#039;&amp;#41;&amp;#41;;&lt;br /&gt;
&amp;#125;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;
   Cette fonction n&#039;est rien de plus qu&#039;une formalisation de la technique énoncée plus haut, à ceci près que je vire au passage les accolades permettant de tester la requête facilement dans une console mysql ou postgresql.
&lt;/p&gt;
&lt;p&gt;
  Happy hunting :)
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/1141">Database API</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/451">drupal 7</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/484">planetlibre.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/284">Tutoriels</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/483">Yoran</category>
 <pubDate>Fri, 23 Mar 2012 00:06:14 +0000</pubDate>
 <dc:creator>arNuméral</dc:creator>
 <guid isPermaLink="false">1512 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Hook moi mon JQuery, merci Behaviors !</title>
 <link>http://planete.drupalfr.org/node/1509</link>
 <description>&lt;h2&gt;Etat des lieux&lt;/h2&gt;
&lt;p&gt;Les développeurs Drupal l&amp;#8217;auront remarqué, depuis l’avènement de Drupal 7, la déclaration d&amp;#8217;un fichier Javascript dans les règles de l&amp;#8217;art a sensiblement évolué. Pour tout dire, celle-ci parait affreusement compliquée par rapport à ce qu&amp;#8217;elle était sur Drupal 6.&lt;/p&gt;
&lt;p&gt;Ainsi, sur Drupal 7, avant d&amp;#8217;écrire du JQuery dans un fichier externe on se doit d&amp;#8217;écrire ceci :&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
								&lt;code class=&quot;javascript&quot;&gt;/**&lt;br /&gt;
 * @file Mon fichier JQuery&lt;br /&gt;
 */&lt;br /&gt;
(function ($) {&lt;br /&gt;
  Drupal.behaviors.my_module = {&lt;br /&gt;
    attach: function(context, settings) {&lt;br /&gt;
      /*&lt;br /&gt;
       * Mon code JQuery&lt;br /&gt;
       */&lt;br /&gt;
    }&lt;br /&gt;
  };&lt;br /&gt;
})(jQuery);&lt;/code&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Alors les sceptiques diront : mais qu&amp;#8217;est ce que c&amp;#8217;est qu&amp;#8217;ce truc? En Javascript on se contente d&amp;#8217;un petit :&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
								&lt;code class=&quot;javascript&quot;&gt;$(document).ready(function() {&lt;br /&gt;
 //Mon code Javascript&lt;br /&gt;
}&lt;/code&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Oui mais la syntaxe Drupal 7 ne se contente pas d&amp;#8217;attendre que tout les éléments du DOM soient chargés avant de lancer la machine JQuery.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h2&gt;Les &amp;laquo;&amp;nbsp;Hooks&amp;nbsp;&amp;raquo; JQuery de Drupal 7&lt;/h2&gt;
&lt;p&gt;
&lt;p&gt;
								&lt;code class=&quot;javascript&quot;&gt;Drupal.behaviors.my_module&lt;/code&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Ce que vous voyez au dessus, ce sont ni plus ni moins que la transposition, en JQuery, des hooks si chers à Drupal. Attendons nous, le terme de hook est un peu abusif dans le cas de JQuery. Il s&amp;#8217;agit en fait de la possibilité &amp;laquo;&amp;nbsp;d&amp;#8217;écraser&amp;nbsp;&amp;raquo; du code JQuery invoqué.&lt;/p&gt;
&lt;p&gt;Par exemple, si je souhaite modifier le comportement de l’auto-complétion sur mon site Drupal, je peux écrire ceci :&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;
								&lt;code class=&quot;javascript&quot;&gt;(function ($) {&lt;/p&gt;
&lt;p&gt;  /**&lt;br /&gt;
 * Attaches the autocomplete behavior to all required fields.&lt;br /&gt;
 *&lt;br /&gt;
 * Override les fonctions de misc/autocomplete.js&lt;br /&gt;
 */&lt;br /&gt;
  Drupal.behaviors.autocomplete = {&lt;br /&gt;
    attach: function (context, settings) {&lt;br /&gt;
      //Mon code d&#039;autocomplétion&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;/code&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;Et à la condition que mon fichier JS soit chargé après le fichier autocomplete.js du coeur, le comportement de l’auto-complétion sera celui que j&amp;#8217;ai défini dans mon fichier JS spécifique.&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/211">admin</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1116">Non classé</category>
 <pubDate>Tue, 20 Mar 2012 14:07:30 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1509 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>DrupalEveryDay un petit service pour apprendre un peu plus chaque jour</title>
 <link>http://planete.drupalfr.org/node/1507</link>
 <description>&lt;p&gt;Cela fait quelques mois maintenant que Drupal 7 est arrivé, de nouveaux concepts sont apparus, de nouvelles API ont été mises en place et beaucoup de hooks ont été modifiés. &lt;/p&gt;
&lt;p&gt;Comme pas mal de monde, j’ai lu plein d’articles sur Internet mais aujourd’hui encore j’ai l’impression de n’avoir découvert qu’une petite partie des nouvelles fonctionnalités. [...]&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/114">Drupal</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/663">Julien</category>
 <pubDate>Tue, 06 Mar 2012 10:21:05 +0000</pubDate>
 <dc:creator>admin</dc:creator>
 <guid isPermaLink="false">1507 at http://planete.drupalfr.org</guid>
</item>
<item>
 <title>Petite introduction à VIM</title>
 <link>http://planete.drupalfr.org/node/1506</link>
 <description>&lt;p&gt;&lt;a class=&quot;tool print&quot; href=&quot;http://artisan.karma-lab.net/print/1796&quot; title=&quot;Version imprimable&quot; rel=&quot;nofollow&quot;&gt;Print&lt;/a&gt;&lt;br /&gt;
      &lt;a class=&quot;tool pdf&quot; href=&quot;http://artisan.karma-lab.net/flux/drupalfrorg/sites/default/files/pdfcache/1796/petite-introduction-a-vim.pdf&quot; title=&quot;Version PDF&quot; rel=&quot;nofollow&quot;&gt;PDF&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;    &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/big_icon/contents/1796/macvim.png&quot; alt=&quot;&quot; title=&quot;&quot; class=&quot;imagecache imagecache-big_icon&quot; width=&quot;64&quot; height=&quot;64&quot; /&gt;&lt;/p&gt;
&lt;p&gt;   &lt;a href=&quot;http://artisan.karma-lab.net/categories/vim&quot; rel=&quot;nofollow&quot;&gt;VIM&lt;/a&gt;&lt;br /&gt;
   Petite introduction à VIM&lt;br /&gt;
   Le 1 mars, 2012 - 00:46 | Ulhume&lt;/p&gt;
&lt;p&gt;
Cela fait quelques temps déjà que j&#039;évoque VIM au détours de divers billets sans jamais m&#039;y arrêter vraiment. Du coup, j&#039;ai reçu deux trois messages me demandant d&#039;en parler un peu plus. Dans ces mêmes messages il m&#039;a été (très gentiment) &quot;reproché&quot; de faire des articles un peu trop fleuves. Du coup je vais essayer de saucissonner un peu plus qu&#039;à l&#039;accoutumée pour commencer par une introduction très générale à VIM. Le reste (customisation, plugins, etc.) viendra plus tard.
&lt;/p&gt;
&lt;h2&gt;Mais d&#039;où sors-tu une telle vieillerie ?&lt;/h2&gt;
&lt;p&gt;&lt;a class=&quot;illustration&quot; href=&quot;http://artisan.karma-lab.net/sites/default/files/contents/1796/20anniversaire_a500.jpg&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;/p&gt;
&lt;p&gt;	  &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/illustration/contents/1796/20anniversaire_a500.jpg&quot; alt=&quot;&quot; title=&quot;&quot; source=&quot;file&quot; renderer=&quot;imagecache&quot; id=&quot;1723&quot; file=&quot;&quot; preset=&quot;illustration&quot; width=&quot;200&quot; height=&quot;130&quot; /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Que voulez-vous, dans ce monde d&#039;iPad et autres doudoux numériques, même les développeurs veulent que ça claque, que ça brille, que ça gigote, et comme VIM ne fait rien de tout cela, ça ne les excite que peu... Mais de là à considérer VIM comme une vieillerie c&#039;est aller un peu vite en besogne.
&lt;/p&gt;
&lt;p&gt;Ceci étant dit, VIM est effectivement un &quot;vieux&quot; logiciel qui existe depuis plus de 10 ans et qui s&#039;inspire de VI qui lui est né dans les années 70... Pour la petite histoire, son auteur (celui de VIM) cherchait à créer un clone de VI pour l&#039;Amiga en partant du code de STvi, un clone de vi pour Atari... VIM voulait à l&#039;époque dire VI iMitation et ce n&#039;est que plus tard qu&#039;il devint VI iMproved.
&lt;/p&gt;
&lt;p&gt;
C&#039;est sans doute cette longue histoire qui donne à VIM son côté faussement ventage. Mais ce serait oublier un peu vite qu&#039;un logiciel doté d&#039;un tel héritage, c&#039;est aussi plus de 30 ans d&#039;améliorations et de perfectionnements. Et c&#039;est aussi oublier que VIM est un projet actif même s&#039;il ne suit pas le modèle de rythme effréné adopté par la fondation Mozilla, ce que nous serons je pense peu à lui reprocher...
&lt;/p&gt;
&lt;p&gt;
Maintenant si l&#039;on se base uniquement sur les fonctionnalités, VIM propose absolument tout ce que vous pouvez trouver ailleurs. Auto-complètement statique ou dynamique (en fonction du contexte), multi-documents, multi-fenêtrage, onglets, personnalisation extrême et langage de script, coloration syntaxique (avec thèmes dynamiques et plusieurs centaines de formats de fichiers reconnus !!), auto-indentation, reformatage, supports de plugins (en perl, en python, en ruby, en Tcl, etc.), prise en charge des écritures de gauche à droite, replis (possibilité de plier automatiquement ou manuellement des portions de texte), gestion native de diff, etc, etc. Et tout ceci en restant léger en mémoire et très très rapide.
&lt;/p&gt;
&lt;p&gt;
Côté parfums, VIM en deux déclinaisons : mode texte dans un terminal, mode graphique avec l&#039;application gVim qui fonctionne sous Gtk, mais aussi nativement sous MacOS, Windows, etc. Avouons qu&#039;en virant la carrosserie de pas mal d&#039;éditeurs &quot;hype&quot;, il ne leur reste pas toujours de quoi faire rougir VIM...
&lt;/p&gt;
&lt;p&gt;
Notez au passage que la version graphique de VIM exploite un cœur commun avec la version texte qu&#039;elle habille plus qu&#039;autre chose de menus déroulants, assesseurs, menus contextuels et autres barres d&#039;outils. Cela signifie que même si vous utilisez la version graphique, en faisant gaffe à deux trois trucs, toute votre configuration et vos plugins fonctionneront sur la version console et vice-versa. Et c&#039;est un plus non négligeable je vous l&#039;assure, que de pouvoir intervenir à distance via SSH sur la machine d&#039;un client avec SON PROPRE environnement configuré aux petits oignons... Car petit détail qui compte, plus que rares sont les GNU/Linux qui n&#039;ont pas VIM installé en standard.
&lt;/p&gt;
&lt;p&gt;
Comme vous le voyez à travers cette liste à la Prévert, VIM est loin d&#039;être l&#039;éditeur ringard décrit par certains. Et son héritage avec VI est à prendre plus au sens philosophique qu&#039;au sens littéral.
&lt;/p&gt;
&lt;h2&gt;Moi je veux bien mais quant j&#039;y tape un truc, y&#039;a rien qu&#039;imprime !!&lt;/h2&gt;
&lt;p&gt;&lt;a class=&quot;illustration&quot; href=&quot;http://artisan.karma-lab.net/sites/default/files/contents/1796/ibm_6150_system_1.jpg&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;/p&gt;
&lt;p&gt;	  &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/illustration/contents/1796/ibm_6150_system_1.jpg&quot; alt=&quot;&quot; title=&quot;&quot; source=&quot;file&quot; renderer=&quot;imagecache&quot; id=&quot;1722&quot; file=&quot;&quot; preset=&quot;illustration&quot; width=&quot;200&quot; height=&quot;220&quot; /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Ah vi, la philosophie de vi :-) Comme c&#039;est déroutant la première fois.. Papi se souvient la larme à l&#039;œil le nombre de fois où il a manqué d&#039;envoyer contre un mur le clavier de son terminal.. Un machin en texte connecté à un, déjà à l&#039;époque, antique IBM 6150... Non sérieusement, je ne blâmerais pas celui qui me dira que vi n&#039;est pas simple d&#039;accès, car c&#039;est un fait, vi est à l&#039;opposé de tout ce que vous avez jamais utilisé pour éditer un texte jusqu&#039;à aujourd&#039;hui.
&lt;/p&gt;
&lt;p&gt;
Le point clef à comprendre est que vi est &lt;strong&gt;modale&lt;/strong&gt; alors que tous les autres éditeurs sont visuels. Certains dirons, et je ne trouve pas cela si idiot que cela, que vi est l&#039;éditeur du cerveau gauche et que les autres sont calés sur le cerveau droit.
&lt;/p&gt;
&lt;p&gt;
En effet, vi décompose l&#039;action d&#039;éditer un texte principalement (mais il y en a bien d&#039;autres) en deux modes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le mode normal qui permet de naviguer et d&#039;effectuer des opérations d&#039;altération.&lt;/li&gt;
&lt;li&gt;Le mode insertion qui permet de taper du texte au kilomètre.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Et comme VI démarre en mode normal, pour taper son premier texte, il faut commencer par presser i de sorte à passer en mode insertion (Esc permettra de revenir au mode normal). Sans cela, c&#039;est la cata car tout ce qui est tapé sera interprété comme des commandes à appliquer sur le texte. Voilà l&#039;origine de ce qui énerve un néophyte arrivant la bouche en cœur sous VI pour modifier une pauvre config et qui n&#039;arrive qu&#039;à la pourrir un peu plus...
&lt;/p&gt;
&lt;p&gt;
Pour comprendre l&#039;origine de cet étrange découpage, il faut encore remonter dans le temps. Je vous parlais plus haut de mon IBM 6150 que l&#039;on appelait à l&#039;époque un MainFrame, un &quot;gros&quot; serveur auquel était relié par des liaisons série des terminaux, sortes de minitels évolués. Tout ce que l&#039;on tapait était transmis au serveur, qui l&#039;interprétait et renvoyait au terminal ce qu&#039;il fallait afficher sur l&#039;écran (ça ne vous rappelle pas le web ;-) Comme vous pouvez l&#039;imaginer les transmissions étaient lentes, d&#039;autant plus lentes que l&#039;on était plusieurs à bosser sur le pauvre CPU à 5.9Mhz et ses colossales 1Mb de mémoire. Le choix de l&#039;approche modale était donc avant tout une question d&#039;économie des touches tapées pour effectuer le maximum d&#039;opérations en un minimum d&#039;octets.
&lt;/p&gt;
&lt;p&gt;
À cette contrainte se rajoutait, dans une moindre mesure, des claviers souvent réduits au minimum, sans flèches ni pavé numérique. Le principe de la modalité était donc d&#039;utiliser l&#039;ensemble des touches alphanumérique pour les opérations courantes. Ainsi pour détruire un bloc de 10 lignes, ce qui correspondait avec un éditeur type wordstar à Ctrl-K-B, 10xflèche Bas, Ctrl-K K, Ctrl-K Y s&#039;écrivait en VI : 10D. Je vous laisse calculer l&#039;économie... Le modalité permet donc de &quot;multiplexer&quot; les touches en leur donnant une signification différente selon les contextes.
&lt;/p&gt;
&lt;p&gt;
Alors de nos jours, est-ce que cette économie a encore un sens ? Je pense que oui, et ce pour plusieurs raisons :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ce qui allait vite hier va tout aussi vite aujourd&#039;hui. Une fois que vous commencez à maîtriser les commandes, VIM devient absolument ahurissant de rapidité. Et comme il a été pensé depuis des dizaines d&#039;années dans ce sens, vous passez votre vie à découvrir des perles vous faisant gagner encore du temps. Par exemple, j&#039;ai découvert ce matin qu&#039;en mode normal, si je suis entre deux guillemets et que je veux remplacer tout ce qui se trouve entre ces guillemets par un autre texte, il me suffit de taper ci&quot;. Cela supprime tout ce qui se trouve entre les guillemets et passe tout seul en mode insertion, me permettant de saisir le texte en remplacement. Cela fonctionne sur tout caractère de type ouvrant/fermant, y compris les parenthèses... Pratique non ? &lt;/li&gt;
&lt;li&gt;Pour qui tape beaucoup de texte (développeur, rédaction d&#039;articles, etc), toute économie de pression sur le clavier se ressent directement sur des doigts et les poignets moins douloureux en fin de journée. A l&#039;heure où l&#039;on parle de plus en plus des troubles musculo-squelettiques liées à l&#039;usage de l&#039;informatique, VI se trouve ici un nouveau statut d&#039;éditeur zen pour les articulations.
  &lt;/li&gt;
&lt;li&gt;VIM se contrôle entièrement au clavier. La souris y fonctionne parfaitement mais n&#039;est en aucun cas nécessaire. Et là aussi c&#039;est une cause de trouble musculo-squelettique en moins, et pas des moindres celle-là. Pour rire, tapez un texte ou du code avec votre éditeur habituel mais mettez la souris beaucoup plus loin que d&#039;habitude. Vous prendre ainsi conscience du nombre de fois où votre bras doit &#039;décoller&#039; du clavier pour aller chercher le mulot, puis revenir au clavier. Et tout cela juste pour une simple sélection de bloc de texte à copier que vous auriez fait avec VIM par un Esc 10Y (copie-moi les 10 lignes qui suivent sous le curseur).
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
&lt;p&gt;
Donc oui, une bonne partie de l&#039;optimisation du contrôle de VIM vient d&#039;un âge révolu, mais le système qui en est sorti est toujours d&#039;actualité. Et c&#039;est important à garder en tête pour tacler aussi les vimmers sado-maso. Ceux qui disent par exemple qu&#039;un vrai vimmer, n&#039;utilise pas les flèches et doit privilégier les touches h (gauche), l (droite), j (bas) et l (haut). Ne riez pas, j&#039;en connais qui désactivent exprès les flèches pour se forcer à utiliser ces touches !! Car oui cela économise encore un peu de mouvements du poignet ce qui ne peut pas faire de mal, je ne le conteste pas. Mais 1/ ces touches de directions existent avant tout parce qu&#039;à une lointaine époque il n&#039;y avait simplement pas de flèches sur le clavier 2/ pour tous ceux qui bossent sur un portable, les touches de directions sont maintenant totalement intégrées au corps central, et c&#039;est aussi le cas pour beaucoup de claviers semi-compacts 3/ Et pour les claviers 102 touches à l&#039;ancienne, on ne va pas en faire des tartines juste pour un déplacement de 5 cm à tout casser, faut pas déconner non plus...
&lt;/p&gt;
&lt;p&gt;
Bref, il faut savoir raison garder et chercher plutôt à capter la philosophie d&#039;ensemble et dans tous les cas, il faut que cela reste ludique ! Promis, vos dents ne vont pas tomber si vous faites des entorses à l&#039;Esprit VI. Moi-même je le confesse mon père, j&#039;ai péché. J&#039;ai créé prés de 50 lignes de redéfinition de touches juste pour sélectionner visuellement une zone par Shift-flèches haut/bas/gauche/droit. J&#039;ai même fauté avec la combinaison Control-Shift-flèches... Ben entre nous, au delà de mes dents qui sont toujours là, c&#039;est tout de même bien pratique lorsqu&#039;on veut sélectionner un bloc sans avoir à compter les lignes...
&lt;/p&gt;
&lt;p&gt;
VIm est un outil qui fait plaisir, essayez de comprendre comment il fonctionne mais ne vous martyrisez pas non plus. Et rapidement, si vous gardez l&#039;esprit jouer, tout cela deviendra tellement naturel que vous pousserez de vilains jurons en utilisant OpenOffice parce que vous aurez salopé votre texte en y tapant ggVG&amp;gt; (oui, ça veut dire quelque chose en VIM;-).
&lt;/p&gt;
&lt;h2&gt;VIM ou gVIM, le choix des armes&lt;/h2&gt;
&lt;p&gt;&lt;a class=&quot;illustration&quot; href=&quot;http://artisan.karma-lab.net/sites/default/files/contents/1796/2012-03-01-111500_1271x866_scrot.png&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;/p&gt;
&lt;p&gt;	  &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/illustration/contents/1796/2012-03-01-111500_1271x866_scrot.png&quot; alt=&quot;&quot; title=&quot;&quot; source=&quot;file&quot; renderer=&quot;imagecache&quot; id=&quot;1724&quot; file=&quot;&quot; preset=&quot;illustration&quot; width=&quot;200&quot; height=&quot;136&quot; /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Là, pas de grands discours à faire c&#039;est une question de goûts. Les deux moutures sont aussi performantes l&#039;une que l&#039;autre. La gestion de la souris en mode console est proprement excellente (vous pouvez redimensionner les fenêtres, sélectionner des blocs, etc) ce qui diminue encore l&#039;espace entre les deux.
&lt;/p&gt;
&lt;p&gt;
Pour l&#039;heure j&#039;utilise la version console (cf copie d&#039;écran) avant tout parce que j&#039;apprécie de pouvoir lancer mon environnement de développement sur des machines distantes ne disposant pas de couche graphique. N&#039;utilisant pas les menus déroulants et les barres d&#039;outils, la version graphique m&#039;apporte peu mais là encore c&#039;est une question personnelle qui n&#039;a au fond que peu d&#039;incidence.
&lt;/p&gt;
&lt;h2&gt;Encore du blabla ou on pratique un peu ?&lt;/h2&gt;
&lt;p&gt;
Moi qui comptait faire court, c&#039;est vaguement loupé. Je vais essayer de me rattraper par ce chapitre de mise en selle.
&lt;/p&gt;
&lt;h3&gt;Comment j&#039;écris un truc ?&lt;/h3&gt;
&lt;p&gt;&lt;a class=&quot;illustration&quot; href=&quot;http://artisan.karma-lab.net/sites/default/files/contents/1796/2012-03-01-094729_714x398_scrot.png&quot; rel=&quot;lightbox&quot; rel=&quot;nofollow&quot;&gt;&lt;/p&gt;
&lt;p&gt;	  &lt;img src=&quot;http://artisan.karma-lab.net/sites/default/files/imagecache/illustration/contents/1796/2012-03-01-094729_714x398_scrot.png&quot; alt=&quot;&quot; title=&quot;&quot; source=&quot;file&quot; renderer=&quot;imagecache&quot; id=&quot;1720&quot; file=&quot;&quot; preset=&quot;illustration&quot; width=&quot;200&quot; height=&quot;111&quot; /&gt;&lt;br /&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lorsque vous lancez VIM pour la première fois, vous arrivez sur une page remplie de ~ (qui signifie &quot;ligne vide&quot;), un message de bienvenue vous invitant à faire une donation à l&#039;association humanitaire de l&#039;auteur originel de VIM, un peu d&#039;aide et 2 lignes vides en bas de l&#039;écran. Les ~ représentent la fenêtre principale d&#039;édition, la première ligne vide la barre de statut et la seconde la barre de commandes.
&lt;/p&gt;
&lt;p&gt;
Comme nous l&#039;avons vu plus haut, VIM à son démarrage est en mode normal. Pour commencer une saisie, nous devons basculer en mode Insertion. Pour cela pressez la touche i (ou Insert, ça marche aussi). A la première lettre que vous allez saisir le message d&#039;accueil va disparaitre. Tapez ainsi plusieurs lignes, puis pressez Esc pour revenir au mode normal.
&lt;/p&gt;
&lt;h3&gt;Et si je veux le modifier ?&lt;/h3&gt;
&lt;p&gt;
S&#039;il s&#039;agit de petites tâches comme ajouter/supprimer des caractères par-ci par-là, vous pouvez rester ou revenir au mode insertion. Sinon en restant en mode normal il est possible de faire des choses plus intéressantes. Vous pouvez par exemple détruire la ligne sous le curseur (dd). En réalité elle n&#039;est pas détruite mais déplacée dans un registre (une sorte de presse-papier). Ainsi si vous tapez p (sorte de &quot;coller&quot;) elle vous sera restituée. Souvent les commandes du mode normal peuvent être précédée d&#039;un chiffre. Ainsi si vous tapez 2dd, vous transférez dans le registre non pas une mais deux lignes. Si vous voulez copier et non supprimer, remplacez d par y (yank). Ainsi pour copier deux lignes, ce sera 2yy ou 2Y pour sa version encore plus courte.
&lt;/p&gt;
&lt;h3&gt;Moi j&#039;aime pas compter...&lt;/h3&gt;
&lt;p&gt;
Si vous avez la flemme de compter les lignes, vous pouvez passer en mode Visuel en pressant (en mode normal) la touche V (notez la majuscule). Là vous pouvez bouger le curseur et étendre la sélection. Pour copier/supprimer, ce sera les mêmes lettres que le mode normal mais une seule fois (d pour déplacer dans le registre, y pour copier dans le registre). Bien évidement il y a plein d&#039;autre commandes comme par exemple &amp;gt; ou &amp;lt; pour indenter/désindenter le bloc en cours. Cela fonctionne aussi en mode normal en doublant. Par exemple 10&amp;gt;&amp;gt; en mode normal va indenter les 10 lignes sous le curseur, curseur compris.
&lt;/p&gt;
&lt;p&gt;
En réalité il y a trois modes visuels. Le mode V est le mode visuel &quot;par ligne&quot;. On peut lui préférer le mode visuel &quot;par caractères&quot; en tapant (en mode normal) la lettre v (en minuscule). Vous pouvez maintenant vous déplacer à gauche et à droite, en haut et en vas pour surligner une zone exactement comme vous l&#039;auriez faut avec une souris. Comme pour V vous pouvez appliquer des commande de copie, etc.
&lt;/p&gt;
&lt;p&gt;
Pour le plaisir, le troisième mode visuel est le mode &quot;bloc&quot; accessible par Control-v. Très pratique pour supprimer des colonnes de texte mais pas seulement. Pour le fun, passez en mode insertion et saisissez trois mots, un par ligne. Revenez en mode normal par Esc, allez sur le premier caractère du premier mot puis pressez Control-v. Sélectionnez ainsi les 3 premiers caractère de vos trois mots et pressez I (majuscule) puis Mot: , puis enfin Esc. Magie, vos trois mots sont maintenant précédés par ce que vous venez de taper.
&lt;/p&gt;
&lt;p&gt;
Des &quot;astuces&quot; comme cela, sans rigoler, il y en a des milliers... Une petite pour la route ? Comment exécuter une commande du mode normal sans pour autant sortir du mode insertion. Un usage type est de vouloir détruire la fin de la ligne où se trouve le curseur alors que je suis en mode insertion. Normalement il aurait fallut que je tape Esc (pour repasser en normal), puis d$ qui permet de détruire tout jusqu&#039;à la fin de la ligne ($ signifie jusqu&#039;à la fin. Si à l&#039;inverse vous désirez détruire du début jusqu&#039;au curseur utilisez ^). Ensuite je dois re-presser i pour revenir en insertion, un peu longuet... Et si c&#039;est long c&#039;est qu&#039;il y a forcement un autre moyen. Ce moyen c&#039;est Control-o. En mode insertion si vous pressez Control-o cela vous bascule en mode normal juste pour une commande et vous replace en insertion juste après. Notre destruction se simplifie donc par un Control-od$, beaucoup mieux :-)
&lt;/p&gt;
&lt;p&gt;
  Et si ce n&#039;est pas encore assez rapide pour vous, comme soufflé en commentaire, vous pouvez utilisez le raccourcis sur d$, D (majuscule). Ce qui nous donne Control-oD.
&lt;/p&gt;
&lt;h3&gt;Ok, mais comment je sauve ?&lt;/h3&gt;
&lt;p&gt;
La sauvegarde du texte comme beaucoup d&#039;opération générales passe par la saisie d&#039;une commande en mode... commande. Ce mode est accessible à partir de tous les modes sauf insertion par la touche :. Lorsque vous la pressez, le curseur se déplace sur la dernière ligne de l&#039;écran, la barre de commande. Vous pouvez alors saisir votre commande puis l&#039;exécuter en pressant entrée.
&lt;/p&gt;
&lt;p&gt;
Pour sauvegarder notre texte, nous allons utiliser la commande :write mon_fichier.txt (lorsque je commence par un : cela veut dire une commande en mode commande et je sous entends qu&#039;il faut presser entrée pour l&#039;exécuter). Sous VIM tout s&#039;abrège pour aller plus vite et vous pouvez donc remplacer cela par :w mon_fichier.txt.
&lt;/p&gt;
&lt;p&gt;
Bien évidement, une fois que vous avez sauver avec un nom, aucun besoin de répéter ce nom les fois suivantes. Faites un :w et cela suffira.
&lt;/p&gt;
&lt;p&gt;
Dans la série des commandes utiles, :edit nouveau_fichier.txt (qui s&#039;abrège en :e nouveau_fichier.txt) permet d&#039;ouvrir un fichier. Si ce fichier existe, vous pouvez utiliser les tabulation en mode commande pour chercher son chemin comme sous Bash. Si ce fichier n&#039;existe pas, il sera créé lorsque vous le sauvegardez (et pas avant).
&lt;/p&gt;
&lt;h3&gt;Et comment je ME sauve ?&lt;/h3&gt;
&lt;p&gt;
On me le souffle en commentaire, j&#039;en oublie un morceau pour le moins important. Pour quitter, c&#039;est la commande :quit (ou :q). Si vous n&#039;avez pas sauvé vos fichier VIM va couiner. Pour éviter cela (et si vous souhaiter perdre vos modifications !!!) utilisez le bang ! qui veut très souvent dire &quot;fait pas ch*r&quot; dans le monde VIM. Ainsi q! quittera sans poser de question.
&lt;/p&gt;
&lt;p&gt;
Mais souvent on veut sauver et quitter, ce qui s&#039;écrit :wq (oui, on peut combiner les commandes d&#039;une seule lettre). Mais comme c&#039;est un truc que l&#039;on fait souvent, il y a bien évidement un version en une seule lettre :x.
&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Voilà qui devrait je pense suffire pour commencer à utiliser VIM en mode &quot;même pas peur&quot;. Après le net est littéralement gavé de sites, tutoriaux et vidéos, expliquant tel ou tel aspect de ce fantastique éditeur. Il n&#039;y a qu&#039;à chercher vous trouverez votre bonheur à commencer par ces très &lt;a href=&quot;http://www.viemu.com/a_vi_vim_graphical_cheat_sheet_tutorial.html&quot; rel=&quot;nofollow&quot;&gt;bonnes planches visuelles&lt;/a&gt; pour se repérer dans les différents modes.
&lt;/p&gt;
&lt;p&gt;
Maintenant à défaut de vous avoir expliquer toutes les arcanes de VIM, j&#039;espère au moins vous avoir donné envie de l&#039;essayer. Et croyez moi, je n&#039;ai qu&#039;à peine effleuré 1 petit pourcent du sujet. La customisation du VIM par exemple est un monde à part entière et chaque vimmer fini à terme par disposer d&#039;un éditeur totalement personnalisé. Mais cela, nous le verrons une prochaine fois.
&lt;/p&gt;
</description>
 <category domain="http://planete.drupalfr.org/taxonomy/term/100" />
 <category domain="http://planete.drupalfr.org/taxonomy/term/291">Article</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/215">drupalfr.org</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/216">Planet Libre</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/214">Ulhume</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1130">VIM</category>
 <category domain="http://planete.drupalfr.org/taxonomy/term/1131">vimfr</category>
 <pubDate>Wed, 29 Feb 2012 22:46:33 +0000</pubDate>
 <dc:creator>Artisan Numérique</dc:creator>
 <guid isPermaLink="false">1506 at http://planete.drupalfr.org</guid>
</item>
</channel>
</rss>

