<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Le Blog du Geek Joyeux</title>
    <description>Plus moins vite tu codes, moins plus vite ça plante</description>
    <link>http://blog.happynoff.fr</link>
    <pubDate>Fri, 03 Feb 2012 18:03:09 +0100</pubDate>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/LeBlogDuGeekJoyeux" /><feedburner:info uri="leblogdugeekjoyeux" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>Définir une ressource Active Admin dans une gem</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/YGsJqrV5EWo/Definir-une-ressource-Active-Admin-dans-une-gem</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Definir-une-ressource-Active-Admin-dans-une-gem</guid>
      <description>&lt;p&gt;Si vous utilisez &lt;a href='http://activeadmin.info/'&gt;Active Admin&lt;/a&gt; pour générer vos interfaces d&amp;#8217;administration sous Rails, voici une technique pour définir des ressources depuis un engine.&lt;/p&gt;

&lt;h2 id='définir_la_ressource'&gt;Définir la ressource&lt;/h2&gt;

&lt;p&gt;Pour une question de simplicité, je place mes ressources dans un dossier &lt;code&gt;admin&lt;/code&gt; situé dans le dossier &lt;code&gt;lib/my_engine&lt;/code&gt; de mon engine.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;&lt;span class='c'&gt;# lib/my_engine/admin/articles.rb&lt;/span&gt;&lt;br&gt;&lt;span class='r'&gt;if&lt;/span&gt; &lt;span class='r'&gt;defined?&lt;/span&gt;(&lt;span class='co'&gt;ActiveAdmin&lt;/span&gt;)&lt;br&gt;  &lt;span class='co'&gt;ActiveAdmin&lt;/span&gt;.register &lt;span class='co'&gt;Article&lt;/span&gt; &lt;span class='r'&gt;do&lt;/span&gt;&lt;br&gt;    &lt;span class='c'&gt;# personnalisez ici votre ressource&lt;/span&gt;&lt;br&gt;  &lt;span class='r'&gt;end&lt;/span&gt;&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id='charger_la_ressource'&gt;Charger la ressource&lt;/h2&gt;

&lt;p&gt;Le problème auquel j&amp;#8217;ai été confronté au début était celui du chargement de cette ressource.&lt;/p&gt;

&lt;p&gt;Naïvement, je l&amp;#8217;avais placée dans &lt;code&gt;app/admin/articles.rb&lt;/code&gt; dans mon engine mais elle n&amp;#8217;était pas chargée par l&amp;#8217;application. Je l&amp;#8217;ai ensuite placée dans &lt;code&gt;lib/my_engine/admin&lt;/code&gt; et ai appelé &lt;code&gt;require&lt;/code&gt; dessus. Le problème est que le modèle &lt;code&gt;Article&lt;/code&gt; n&amp;#8217;était pas encore défini au moment de l&amp;#8217;appel à &lt;code&gt;register&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;ai donc fait appel à &lt;code&gt;after_initialize&lt;/code&gt; dans la définition de l&amp;#8217;engine:&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;&lt;span class='c'&gt;# lib/my_engine/engine.rb&lt;/span&gt;&lt;br&gt;&lt;span class='r'&gt;module&lt;/span&gt; &lt;span class='cl'&gt;MyEngine&lt;/span&gt;&lt;br&gt;  &lt;span class='r'&gt;class&lt;/span&gt; &lt;span class='cl'&gt;Engine&lt;/span&gt; &amp;lt; &lt;span class='co'&gt;Rails&lt;/span&gt;::&lt;span class='co'&gt;Engine&lt;/span&gt;&lt;br&gt;    config.after_initialize &lt;span class='r'&gt;do&lt;/span&gt;&lt;br&gt;      require &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;my_engine/admin/articles&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;br&gt;    &lt;span class='r'&gt;end&lt;/span&gt;&lt;br&gt;  &lt;span class='r'&gt;end&lt;/span&gt;&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ce n&amp;#8217;est peut être pas la solution la plus optimale ou la plus propre. Je serais d&amp;#8217;ailleurs ravi d&amp;#8217;avoir une solution alternative plus efficace. Celle-là a le mérite de fonctionner : ).&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/YGsJqrV5EWo" height="1" width="1"/&gt;</description>
      <pubDate>Fri, 03 Feb 2012 18:03:09 +0100</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Definir-une-ressource-Active-Admin-dans-une-gem</feedburner:origLink></item>
    <item>
      <title>size doesn't COUNT</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/Q_IHC-TrGdg/size-doesn-t-COUNT</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/size-doesn-t-COUNT</guid>
      <description>&lt;h2 id='requêtes_n1'&gt;Requêtes N+1&lt;/h2&gt;

&lt;p&gt;Lorsque vous développez avec Rails, vous devez bien sûr faire attention aux requêtes qui sont effectuées et surtout éviter les requêtes &lt;em&gt;N+1&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Les requêtes &lt;em&gt;N+1&lt;/em&gt; sont celles qui sont lancées pour chaque élément d&amp;#8217;une liste.&lt;/p&gt;

&lt;p&gt;Prenons l&amp;#8217;exemple suivant :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;&lt;span class='c'&gt;# Dans le contrôleur&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class='iv'&gt;@articles&lt;/span&gt; = &lt;span class='co'&gt;Article&lt;/span&gt;.all&lt;br&gt;&lt;span class='c'&gt;# SELECT articles.* FROM articles&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;# Dans la vue&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;lt;&lt;span class='s'&gt;&lt;span class='dl'&gt;% &lt;/span&gt;&lt;span class='k'&gt;@articles.each&lt;/span&gt;&lt;span class='dl'&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class='r'&gt;do&lt;/span&gt; |article| &lt;span class='s'&gt;&lt;span class='dl'&gt;%&amp;gt;&lt;/span&gt;&lt;span class='k'&gt;&lt;br&gt;  ...&lt;br&gt;  Nombre de commentaires: &amp;lt;%= articles.comments.count %&lt;/span&gt;&lt;span class='dl'&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;  &lt;span class='c'&gt;# SELECT COUNT(*) FROM comments WHERE comments.article_id = XY&lt;/span&gt;&lt;br&gt;  ...&lt;br&gt;&amp;lt;&lt;span class='s'&gt;&lt;span class='dl'&gt;% &lt;/span&gt;&lt;span class='k'&gt;end&lt;/span&gt;&lt;span class='dl'&gt; &lt;/span&gt;&lt;/span&gt;%&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pour chaque article listé, une requête va être lancée pour compter ses commentaires.&lt;/p&gt;

&lt;p&gt;Heureusement pour nous, Rails fournit, dans l&amp;#8217;API d&amp;#8217;ActiveRecord un moyen d&amp;#8217;éviter ces requêtes &lt;em&gt;N+1&lt;/em&gt;. Il s&amp;#8217;agit de la méthode &lt;code&gt;includes&lt;/code&gt; qui s&amp;#8217;utilise comme ceci :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;&lt;span class='iv'&gt;@articles&lt;/span&gt; = &lt;span class='co'&gt;Article&lt;/span&gt;.includes(&lt;span class='sy'&gt;:comments&lt;/span&gt;).all&lt;br&gt;&lt;span class='c'&gt;# SELECT articles.* FROM articles&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# SELECT comments.* FROM comments WHERE comments.article_id IN (1, 2, ..., 42)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;On peut donc voir ici que l&amp;#8217;ensemble des commentaires est récupéré d&amp;#8217;un seul coup. Cela nous permet d&amp;#8217;accéder aux informations des commentaires d&amp;#8217;un article sans requête supplémentaire.&lt;/p&gt;

&lt;h2 id='size_vs_count'&gt;Size vs. Count&lt;/h2&gt;

&lt;p&gt;Le souci c&amp;#8217;est que ça ne règle pas notre problème de &lt;code&gt;count&lt;/code&gt;. En effet, si nous faisons de nouveau appel à count, les requêtes seront tout de même effectuées !&lt;/p&gt;

&lt;p&gt;L&amp;#8217;astuce est donc d&amp;#8217;utiliser &lt;code&gt;size&lt;/code&gt; plutôt que &lt;code&gt;count&lt;/code&gt; sur l&amp;#8217;attribut &lt;code&gt;comments&lt;/code&gt; de nos articles, ce qui va simplement retourner la taille du tableau contenant les commentaires associés. Ces derniers étant déjà chargés, le compte est bon !&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;&lt;span class='c'&gt;# Dans le contrôleur&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class='iv'&gt;@articles&lt;/span&gt; = &lt;span class='co'&gt;Article&lt;/span&gt;.includes(&lt;span class='sy'&gt;:comments&lt;/span&gt;).all&lt;br&gt;&lt;span class='c'&gt;# SELECT articles.* FROM articles&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# SELECT comments.* FROM comments WHERE comments.article_id IN (1, 2, ..., 42)&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;# Dans la vue&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;lt;&lt;span class='s'&gt;&lt;span class='dl'&gt;% &lt;/span&gt;&lt;span class='k'&gt;@articles.each&lt;/span&gt;&lt;span class='dl'&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class='r'&gt;do&lt;/span&gt; |article| &lt;span class='s'&gt;&lt;span class='dl'&gt;%&amp;gt;&lt;/span&gt;&lt;span class='k'&gt;&lt;br&gt;  ...&lt;br&gt;  Nombre de commentaires: &amp;lt;%= articles.comments.size %&lt;/span&gt;&lt;span class='dl'&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;  ...&lt;br&gt;&amp;lt;&lt;span class='s'&gt;&lt;span class='dl'&gt;% &lt;/span&gt;&lt;span class='k'&gt;end&lt;/span&gt;&lt;span class='dl'&gt; &lt;/span&gt;&lt;/span&gt;%&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/Q_IHC-TrGdg" height="1" width="1"/&gt;</description>
      <pubDate>Tue, 17 Jan 2012 10:16:15 +0100</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/size-doesn-t-COUNT</feedburner:origLink></item>
    <item>
      <title>Versionner ses scripts de seeding avec versioned_seeds</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/tP-ib_kfmqo/Versionner-ses-scripts-de-seeding-avec-versioned_seeds</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Versionner-ses-scripts-de-seeding-avec-versioned_seeds</guid>
      <description>&lt;p&gt;Si vous vous retrouvez dans le besoin de faire des imports de données ou des insertions scriptées dans une application Rails, de nos jours vous n&amp;#8217;avez pas vraiment d&amp;#8217;autre choix que de créer des tâches rake (ou consorts) pour le faire.&lt;/p&gt;

&lt;p&gt;Dans cette idée, j&amp;#8217;ai écrit la gem &lt;a href='https://github.com/simonc/versioned_seeds'&gt;versioned_seeds&lt;/a&gt; qui permet de stocker ces scripts dans un dossier spécifique et de les utiliser à la manière des migrations.&lt;/p&gt;

&lt;p&gt;Son installation se fait grâce à l&amp;#8217;ajout de la ligne suivante dans votre &lt;code&gt;Gemfile&lt;/code&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ruby'&gt;gem &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;versioned_seeds&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;, &lt;span class='ke'&gt;require&lt;/span&gt;: &lt;span class='pc'&gt;false&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Le principe est simple, vous appelez un générateur qui va créer au besoin le dossier et un script dans celui ci. Le nom du script commence par un timestamp, comme les migrations, ce qui va permettre à versioned_seeds de l&amp;#8217;enregistrer et de ne pas l&amp;#8217;exécuter plusieurs fois.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rails g versioned_seeds:seed_file nom_du_script&lt;br&gt;        create db/seeds&lt;br&gt;        create db/seeds/20111207201942_nom_du_script.rb&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Vous n&amp;#8217;avez plus qu&amp;#8217;à écrire votre script puis, une fois terminé, à appeler une tâche rake qui va l&amp;#8217;exécuter:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rake vs:next&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Cette tâche va trouvé le prochain script non chargé jusqu&amp;#8217;à présent et le lancer. Si vous avez généré plusieurs scripts, vous pouvez faire appel à&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rake vs:all&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Qui va les lancer un-à-un.&lt;/p&gt;

&lt;p&gt;Pour savoir où vous en êtes de vos scripts, vous pouvez faire appel à&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;rake vs:status&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Pour connaitre la version du dernier script chargé.&lt;/p&gt;

&lt;p&gt;Pensez simplement à ignorer le fichier .versioned_seeds dans Git, il sert à stocker la liste des scripts déjà lancés et il ne doit pas être versionné puisqu&amp;#8217;il est spécifique à chaque machine.&lt;/p&gt;

&lt;p&gt;Le code est disponible sur &lt;a href='https://github.com/simonc/versioned_seeds'&gt;Github&lt;/a&gt; et la gem sur &lt;a href='https://rubygems.org/gems/versioned_seeds'&gt;rubygems.org&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/tP-ib_kfmqo" height="1" width="1"/&gt;</description>
      <pubDate>Wed, 07 Dec 2011 21:30:47 +0100</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Versionner-ses-scripts-de-seeding-avec-versioned_seeds</feedburner:origLink></item>
    <item>
      <title>Utiliser rvm avec cron</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/Dy1A7JmZ5xY/Utiliser-rvm-avec-cron</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-rvm-avec-cron</guid>
      <description>&lt;p&gt;Il y a quelques temps, j&amp;#8217;avais besoin de lancer un script ruby avec cron. Le souci, c&amp;#8217;est que sur mon serveur, tout est à base de rvm. De fait, cron ne sait pas trouver ruby puisque rvm est chargé par mon fichier &lt;em&gt;.bashrc&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;La petite astuce pour que ça marche, c&amp;#8217;est de dire à cron de charger mon environnement pour ce script spécifiquement :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='cron'&gt;0 * * * * /bin/bash -l -c 'ruby mon_script.rb'&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;En clair, l&amp;#8217;option &lt;em&gt;-l&lt;/em&gt; permet de charger l&amp;#8217;environnement bash et l&amp;#8217;option &lt;em&gt;-c&lt;/em&gt; indique la commande à exécuter.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/Dy1A7JmZ5xY" height="1" width="1"/&gt;</description>
      <pubDate>Sat, 24 Sep 2011 05:40:12 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-rvm-avec-cron</feedburner:origLink></item>
    <item>
      <title>Rendre git-diff plus précis</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/jiQiDfJ9B8o/Rendre-git-diff-plus-precis</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Rendre-git-diff-plus-precis</guid>
      <description>&lt;p&gt;Git permet d&amp;#8217;afficher différentes informations en couleur. Cela se fait dans le fichier de configuration, &lt;em&gt;~/.gitconfig&lt;/em&gt;.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='ini'&gt;[color]&lt;br&gt;  ui = true&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Une des commandes concernées est &lt;em&gt;git-diff&lt;/em&gt;. Cette coloration est bien pratique mais peut avoir ses limites. En effet, lorsque la différence sur une ligne se joue à quelques caractères seulement, il peut être difficile de détecter les modifications.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='diff'&gt;&lt;span class='c'&gt;  Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,&lt;/span&gt;&lt;br&gt;&lt;span class='line del'&gt;&lt;span class='del'&gt;-&lt;/span&gt; quis nostrud exercitation ullamco labaris nisi ut aliquip ex ea commodo&lt;/span&gt;&lt;br&gt;&lt;span class='line ins'&gt;&lt;span class='ins'&gt;+&lt;/span&gt; quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;  consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;  cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;  non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Une petite astuce pour les voir plus précisément est l&amp;#8217;utilisation de l&amp;#8217;option &lt;em&gt;&amp;#8211;word-diff&lt;/em&gt;&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre class='bash'&gt;git diff --word-diff=color&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Voici le résultat obtenu :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;pre class='diff'&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod&lt;br&gt;tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,&lt;br&gt;quis nostrud exercitation ullamco lab&lt;span class='del'&gt;o&lt;/span&gt;&lt;span class='ins'&gt;a&lt;/span&gt;ris nisi ut aliquip ex ea commodo&lt;br&gt;consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse&lt;br&gt;cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat&lt;br&gt;non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;L&amp;#8217;option prend différentes valeurs qui peuvent être utiles selon les circonstances.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/jiQiDfJ9B8o" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 19 Sep 2011 23:46:35 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Rendre-git-diff-plus-precis</feedburner:origLink></item>
    <item>
      <title>Gestion du PATH sous OS X</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/3jxzCXn39rw/Gestion-du-PATH-sous-OS-X</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Gestion-du-PATH-sous-OS-X</guid>
      <description>&lt;p&gt;Une fonctionnalité bien pratique de &lt;em&gt;OS&lt;/em&gt;X_ est la gestion du PATH. En effet un mécanisme permet de ne pas surcharger son &lt;em&gt;.bashrc&lt;/em&gt; chaque fois que l&amp;#8217;on doit rajouter une entrée dans le PATH.&lt;/p&gt;

&lt;p&gt;La magie s&amp;#8217;opère dans le fichier &lt;em&gt;/etc/paths&lt;/em&gt; et dans le dossier &lt;em&gt;/etc/paths.d&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Le premier est un listing des chemin généraux :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;/usr/bin&lt;br&gt;/bin&lt;br&gt;/usr/sbin&lt;br&gt;/sbin&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Le deuxième est un dossier permettant d&amp;#8217;ajouter des fichiers contenant des listings en plus. Ces fichiers seront chargés à la suite de &lt;em&gt;/etc/paths&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id='exemple'&gt;Exemple&lt;/h2&gt;

&lt;p&gt;Si vous avez installé MySQL avec le DMG fourni sur le site officiel, vous pouvez ajouter le chemin des exécutables mysql en créant un fichier &lt;em&gt;/etc/paths.d/mysql&lt;/em&gt; et y écrire la ligne suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;/usr/local/mysql/bin&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id='collision'&gt;Collision&lt;/h2&gt;

&lt;p&gt;Si vous vous trouvez dans la situation où vous avez un exécutable dans un dossier non système et que vous souhaitez que ce dossier ait la priorité, mettez le en tête du fichier &lt;em&gt;/etc/paths&lt;/em&gt;, les chemins sont chargés dans l&amp;#8217;ordre.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/3jxzCXn39rw" height="1" width="1"/&gt;</description>
      <pubDate>Mon, 19 Sep 2011 23:44:06 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Gestion-du-PATH-sous-OS-X</feedburner:origLink></item>
    <item>
      <title>Créer ses propres sélecteurs avec jQuery</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/8NWCw5WpU7U/Creer-ses-propres-selecteurs-avec-jQuery</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Creer-ses-propres-selecteurs-avec-jQuery</guid>
      <description>&lt;p&gt;Il y a peu, au boulot, on s&amp;#8217;est demandé si, avec jQuery, il était possible de sélectionner les éléments dont une classe correspond à modèle donné.&lt;/p&gt;

&lt;p&gt;Par exemple, sélectionner tous ceux donc la classe commence par &lt;em&gt;menu_item_&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;La réponse est oui, avec jQuery, c&amp;#8217;est possible. Voici comment.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/8NWCw5WpU7U" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:01 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Creer-ses-propres-selecteurs-avec-jQuery</feedburner:origLink></item>
    <item>
      <title>Installation de markItUp avec preview dans une application Rails3</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/T6BVOAq-s9M/Installation-de-markItUp-avec-preview-dans-une-application-Rails3</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Installation-de-markItUp-avec-preview-dans-une-application-Rails3</guid>
      <description>&lt;p&gt;Il est fréquent d&amp;#8217;avoir besoin d&amp;#8217;un éditeur dit WYSIWYG dans un site web. Il en existe de deux types. Les éditeurs pur WYSIWYG où vous éditez directement du HTML en mode rendu final et les éditeurs de syntaxe qui se basent par exemple sur le format &lt;a href='http://en.wikipedia.org/wiki/Help:Wiki_markup'&gt;Wiki&lt;/a&gt;, &lt;a href='http://www.textism.com/tools/textile/'&gt;Textile&lt;/a&gt; ou &lt;a href='http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://markitup.jaysalvat.com/home/'&gt;markItUp&lt;/a&gt; est de la deuxième catégorie. Dans le cas d&amp;#8217;un éditeur de syntaxe, il est toujours plus confortable de disposer d&amp;#8217;une preview avant de valider ce qu&amp;#8217;on a écrit.&lt;/p&gt;

&lt;p&gt;Voici un petit tutoriel sur comment installer markItUp dans une appli &lt;a href='http://rubyonrails.org/'&gt;Rails3&lt;/a&gt; en utilisant &lt;a href='http://www.sinatrarb.com/'&gt;Sinatra&lt;/a&gt; pour générer la preview.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/T6BVOAq-s9M" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:01 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Installation-de-markItUp-avec-preview-dans-une-application-Rails3</feedburner:origLink></item>
    <item>
      <title>La méthode inject en Ruby</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/6hQIy3RmaFM/La-methode-inject-en-Ruby</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/La-methode-inject-en-Ruby</guid>
      <description>&lt;p&gt;En Ruby, il existe une méthode bien pratique nommée &lt;em&gt;inject&lt;/em&gt;. Elle s&amp;#8217;utilise de la manière suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;puts (&lt;span class='i'&gt;0&lt;/span&gt;..&lt;span class='i'&gt;10&lt;/span&gt;).inject(&lt;span class='i'&gt;0&lt;/span&gt;) &lt;span class='r'&gt;do&lt;/span&gt; |somme, x|&lt;br&gt;  somme += x&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# =&amp;gt; 55&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Dans l&amp;#8217;exemple précédent, on part d&amp;#8217;une valeur de &lt;em&gt;0&lt;/em&gt; que l&amp;#8217;on modifie à chaque tour. Le code suivant est équivalent :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;somme = &lt;span class='i'&gt;0&lt;/span&gt;&lt;br&gt;(&lt;span class='i'&gt;0&lt;/span&gt;..&lt;span class='i'&gt;10&lt;/span&gt;).each &lt;span class='r'&gt;do&lt;/span&gt; |x|&lt;br&gt;  somme += x&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;br&gt;puts somme&lt;br&gt;&lt;span class='c'&gt;# =&amp;gt; 55&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;De manière classique, on peut s&amp;#8217;en servire pour générer un tableau ou une table de hash de la manière suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='iv'&gt;@articles&lt;/span&gt;.inject({}) &lt;span class='r'&gt;do&lt;/span&gt; |hash, article|&lt;br&gt;  hash[article.title] = article.body&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Une autre utilisation interessante, est avec les booléens :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='iv'&gt;@plugins&lt;/span&gt;.inject(&lt;span class='pc'&gt;true&lt;/span&gt;) &lt;span class='r'&gt;do&lt;/span&gt; |keep_going, plugin|&lt;br&gt;  keep_going &amp;amp;= plugin.some_method&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;On obtient donc en fin de parcours, &lt;em&gt;true&lt;/em&gt; si tous les appels ont retourné &lt;em&gt;true&lt;/em&gt; ou &lt;em&gt;false&lt;/em&gt; si au moins un appel a retourné &lt;em&gt;false&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dans le cas où on veut stoper l&amp;#8217;appel à &lt;em&gt;inject&lt;/em&gt; dés qu&amp;#8217;un appel retourne &lt;em&gt;false&lt;/em&gt;, on peut utiliser l&amp;#8217;instruction &lt;em&gt;break&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='iv'&gt;@plugins&lt;/span&gt;.inject(&lt;span class='pc'&gt;true&lt;/span&gt;) &lt;span class='r'&gt;do&lt;/span&gt; |keep_going, plugin|&lt;br&gt;  keep_going &amp;amp;= plugin.some_method &lt;span class='r'&gt;or&lt;/span&gt; &lt;span class='r'&gt;break&lt;/span&gt;(keep_going)&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Cela permet de ne pas faire les appels suivants dés le premier retour négatif.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/6hQIy3RmaFM" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:00 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/La-methode-inject-en-Ruby</feedburner:origLink></item>
    <item>
      <title>Éviter la création des fichiers ._ (point underscore) sous Mac OS X</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/Tq8KMVwhszA/eviter-point-underscore-sous-mac-os-x</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/eviter-point-underscore-sous-mac-os-x</guid>
      <description>&lt;p&gt;Un comportement plutôt gênant sous &lt;em&gt;OS X&lt;/em&gt; est la création des fichiers ._ (point underscore). C&amp;#8217;est souvent un problème quand on veut créer une archive &lt;em&gt;.tar.gz&lt;/em&gt; ou avec certains &lt;em&gt;&lt;abbr title='Source Control Manager'&gt;SCM&lt;/abbr&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Voici une solution pour empêcher leur création.&lt;/p&gt;

&lt;p&gt;Dans votre .bashrc et votre .profile, ajoutez la ligne suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='fu'&gt;export&lt;/span&gt; &lt;span class='iv'&gt;COPYFILE_DISABLE&lt;/span&gt;=true&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/Tq8KMVwhszA" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:00 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/eviter-point-underscore-sous-mac-os-x</feedburner:origLink></item>
    <item>
      <title>Utiliser un shell non standard sous mac</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/J0KZkl5xBog/Utiliser-un-shell-non-standard-sous-mac</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-un-shell-non-standard-sous-mac</guid>
      <description>&lt;p&gt;Chaque fois que j&amp;#8217;installe un shell sous &lt;em&gt;Mac OS X&lt;/em&gt; et que je le règle par défaut gràce à &lt;em&gt;chsh&lt;/em&gt;, l&amp;#8217;application &lt;em&gt;Terminal&lt;/em&gt; refuse de se lancer et me dit :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vous n&amp;#8217;êtes pas autorisé à lancer cette application.&lt;/strong&gt;&lt;br /&gt;L&amp;#8217;administrateur a donné à votre shell une valeur illégale.&lt;/p&gt;

&lt;p&gt;Pour régler ce petit souci, il suffit d&amp;#8217;ajouter le chemin vers votre shell dans le fichier &lt;em&gt;/etc/shells&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;cat /etc/shells&lt;br&gt;&lt;span class='c'&gt;# List of acceptable shells for chpass(1).&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# Ftpd will not allow users to connect who are not using&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# one of these shells.&lt;/span&gt;&lt;br&gt;&lt;br&gt;/usr/&lt;span class='fu'&gt;local&lt;/span&gt;/bin/bash &lt;span class='c'&gt;# bash installé avec homebrew&lt;/span&gt;&lt;br&gt;/bin/bash&lt;br&gt;/bin/csh&lt;br&gt;/bin/ksh&lt;br&gt;/bin/sh&lt;br&gt;/bin/tcsh&lt;br&gt;/bin/zsh&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;C&amp;#8217;est une erreur que l&amp;#8217;on ne rencontre pas lorsque l&amp;#8217;on utilise un terminal comme &lt;a href='http://sites.google.com/site/iterm2home/'&gt;iTerm 2&lt;/a&gt;&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/J0KZkl5xBog" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:00 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-un-shell-non-standard-sous-mac</feedburner:origLink></item>
    <item>
      <title>Utiliser la sortie d'une commande comme un fichier en shell</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/TgIeXJ2kbpw/Utiliser-la-sortie-d-une-commande-comme-un-fichier-en-shell</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-la-sortie-d-une-commande-comme-un-fichier-en-shell</guid>
      <description>&lt;p&gt;Il arrive qu&amp;#8217;on ait besoin d&amp;#8217;utiliser la sortie d&amp;#8217;une commande comme si c&amp;#8217;était un fichier. Voici une petite astuce pour ne pas passer par un fichier temporaire.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;diff &lt;span class='bi'&gt;&amp;lt;&lt;/span&gt;(ls /un/dossier/au/pif) &lt;span class='bi'&gt;&amp;lt;&lt;/span&gt;(ls /un/autre/dossier/au/pif)&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Et voilà avec cette syntaxe on a la différence entre deux dossiers sans utiliser de fichiers temporaires.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/TgIeXJ2kbpw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:00 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-la-sortie-d-une-commande-comme-un-fichier-en-shell</feedburner:origLink></item>
    <item>
      <title>Installer la gem mysql sous Snow Leopard</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/6unkTj8DqyA/Installer-la-gem-mysql-sous-Snow-Leopard</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Installer-la-gem-mysql-sous-Snow-Leopard</guid>
      <description>&lt;p&gt;Sous &lt;em&gt;Snow Leopard&lt;/em&gt;, l&amp;#8217;installation de la gem mysql n&amp;#8217;est pas toujours simple. Voici ce que j&amp;#8217;utilise, sachant que mon &lt;em&gt;MySQL&lt;/em&gt; est installé via le DMG fourni sur le site officiel.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='fu'&gt;export&lt;/span&gt; &lt;span class='iv'&gt;ARCHFLAGS&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;-arch i386 -arch x86_64&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class='dl'&gt;;&lt;/span&gt;&lt;br&gt;sudo gem install mysql -v2.&lt;span class='i'&gt;7&lt;/span&gt; --no-rdoc --no-ri --         \&lt;br&gt;   --with-mysql-dir=/usr/&lt;span class='fu'&gt;local&lt;/span&gt;/mysql                      \&lt;br&gt;   --with-mysql-config=/usr/&lt;span class='fu'&gt;local&lt;/span&gt;/mysql/bin/mysql_config&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/6unkTj8DqyA" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:03:00 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Installer-la-gem-mysql-sous-Snow-Leopard</feedburner:origLink></item>
    <item>
      <title>Problème de police trop fine sous Snow Leopard</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/dDoZOXPKT1g/Probleme-de-police-trop-fine-sous-Snow-Leopard</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Probleme-de-police-trop-fine-sous-Snow-Leopard</guid>
      <description>&lt;p&gt;Il y a quelques jours j&amp;#8217;ai réinstallé un Snow Leopard sur un Mac Mini.&lt;/p&gt;

&lt;p&gt;Lorsque j&amp;#8217;ai lancé iTerm et TextMate, la police Monaco que j&amp;#8217;utilise dans les deux n&amp;#8217;était pas tout à fait comme d&amp;#8217;habitude, plus fine et moins agréable.&lt;/p&gt;

&lt;p&gt;Cela vient d&amp;#8217;un bug Snow Leopard qui ne reconnait pas toujours les LCD : il les voit comme des écrans CRT et désactive l&amp;#8217;anti-aliasing sur les polices !&lt;/p&gt;

&lt;p&gt;Pour régler ce souci, tapez simplement ceci dans une console :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;defaults -currentHost write -globalDomain AppleFontSmoothing -int &lt;span class='i'&gt;2&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;La prochaine fois que vous lancerez iTerm ou TextMate, ça devrait être bon.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/dDoZOXPKT1g" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:59 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Probleme-de-police-trop-fine-sous-Snow-Leopard</feedburner:origLink></item>
    <item>
      <title>Présentation de TotalFinder</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/nAR7P3vqmP8/Presentation-de-TotalFinder</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Presentation-de-TotalFinder</guid>
      <description>&lt;p&gt;Je n&amp;#8217;ai pas pour habitude de faire la promotion de logiciels particuliers sur mon blog. Petite exception, je vais vous parler de &lt;a href='http://totalfinder.binaryage.com/'&gt;TotalFinder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://totalfinder.binaryage.com/'&gt;TotalFinder&lt;/a&gt; est un plug-in pour &lt;em&gt;Finder&lt;/em&gt; qui donne accès à pas mal de fonctionnalités bien pratiques.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/nAR7P3vqmP8" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:59 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Presentation-de-TotalFinder</feedburner:origLink></item>
    <item>
      <title>Travailler en case-sensitive sous Mac</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/b6hfZ9pVHL8/Travailler-en-case-sensitive-sous-Mac</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Travailler-en-case-sensitive-sous-Mac</guid>
      <description>&lt;p&gt;&lt;em&gt;HFS+&lt;/em&gt;, le système de fichiers utilisé par &lt;em&gt;Mac OS X&lt;/em&gt; depuis un bout de temps déjà est, par défaut, case-insensitive. Il est toutefois possible, aujourd&amp;#8217;hui, de choisir d&amp;#8217;utiliser une version case-sensitive lorsque l&amp;#8217;on installe &lt;em&gt;OS X&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;La plupart du temps, ça n&amp;#8217;est pas spécialement gênant. Quand il s&amp;#8217;agit de travailler cela peut vite devenir handicapant.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/b6hfZ9pVHL8" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:59 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Travailler-en-case-sensitive-sous-Mac</feedburner:origLink></item>
    <item>
      <title>Désactiver la résolution interactive des conflits dans Subversion</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/TPTeMo8JuaY/Desactiver-la-resolution-interactive-des-conflits-dans-Subversion</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Desactiver-la-resolution-interactive-des-conflits-dans-Subversion</guid>
      <description>&lt;p&gt;Depuis la version 1.5 de Subversion, la résolution des conflits se fait de façon interactive lorsque l&amp;#8217;on utilise &lt;em&gt;svn update&lt;/em&gt;.&lt;/p&gt;
&lt;pre class='shell'&gt;&lt;kbd&gt;svn update&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;Conflict discovered in 'some/file/located/somewhere.rb'.&lt;/samp&gt;&lt;br&gt;&lt;samp&gt;Select: (p) postpone, (df) diff-full, (e) edit,&lt;br&gt;        (h) help for more options:&lt;/samp&gt;&lt;br&gt;&lt;/pre&gt;
&lt;p&gt;Personnellement, je ne supporte pas ce nouveau mode. Je préfère de loin faire un &lt;em&gt;update&lt;/em&gt; complet et corriger les conflits à posteriori.&lt;/p&gt;

&lt;p&gt;Pour le faire de manière ponctuelle l&amp;#8217;option &lt;em&gt;&amp;#8211;non-interactive&lt;/em&gt; permet d&amp;#8217;obtenir ce comportement.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svn update --non-interactive&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pour le faire de manière permanente, éditez votre &lt;em&gt;~/.subversion/config&lt;/em&gt; et ajoutez la ligne suivante dans la section &lt;em&gt;miscellany&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;[miscellany]&lt;br&gt;...&lt;br&gt;interactive-conflicts = no&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/TPTeMo8JuaY" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:59 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Desactiver-la-resolution-interactive-des-conflits-dans-Subversion</feedburner:origLink></item>
    <item>
      <title>Surcharge de méthode élégante en Javascript</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/wOKOiVdcMAQ/Surcharge-de-methode-elegante-en-Javascript</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Surcharge-de-methode-elegante-en-Javascript</guid>
      <description>&lt;p&gt;Aujourd&amp;#8217;hui, j&amp;#8217;ai eu besoin de surcharger une méthode Javascript. Premier réflexe, réécrire la fonction en y ajoutant le code voulu.&lt;/p&gt;

&lt;p&gt;Soit le code qui suit :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt; = &lt;span class='kw'&gt;function&lt;/span&gt;() {&lt;br&gt;  &lt;span class='kw'&gt;var&lt;/span&gt; tasse = prendre_une_tasse();&lt;br&gt;  tasse.verser_caf&lt;span class='er'&gt;é&lt;/span&gt;();&lt;br&gt;  tasse.faire_chauffer();&lt;br&gt;&lt;br&gt;  &lt;span class='kw'&gt;return&lt;/span&gt; tasse;&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Afin d&amp;#8217;ajouter du sucre, on pourrait surcharger de la façon suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt; = &lt;span class='kw'&gt;function&lt;/span&gt;() {&lt;br&gt;  &lt;span class='kw'&gt;var&lt;/span&gt; tasse = prendre_une_tasse();&lt;br&gt;  tasse.verser_caf&lt;span class='er'&gt;é&lt;/span&gt;();&lt;br&gt;  tasse.faire_chauffer();&lt;br&gt;&lt;br&gt;  tasse.ajouter_sucre();&lt;br&gt;&lt;br&gt;  &lt;span class='kw'&gt;return&lt;/span&gt; tasse;&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Jusque là, rien d&amp;#8217;inhabituel. Mais quid du code propre, simple et surtout &lt;abbr title='Don&amp;apos;t Repeat Yourself'&gt;DRY&lt;/abbr&gt; ?&lt;/p&gt;

&lt;p&gt;Voici donc une façon plus élégante d&amp;#8217;obtenir le même résultat en écrivant juste le code nécessaire :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt;_sans_sucre = mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt;;&lt;br&gt;&lt;br&gt;mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt; = &lt;span class='kw'&gt;function&lt;/span&gt;() {&lt;br&gt;  &lt;span class='kw'&gt;var&lt;/span&gt; tasse = mon_objet.fait_le_caf&lt;span class='er'&gt;é&lt;/span&gt;_sans_sucre();&lt;br&gt;&lt;br&gt;  tasse.ajouter_sucre();&lt;br&gt;&lt;br&gt;  &lt;span class='kw'&gt;return&lt;/span&gt; tasse;&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;C&amp;#8217;est tout simple, ça fonctionne et c&amp;#8217;est &lt;abbr title='Don&amp;apos;t Repeat Yourself'&gt;DRY&lt;/abbr&gt;&amp;#8230;&lt;/p&gt;

&lt;p&gt;Pour information, l&amp;#8217;idée m&amp;#8217;est venue du framework &lt;a href='http://www.rubyonrails.org'&gt;Ruby On Rails (en)&lt;/a&gt; et de sa méthode&lt;/p&gt;

&lt;p&gt;&lt;a href='http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Module.html#M001219'&gt;alias_method_chain (en)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/wOKOiVdcMAQ" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:52 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Surcharge-de-methode-elegante-en-Javascript</feedburner:origLink></item>
    <item>
      <title>Rails - Utiliser SASS avec theme_support</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/WJtyK53MiC4/Rails-Utiliser-SASS-avec-theme_support</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Rails-Utiliser-SASS-avec-theme_support</guid>
      <description>&lt;p&gt;J&amp;#8217;ai eu l&amp;#8217;occasion de me prendre un petit moment la tête aujourd&amp;#8217;hui sur comment utiliser des feuilles de styles SASS au sein de thèmes dans une application Rails.&lt;/p&gt;

&lt;p&gt;Pour la gestion des thèmes, j&amp;#8217;ai utilisé theme_support qui permet de créer, pour chaque thème, un dossier ayant l&amp;#8217;arborescence suivante :&lt;/p&gt;
&lt;pre&gt;un_theme&lt;br&gt;&lt;span class='deco'&gt;├──&lt;/span&gt; images&lt;br&gt;&lt;span class='deco'&gt;|   └──&lt;/span&gt; preview.png&lt;br&gt;&lt;span class='deco'&gt;├──&lt;/span&gt; javascripts&lt;br&gt;&lt;span class='deco'&gt;├──&lt;/span&gt; stylesheets&lt;br&gt;&lt;span class='deco'&gt;├──&lt;/span&gt; views&lt;br&gt;&lt;span class='deco'&gt;└──&lt;/span&gt; about.markdown&lt;/pre&gt;
&lt;p&gt;Ce que je cherchais à faire était de pouvoir mettre des fichiers SASS dans le dossier stylesheets, mais que les CSS compilées soient placées dans &lt;em&gt;&amp;lt;app_root&amp;gt;/public/stylesheets&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Le plus simple moyen que j&amp;#8217;ai trouvé pour faire ça, est d&amp;#8217;ajouter le script suivant dans &amp;gt;app_root&amp;gt;/config/initializers/theme_sass.rb :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='c'&gt;# :template_location est normalement une String, on la convertie donc en Array&lt;/span&gt;&lt;br&gt;&lt;span class='co'&gt;Sass&lt;/span&gt;::&lt;span class='co'&gt;Plugin&lt;/span&gt;.options[&lt;span class='sy'&gt;:template_location&lt;/span&gt;] = [[&lt;span class='co'&gt;Sass&lt;/span&gt;::&lt;span class='co'&gt;Plugin&lt;/span&gt;.options[&lt;span class='sy'&gt;:template_location&lt;/span&gt;], &lt;span class='co'&gt;Sass&lt;/span&gt;::&lt;span class='co'&gt;Plugin&lt;/span&gt;.options[&lt;span class='sy'&gt;:css_location&lt;/span&gt;]]]&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;# Pour chaque thème, on ajoute son dossier stylesheets à la liste des sources SASS&lt;/span&gt;&lt;br&gt;&lt;span class='co'&gt;Theme&lt;/span&gt;.find_all.map(&amp;amp;&lt;span class='sy'&gt;:name&lt;/span&gt;).each &lt;span class='r'&gt;do&lt;/span&gt; |theme|&lt;br&gt;  &lt;span class='co'&gt;Sass&lt;/span&gt;::&lt;span class='co'&gt;Plugin&lt;/span&gt;.options[&lt;span class='sy'&gt;:template_location&lt;/span&gt;] &amp;lt;&amp;lt; [&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='il'&gt;&lt;span class='idl'&gt;#{&lt;/span&gt;&lt;span class='co'&gt;RAILS_ROOT&lt;/span&gt;&lt;span class='idl'&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class='k'&gt;/themes/&lt;/span&gt;&lt;span class='il'&gt;&lt;span class='idl'&gt;#{&lt;/span&gt;theme&lt;span class='idl'&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class='k'&gt;/stylesheets&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;, &lt;span class='co'&gt;Sass&lt;/span&gt;::&lt;span class='co'&gt;Plugin&lt;/span&gt;.options[&lt;span class='sy'&gt;:css_location&lt;/span&gt;]]&lt;br&gt;&lt;span class='r'&gt;end&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/WJtyK53MiC4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Rails-Utiliser-SASS-avec-theme_support</feedburner:origLink></item>
    <item>
      <title>Continuer d'ouvrir ses onglets en fin de liste sous Firefox 3.6</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/iZvKM2QTPX4/Continuer-d-ouvrir-ses-onglets-en-fin-de-liste-sous-Firefox-3-6</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Continuer-d-ouvrir-ses-onglets-en-fin-de-liste-sous-Firefox-3-6</guid>
      <description>&lt;p&gt;Depuis quelques jours maintenant, Firefox 3.6 est sorti. Cette nouvelle version apporte un certain nombre de nouveautés, dont certaines qui peuvent être déroutantes (&amp;#60;troll&amp;#62;le nouveau système de skins uselessfull par exemple ?&amp;#60;/troll&amp;#62;).&lt;/p&gt;

&lt;p&gt;Bref ! Une nouveauté est l&amp;#8217;ouverture des onglets relatifs (ouverture d&amp;#8217;un lien de la page courante dans un onglet) à côté de l&amp;#8217;onglet courant et non plus à la fin de la liste. Tout cela n&amp;#8217;aurait rien de bien gênant si cette fonctionnalité pouvait être désactivée grâce à une simple case à cocher&amp;#8230;&lt;/p&gt;

&lt;p&gt;Voici un moyen simple de revenir à l&amp;#8217;ancien fonctionnement.&lt;/p&gt;

&lt;p&gt;Ouvrez l&amp;#8217;URL &lt;em&gt;about:config&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dans la zone de filtre saisissez &lt;em&gt;insertRelated&lt;/em&gt; cela devrait laisser seulement une entrée :&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/ff3.6_aboutconfig_tabs.png' alt='Firefox 3.6 about:config - insertRelatedTabsAfterCurrent' /&gt;&lt;/p&gt;

&lt;p&gt;Double-cliquez dessus pour passer sa valeur à &lt;em&gt;false&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;C&amp;#8217;est tout. Les nouveaux onglets devraient s&amp;#8217;ouvrir maintenant en fin de liste.&lt;/p&gt;

&lt;p&gt;EDIT: Je viens de trouver &lt;a href='http://mozillalinks.org/wp/2010/01/firefox-3-6-tips-and-tweaks/'&gt;un lien avec quelques astuces supplémentaires&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/iZvKM2QTPX4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:56 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Continuer-d-ouvrir-ses-onglets-en-fin-de-liste-sous-Firefox-3-6</feedburner:origLink></item>
    <item>
      <title>Utiliser GetText côté Javascript avec Rails</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/jZuC_6hNKxE/Utiliser-GetText-cote-Javascript-avec-Rails</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-GetText-cote-Javascript-avec-Rails</guid>
      <description>&lt;p&gt;En travaillant sur une petite application Rails, j&amp;#8217;ai utilisé GetText pour l&amp;#8217;internationalisation. Jusque là, pas de problème&amp;#8230; Sauf au moment où j&amp;#8217;ai voulu traduire un message côté client (autrement dit Javascript).&lt;/p&gt;

&lt;p&gt;Je ne voulais pas faire d&amp;#8217;appel AJAX pour chaque chaine à traduire.&lt;/p&gt;

&lt;p&gt;Tout naturellement, j&amp;#8217;ai cherché un plugin simple qui fasse le travail mais n&amp;#8217;ai rien trouvé qui me convienne.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;ai donc créé mon propre plugin, &lt;a href='http://github.com/simonc/gettext_json'&gt;gettext_json&lt;/a&gt;. Voici comment l&amp;#8217;utiliser.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/jZuC_6hNKxE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:56 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-GetText-cote-Javascript-avec-Rails</feedburner:origLink></item>
    <item>
      <title>Mettre en place un groupe de sites de démonstration</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/c4FsGFdQwvY/Mettre-en-place-un-groupe-de-sites-de-demonstration</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Mettre-en-place-un-groupe-de-sites-de-demonstration</guid>
      <description>&lt;p&gt;Quand on développe de nombreux sites, on n&amp;#8217;a pas forcement envie de toucher à ses VirtualHosts pour chaque nouveau site.&lt;/p&gt;

&lt;p&gt;Voici ce que j&amp;#8217;ai mis en place sur mon serveur pour l&amp;#8217;espace de démo de ce genre de sites.&lt;/p&gt;

&lt;p&gt;Le but était d&amp;#8217;avoir un dossier contenant un nombre non limité de dossiers nommés demo1, demo2, demo3, etc&amp;#8230;&lt;/p&gt;

&lt;p&gt;Pour cela, j&amp;#8217;ai créé un dossier &lt;em&gt;demos&lt;/em&gt; à la racine de mon serveur Apache. C&amp;#8217;est ce dossier qui va contenir tous les dossiers &lt;em&gt;demoXYZ&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;ai ensuite ajouté un VirtualHost comme ceci :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br&gt;  ServerName demos.exemple.com&lt;br&gt;  ServerAlias demo*.exemple.com&lt;br&gt;  DocumentRoot /var/www/demos&lt;br&gt;&lt;br&gt;  &amp;lt;Directory /&amp;gt;&lt;br&gt;    AllowOverride all&lt;br&gt;  &amp;lt;/Directory&amp;gt;&lt;br&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Le travail de dispatch entre les différents dossiers de démo est fait par un fichier .htaccess dans le dossier demos :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;RewriteEngine On&lt;br&gt;RewriteCond %{HTTP_HOST} ^demo(\d+).exemple.com&lt;br&gt;RewriteCond %{REQUEST_URI} !^/demo&lt;br&gt;RewriteRule (.\*) demo%1/$1 [L]&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Et voilà ! Après redémarrage du serveur, tout devrait fonctionner.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/c4FsGFdQwvY" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:55 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Mettre-en-place-un-groupe-de-sites-de-demonstration</feedburner:origLink></item>
    <item>
      <title>Deverouiller un groupe de fichiers sous Mac</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/EZKTxBxblsg/Deverouiller-un-groupe-de-fichiers-sous-Mac</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Deverouiller-un-groupe-de-fichiers-sous-Mac</guid>
      <description>&lt;p&gt;Dernièrement, lors de la copie de fichiers depuis le disque dur d&amp;#8217;une amie, je me suis retrouvé avec de nombreux fichiers verrouillés. Verrouillés au sens OS X du terme.&lt;/p&gt;

&lt;p&gt;Il est possible pour chaque fichier d&amp;#8217;afficher ses infos et de décocher la case de verrouillage.&lt;/p&gt;

&lt;p&gt;Mais lorsque cela concerne une centaine, ou un millier de fichiers, d&amp;#8217;un coup, cocher une simple case peut devenir quelque peu fastidieux.&lt;/p&gt;

&lt;p&gt;Pour effectuer cette action en ligne de commande, il suffit d&amp;#8217;utiliser la ligne suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;chflags nouchg &lt;span class='bi'&gt;&amp;lt;&lt;/span&gt;fichiers&lt;span class='bi'&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/EZKTxBxblsg" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Deverouiller-un-groupe-de-fichiers-sous-Mac</feedburner:origLink></item>
    <item>
      <title>Utiliser Paperclip avec Rails sous Mac</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/c05Q2A9VVKE/Utiliser-Paperclip-avec-Rails-sous-Mac</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-Paperclip-avec-Rails-sous-Mac</guid>
      <description>&lt;p&gt;Pour gérer l&amp;#8217;upload de fichiers dans les applications Rails, un plugin fréquemment utilisé est Paperclip. Récemment, lors du développement d&amp;#8217;un projet, je me suis retrouvé confronté à un problème lors de l&amp;#8217;envoie des fichiers. En effet, ça ne fonctionnait pas et je recevais un message d&amp;#8217;erreur à chaque fois.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/erreur_paperclip.jpg' alt='Erreur Paperclip' /&gt;&lt;/p&gt;

&lt;p&gt;Après quelques recherches, j&amp;#8217;ai fini par trouver que cette erreur venait du fait que mon application ne trouvait pas son chemin vers les outils d&amp;#8217;ImageMagick dont Paperclip dépend au travers de Rmagick.&lt;/p&gt;

&lt;p&gt;Pour résoudre ce problème, il suffit d&amp;#8217;ajouter un initialiseur à l&amp;#8217;application.&lt;/p&gt;

&lt;p&gt;J&amp;#8217;ai donc ajouté le fichier RAILS_ROOT/config/initializers/paperclip.rb contenant ceci :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='co'&gt;Paperclip&lt;/span&gt;.options[&lt;span class='sy'&gt;:command_path&lt;/span&gt;] = &lt;span class='s'&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;span class='k'&gt;/opt/local/bin&lt;/span&gt;&lt;span class='dl'&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;J&amp;#8217;ai utilisé ce chemin car j&amp;#8217;ai installé ImageMagick en utilisant MacPorts.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/c05Q2A9VVKE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-Paperclip-avec-Rails-sous-Mac</feedburner:origLink></item>
    <item>
      <title>SSH automatique sur une machine au travers d'une autre</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/RWrI4PI1smY/SSH-automatique-sur-une-machine-au-travers-d-une-autre</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/SSH-automatique-sur-une-machine-au-travers-d-une-autre</guid>
      <description>&lt;p&gt;Parfois, pour se connecter en SSH sur une machine, il est nécessaire de passer au préalable par une passerelle.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/ssh_connection_through.png' alt='Connexion au travers dune autre machine' /&gt;&lt;/p&gt;

&lt;p&gt;Cela implique, en général, le processus suivant :&lt;/p&gt;

&lt;p&gt;&lt;pre class='shell'&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;ssh user1@machine1&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;Welcome to machine1 &lt;/samp&gt;&lt;br&gt;&lt;samp class='prompt'&gt;machine1&amp;gt; &lt;/samp&gt;&lt;kbd&gt;ssh user2@machine2&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;Welcome to machine2&lt;/samp&gt;&lt;br&gt;&lt;samp class='prompt'&gt;machine2&amp;gt; &lt;/samp&gt;&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Cela peut être simplifié de plusieurs manières.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/RWrI4PI1smY" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/SSH-automatique-sur-une-machine-au-travers-d-une-autre</feedburner:origLink></item>
    <item>
      <title>Ignorer les changements d'espaces dans un diff SVN</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/57fjqvo7bW4/Ignorer-les-changements-d-espaces-dans-un-diff-SVN</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Ignorer-les-changements-d-espaces-dans-un-diff-SVN</guid>
      <description>&lt;p&gt;Lorsque l&amp;#8217;on édite un fichier, il peut arriver qu&amp;#8217;en plus de simples modifications, certaines portions, voire le fichier entier, soient re-indentées. Malheureusement, Subversion étant bête et discipliné, un &lt;em&gt;svn diff&lt;/em&gt; montrera les lignes modifiées mais également les lignes simplement indentées.&lt;/p&gt;

&lt;p&gt;Cela peut devenir gênant lorsque, par exemple, tout le fichier s&amp;#8217;en retrouve changé.&lt;/p&gt;

&lt;p&gt;Pour ignorer ces différences d&amp;#8217;espaces lors d&amp;#8217;un &lt;em&gt;diff&lt;/em&gt;, la commande à utiliser est la suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svn diff --extensions -bu&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/57fjqvo7bW4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Ignorer-les-changements-d-espaces-dans-un-diff-SVN</feedburner:origLink></item>
    <item>
      <title>Problème des noms de fichiers avec accents dans Subversion sous OS X</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/P3HGuzLNlww/Probleme-des-noms-de-fichiers-avec-accents-dans-Subversion-sous-OS-X</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Probleme-des-noms-de-fichiers-avec-accents-dans-Subversion-sous-OS-X</guid>
      <description>&lt;p&gt;Si vous utilisez des fichiers dont le nom contient des accents sur un dépôt &lt;abbr title='Subversion'&gt;SVN&lt;/abbr&gt;, vous avez de grandes chances de rencontrer quelques soucis sous Mac, si vous avez installé Subversion avec &lt;em&gt;MacPorts&lt;/em&gt;. Le problème vient de la différence de stockage des caractères unicode entre les plateformes &lt;em&gt;Unix&lt;/em&gt; et &lt;em&gt;OS X&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Voici comment résoudre ce problème. C&amp;#8217;est très simple, il suffit d&amp;#8217;installer une variante du &lt;em&gt;port&lt;/em&gt; subversion.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;port install subversion +unicode_path&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si tout s&amp;#8217;est bien passé, vous ne devriez plus avoir de problèmes.&lt;/p&gt;

&lt;p&gt;NOTE: j&amp;#8217;ai ajouté cette option dans la Formula subversion de Homebrew mais c&amp;#8217;est toujours en attente de merge de leur part&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/P3HGuzLNlww" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Probleme-des-noms-de-fichiers-avec-accents-dans-Subversion-sous-OS-X</feedburner:origLink></item>
    <item>
      <title>Utiliser TextMate pour les messages de commit SVN ou Git</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/yLmbNMhJvEs/Utiliser-TextMate-pour-les-messages-de-commit-SVN-ou-Git</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-TextMate-pour-les-messages-de-commit-SVN-ou-Git</guid>
      <description>&lt;p&gt;Lorsque l&amp;#8217;on utilise un éditeur de texte particulier, on apprécie de pouvoir l&amp;#8217;utiliser comme éditeur par défaut pour peu tout. Cela comprend également les messages de commit des outils tels que SVN ou Git.&lt;/p&gt;

&lt;p&gt;Malheureusement, utiliser un éditeur graphique pour cela n&amp;#8217;est pas toujours trivial.&lt;/p&gt;

&lt;p&gt;La commande &lt;em&gt;mate&lt;/em&gt; propose l&amp;#8217;option &lt;em&gt;-w&lt;/em&gt; qui permet de signifier que l&amp;#8217;on veut attendre que TextMate en ait fini avec le fichier pour reprendre la main.&lt;/p&gt;
&lt;p class='note'&gt;Il est vrai que TextMate intègre les fonctionnalités SVN et Git.
  Personnellement j'ai toujours préféré m'occuper de ces choses là en ligne de
  commande... chacun son truc...&lt;/p&gt;
&lt;h2 id='pour_svn'&gt;Pour SVN&lt;/h2&gt;

&lt;p&gt;Il y a plusieurs façons de dire à subversion d&amp;#8217;utiliser tel ou tel éditeur, le plus simple est de donner une valeur à la variable &lt;em&gt;SVN_EDITOR&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='fu'&gt;export&lt;/span&gt; &lt;span class='iv'&gt;SVN_EDITOR&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;mate -w&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id='pour_git'&gt;Pour Git&lt;/h2&gt;

&lt;p&gt;Pour rester dans l&amp;#8217;utilisation habituelle de Git, on utilisera la commande suivante :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;git config --global core.editor &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;mate -w&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/yLmbNMhJvEs" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-TextMate-pour-les-messages-de-commit-SVN-ou-Git</feedburner:origLink></item>
    <item>
      <title>Relever automatiquement les mails des sous dossiers dans Thunderbird</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/VTiPmB88MVE/Relever-automatiquement-les-mails-des-sous-dossiers-dans-Thunderbird</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Relever-automatiquement-les-mails-des-sous-dossiers-dans-Thunderbird</guid>
      <description>&lt;p&gt;Depuis plusieurs années maintenant, j&amp;#8217;utilise pour lire mes mails le logiciel Thunderbird. Pratique et efficace, il n&amp;#8217;en est pas moins doté de certains défauts plus que gênants&amp;#8230;&lt;/p&gt;

&lt;p&gt;L&amp;#8217;un d&amp;#8217;eux est que Thunderbird ne relève pas automatiquement les mails dans les sous dossiers. Cela devient très gênant lorsque l&amp;#8217;on utilise un filtrage des messages à la source, autrement dit, côté serveur.&lt;/p&gt;

&lt;p&gt;Il existe toutefois une solution. Il est possible de préciser, pour chaque dossier, que l&amp;#8217;on souhaite que Thunderbird vérifie les nouveaux messages.&lt;/p&gt;

&lt;p&gt;Pour ce faire, il suffit de faire un clic droit sur un dossier puis sur &lt;em&gt;Propriétés&amp;#8230;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Dans la fenêtre qui s&amp;#8217;ouvre, cochez la case &lt;em&gt;Surveillez les nouveaux messages dans ce dossier&lt;/em&gt; :&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/thunderbird.png' alt='Thunderbird properties' /&gt;&lt;/p&gt;

&lt;p&gt;Voilà, à ce jour, le mieux que l&amp;#8217;on puisse faire, mais c&amp;#8217;est mieux que rien.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/VTiPmB88MVE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:59 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Relever-automatiquement-les-mails-des-sous-dossiers-dans-Thunderbird</feedburner:origLink></item>
    <item>
      <title>Comment se passer de &amp;lt;div class=&amp;quot;clear&amp;quot;&amp;gt;&amp;lt;/div&amp;gt; ?</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/wtnQoqXfAoM/Comment-se-passer-de-div-clear</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Comment-se-passer-de-div-clear</guid>
      <description>&lt;p&gt;Dans mon travail de tous les jours, en tant que développeur web, je me retrouve confronté au problème dit de la guillotine lorsque j&amp;#8217;utilise des éléments en &lt;em&gt;float&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Pour illustrer mes propos voici un petit exemple de code et son résultat :&lt;/p&gt;

&lt;p&gt;Code xHTML :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='ta'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='an'&gt;id&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;container&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class='ta'&gt;&amp;gt;&lt;/span&gt;&lt;br&gt;  &lt;span class='ta'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='an'&gt;class&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;content&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class='ta'&gt;&amp;gt;&lt;/span&gt;&lt;span class='ta'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br&gt;  &lt;span class='ta'&gt;&amp;lt;div&lt;/span&gt; &lt;span class='an'&gt;class&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;content&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span class='ta'&gt;&amp;gt;&lt;/span&gt;&lt;span class='ta'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;br&gt;&lt;span class='ta'&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Code CSS :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='co'&gt;#container&lt;/span&gt; {&lt;br&gt;  &lt;span class='ke'&gt;border&lt;/span&gt;:       &lt;span class='fl'&gt;1px&lt;/span&gt; &lt;span class='vl'&gt;solid&lt;/span&gt; &lt;span class='cr'&gt;#000000&lt;/span&gt;;&lt;br&gt;  &lt;span class='ke'&gt;padding&lt;/span&gt;:      &lt;span class='fl'&gt;10px&lt;/span&gt;;&lt;br&gt;}&lt;br&gt;      &lt;br&gt;&lt;span class='cl'&gt;.content&lt;/span&gt; {&lt;br&gt;  &lt;span class='ke'&gt;background&lt;/span&gt;:   &lt;span class='cr'&gt;#999&lt;/span&gt;;&lt;br&gt;  &lt;span class='ke'&gt;float&lt;/span&gt;:        &lt;span class='vl'&gt;left&lt;/span&gt;;&lt;br&gt;  &lt;span class='ke'&gt;height&lt;/span&gt;:       &lt;span class='fl'&gt;100px&lt;/span&gt;;&lt;br&gt;  &lt;span class='ke'&gt;width&lt;/span&gt;:        &lt;span class='fl'&gt;100px&lt;/span&gt;;&lt;br&gt;  &lt;span class='ke'&gt;margin-right&lt;/span&gt;: &lt;span class='fl'&gt;10px&lt;/span&gt;;&lt;br&gt;}&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Voici le résultat obtenu :&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/float_with_problem.png' alt='Float with problem' /&gt;&lt;/p&gt;

&lt;p&gt;En effet, dans 99% des cas, ce n&amp;#8217;était pas le but recherché.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/wtnQoqXfAoM" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:53 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Comment-se-passer-de-div-clear</feedburner:origLink></item>
    <item>
      <title>ssh: complétion et alias</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/q3oOCUqPajY/ssh-completion-et-alias</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/ssh-completion-et-alias</guid>
      <description>&lt;p&gt;Voici deux petites astuces pour améliorer l&amp;#8217;utilisation de ssh.&lt;/p&gt;

&lt;h2 id='complétion_des_noms_dhôtes'&gt;Complétion des noms d&amp;#8217;hôtes&lt;/h2&gt;

&lt;p&gt;Pour obtenir la complétion des noms d&amp;#8217;hôtes pour ssh et scp, il vous suffit d&amp;#8217;installer le paquet bash-completion.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='c'&gt;# Sous Debian et consorts&lt;/span&gt;&lt;br&gt;aptitude install bash-completion&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;# Sous Mac, avec macport&lt;/span&gt;&lt;br&gt;port install bash-completion&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;# Sous Mac, avec homebrew&lt;/span&gt;&lt;br&gt;brew install bash-completion&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id='alias'&gt;Alias&lt;/h2&gt;

&lt;p&gt;Il est possible de créer des alias pour les hôtes sur lesquels on se ssh. Cela se fait en éditant le fichier &lt;em&gt;~/.ssh/config&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;Host somehost&lt;br&gt;  HostName     some.host.with.long.name&lt;br&gt;  User         someuser&lt;br&gt;  IdentityFile ~/.ssh/other_id_rsa&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ceci permet de se connecter à l&amp;#8217;hôte &lt;em&gt;some.host.with.long.name&lt;/em&gt; avec l&amp;#8217;utilisateur &lt;em&gt;someuser&lt;/em&gt; en utilisant la clé &lt;em&gt;~/.ssh/other_id_rsa&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;ssh somehost&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/q3oOCUqPajY" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:57 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/ssh-completion-et-alias</feedburner:origLink></item>
    <item>
      <title>Changer facilement la configuration proxy de SVN</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/_9HUh71s_1Y/Changer-facilement-la-configuration-proxy-de-SVN</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Changer-facilement-la-configuration-proxy-de-SVN</guid>
      <description>&lt;p&gt;Comme de nombreux développeurs, je suis très souvent amené à utiliser SVN (Subversion). Comme de nombreux développeurs toujours, je suis amené à partir en mission chez différents clients qui ont chacun leur proxy. Pour peu qu&amp;#8217;on en ait déjà un au boulot ou chez soi, ça devient vite fatiguant de jongler entre ces différentes configurations.&lt;/p&gt;

&lt;p&gt;Voici donc une petite astuce toute bête pour se rendre la vie facile.&lt;/p&gt;

&lt;h2 id='configurer_un_proxy_dans_subversion'&gt;Configurer un proxy dans subversion&lt;/h2&gt;

&lt;p&gt;Première étape, savoir où se configure les proxies dans subversion. Tout cela se passe dans le fichier ~/.subversion/servers où l&amp;#8217;on peut trouver les lignes suivantes :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='c'&gt;# http-proxy-host = &lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# http-proxy-port = 3128&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# http-proxy-username = &lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# http-proxy-password =&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Comme on peut le voir, il est facile de configurer un proxy selon le serveur svn que l&amp;#8217;on veut atteindre. C&amp;#8217;est très bien, seulement ça ne nous aide pas. Nous ce n&amp;#8217;est pas le serveur qui change mais l&amp;#8217;environnement de travail !&lt;/p&gt;

&lt;h2 id='comment_se_sauver_la_vie'&gt;Comment se sauver la vie&lt;/h2&gt;

&lt;p&gt;Tout d&amp;#8217;abord il faut créer un fichier servers par environnement. Idéalement on les place dans le dossier ~/.subversion avec un nom comme env1_servers, env2_servers (en ce qui me concerne je prends 3 lettres représentatives de l&amp;#8217;environnement).&lt;/p&gt;

&lt;p&gt;Pensez à renommer le fichier servers existant, en def_servers par exemple car servers va devenir un lien symbolique vers le fichier qui nous intéresse.&lt;/p&gt;

&lt;p&gt;On pourrait se contenter ce ça et s&amp;#8217;amuser à appeler ln -s à tout bout de champ, voir même créer un alias comme &amp;#8220;ln -s ~/.subversion/env1_servers ~/.subversion/servers&amp;#8221; mais honnêtement, une solution pérenne (quel horrible mot) serait bien plus agréable.&lt;/p&gt;

&lt;p&gt;Voici donc une petite fonction shell qui va nous faciliter grandement la vie !&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='c'&gt;# switch de profile svn&lt;/span&gt;&lt;br&gt;svnpro() &lt;span class='r'&gt;{&lt;/span&gt;&lt;br&gt;  &lt;span class='r'&gt;if&lt;/span&gt; &lt;span class='r'&gt;[&lt;/span&gt; -f ~/.subversion/&lt;span class='pc'&gt;$1&lt;/span&gt;_servers &lt;span class='r'&gt;]&lt;/span&gt;&lt;span class='dl'&gt;;&lt;/span&gt; &lt;span class='r'&gt;then&lt;/span&gt;&lt;br&gt;    ln -nfs &lt;span class='pc'&gt;$1&lt;/span&gt;_servers ~/.subversion/servers&lt;br&gt;  &lt;span class='r'&gt;else&lt;/span&gt;&lt;br&gt;    &lt;span class='fu'&gt;echo&lt;/span&gt; &lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='pc'&gt;$1&lt;/span&gt;&lt;span class='k'&gt;\_&lt;/span&gt;&lt;span class='k'&gt;servers n'existe pas.&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;  &lt;span class='r'&gt;fi&lt;/span&gt;&lt;br&gt;&lt;span class='r'&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Et voila, il nous suffit maintenant de l&amp;#8217;appeler de la manière suivante et notre configuration de proxy changera.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svnpro env1&lt;br&gt;svnpro env2&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/_9HUh71s_1Y" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Changer-facilement-la-configuration-proxy-de-SVN</feedburner:origLink></item>
    <item>
      <title>Un peu de couleur dans les diffs SVN</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/_ER1stXfIs8/Un-peu-de-couleur-dans-les-diffs-SVN</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Un-peu-de-couleur-dans-les-diffs-SVN</guid>
      <description>&lt;p&gt;Les diffs SVN peuvent parfois être longs et souvent pénibles à lire. Oui il y a des + et des - mais ça ne fait pas tout. Un bon moyen de simplifier cette lecture est l&amp;#8217;utilisation de couleurs.&lt;/p&gt;

&lt;p&gt;Un utilitaire bien sympathique, colordiff, permet justement de coloriser l&amp;#8217;affichage des diffs. Packagé sous Debian ou disponible via MacPort.&lt;/p&gt;

&lt;p&gt;Voici comment l&amp;#8217;utiliser pour les diffs SVN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pour une utilisation occasionnelle&lt;/strong&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svn diff --diff-cmd colordiff&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;ou&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svn diff | colordiff&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Pour l&amp;#8217;établir de manière globale&lt;/strong&gt;, il suffit d&amp;#8217;éditer le fichier &lt;em&gt;~/.subversion/config&lt;/em&gt; et d&amp;#8217;ajouter dans la section &lt;em&gt;&lt;span&gt;helpers&lt;/span&gt;&lt;/em&gt; :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;diff-cmd = colordiff&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;EDIT: Pour afficher la sortie de colordiff dans less, il faut utiliser l&amp;#8217;option &lt;em&gt;-R&lt;/em&gt; de ce dernier :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;svn diff | less -R&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pour aller plus loin, un autre utilitaire permet de coloriser bien plus de choses, il s&amp;#8217;agit de &lt;a href='http://colorsvn.tigris.org/' title='page du projet colorsvn'&gt;colorsvn&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/_ER1stXfIs8" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Un-peu-de-couleur-dans-les-diffs-SVN</feedburner:origLink></item>
    <item>
      <title>Ignorer les fichiers de votre IDE dans Subversion</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/mw2-sVa_hKk/Ignorer-les-fichiers-de-votre-IDE-dans-Subversion</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Ignorer-les-fichiers-de-votre-IDE-dans-Subversion</guid>
      <description>&lt;p&gt;Il peut arriver que, sur un projet, chacun utilise son propre IDE. Le petit problème c&amp;#8217;est que chaque IDE crée des fichiers qui lui sont spécifiques. Lorsque l&amp;#8217;on utilise Subversion, gérer les &lt;em&gt;svn:ignore&lt;/em&gt; devient vite lourd. Mais une solution existe ! Ignorer localement certains fichiers.&lt;/p&gt;

&lt;p&gt;Je prendrai NetBeans comme exemple pour cet article.&lt;/p&gt;

&lt;p&gt;Voici ce que l&amp;#8217;on peut voir lors d&amp;#8217;un &lt;em&gt;svn status&lt;/em&gt; après la création d&amp;#8217;un projet sous NetBeans depuis des sources existantes:&lt;/p&gt;
&lt;pre class='shell'&gt;&lt;kbd&gt;svn status&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;?      nbproject&lt;/samp&gt;&lt;br&gt;&lt;samp class='svn_modified'&gt;M      some\_file&lt;/samp&gt;&lt;/pre&gt;
&lt;p&gt;Dans le dossier &lt;em&gt;~/.subversion&lt;/em&gt;, il existe un fichier &lt;em&gt;config&lt;/em&gt;. Dans ce fichier, sous le groupe &lt;em&gt;&lt;span&gt;miscellany&lt;/span&gt;&lt;/em&gt;, vous trouverez les lignes suivantes :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='c'&gt;## Debian&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# global-ignores = \*.o \*.lo \*.la \*.al .libs \*.so&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;#   \*.so.[0-9]\* \*.a \*.pyc \*.pyo \*.rej \*~ #\*# .#\* .\*.swp .DS\_Store&lt;/span&gt;&lt;br&gt;&lt;br&gt;&lt;span class='c'&gt;## Mac&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;# global-ignores = \*.o \*.lo \*.la #\*# .\*.rej \*.rej&lt;/span&gt;&lt;br&gt;&lt;span class='c'&gt;#  .\*~ \*~ .#\* .DS\_Store&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Il vous suffit de décommenter ces lignes et de rajouter les fichiers que vous souhaitez ignorer :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;global-ignores = *.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#* .DS\_Store nbproject&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Voilà le résultat :&lt;/p&gt;
&lt;pre class='shell'&gt;&lt;kbd&gt;svn status&lt;/kbd&gt;&lt;br&gt;&lt;samp class='svn_modified'&gt;M      some\_file&lt;/samp&gt;&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/mw2-sVa_hKk" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:53 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Ignorer-les-fichiers-de-votre-IDE-dans-Subversion</feedburner:origLink></item>
    <item>
      <title>Remettre GRUB apres une reinstallation de Windows</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/dlc7B2PUuNw/Remettre-GRUB-apres-une-reinstallation-de-Windows</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Remettre-GRUB-apres-une-reinstallation-de-Windows</guid>
      <description>&lt;p&gt;En général, quand on me parle de remettre GRUB après une installation de Windows, la première chose à laquelle je pense est &amp;#8220;bah tu mets un live-cd, tu montes ta partition /, tu te chroot et grub-install&amp;#8221;.&lt;/p&gt;

&lt;p&gt;En somme, ça se résume effectivement à ça. Mais, parfois, tout ne se passe pas comme prévu. En effet, lors de ma dernière expérience, lorsque je montais la partition / de ma Debian, aucune trace de hda ou sda. Rien du tout ! La raison, je ne la connais pas et, pour être honnête, je n&amp;#8217;ai pas cherché (création dynamique, quelque chose comme ça ?).&lt;/p&gt;

&lt;p&gt;Bref, rien à faire, ils sont introuvables. Voici donc la solution dans ce cas :&lt;/p&gt;

&lt;p&gt;Lancer le CD d&amp;#8217;installation de Debian (marche probablement avec d&amp;#8217;autre mais c&amp;#8217;est ce que j&amp;#8217;ai fait donc&amp;#8230;). Après le lancement, continuer jusqu&amp;#8217;au moment de la sélection du réseau, passer cette étape puis, un petit ALT+F2 (ou CTRL+ALT+F2), pour passer dans une console. Ensuite, voici la marche à suivre (mon / se trouve dans /dev/sda6) :&lt;/p&gt;
&lt;pre class='shell'&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;mount /dev/sda6 /mnt&lt;/kbd&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;mount -o bind /dev /mnt/dev&lt;/kbd&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;mount -o bind /proc /mnt/proc&lt;/kbd&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;chroot /mnt&lt;/kbd&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;grub&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;Probing devices to guess BIOS drives. This may take a long time.&lt;/samp&gt;&lt;br&gt;&lt;samp class='prompt'&gt;grub&gt; &lt;/samp&gt;&lt;kbd&gt;root (hd0,5)&lt;/kbd&gt; # trouvé dans /boot/grub/menu.lst&lt;br&gt;&lt;samp class='prompt'&gt;grub&gt; &lt;/samp&gt;&lt;kbd&gt;setup (hd0)&lt;/kbd&gt;&lt;br&gt;&lt;samp&gt;sortie de grub qui dit que tout s'est bien passé&lt;/samp&gt;&lt;br&gt;&lt;samp class='prompt'&gt;grub&gt; &lt;/samp&gt;&lt;span class='comment'&gt;# CTRL+C pour sortir&lt;/span&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;update-grub&lt;/kbd&gt;&lt;br&gt;&lt;samp class='prompt'&gt;$ &lt;/samp&gt;&lt;kbd&gt;reboot&lt;/kbd&gt;&lt;/pre&gt;
&lt;p&gt;En ce qui me concerne, ça a fonctionné. Seul un dernier souci que j&amp;#8217;ai eu, mes partitions /home et de swap ont été échangées. Donc, au redémarrage, si un problème se pose, pensez avant de tout envoyer valser à passer en console de maintenance, à tester le montage de vos partitions pour voir ce qu&amp;#8217;il y a dedans et modifier votre &lt;em&gt;/etc/fstab&lt;/em&gt; en conséquence&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/dlc7B2PUuNw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Remettre-GRUB-apres-une-reinstallation-de-Windows</feedburner:origLink></item>
    <item>
      <title>Contrôler Amarok en ligne de commande grace a DCOP</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/HU9SRvWCulw/Controler-Amarok-en-ligne-de-commande-grace-a-DCOP</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Controler-Amarok-en-ligne-de-commande-grace-a-DCOP</guid>
      <description>&lt;p&gt;Pendant longtemps, je me suis demandé comment on pouvait régler le son d&amp;#8217;Amarok depuis la ligne de commande.&lt;/p&gt;

&lt;p&gt;Quel intérêt, me direz-vous, alors qu&amp;#8217;il suffit de cliquer pour s&amp;#8217;en occuper ?&lt;/p&gt;

&lt;p&gt;La réponse est simple. D&amp;#8217;un naturel fainéant, il m&amp;#8217;arrive de coder au lit et de mettre Amarok en lecture sur mon PC de bureau. Il est possible de contrôler Amarok en ligne de commande pour ce qui concerne la lecture (play, pause, stop, etc&amp;#8230;). Le contrôle du son ne fait malheureusement pas partie des options. C&amp;#8217;est là que DCOP sauve des vies&amp;#8230;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/HU9SRvWCulw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:53 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Controler-Amarok-en-ligne-de-commande-grace-a-DCOP</feedburner:origLink></item>
    <item>
      <title>Automatiser les tags ID3 de vos mp3</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/FNDIure3bKw/Automatiser-les-tags-ID3-de-vos-mp3</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Automatiser-les-tags-ID3-de-vos-mp3</guid>
      <description>&lt;p&gt;Cet article présente trois petits scripts ayant pour but d&amp;#8217;appliquer automatiquement les tags ID3 sur vos mp3.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/FNDIure3bKw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:56 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Automatiser-les-tags-ID3-de-vos-mp3</feedburner:origLink></item>
    <item>
      <title>Connaitre les classes heritant d'une autre classe en Ruby</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/6EUtX1zB52Y/Connaitre-les-classes-heritant-d-une-autre-classe-en-Ruby</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Connaitre-les-classes-heritant-d-une-autre-classe-en-Ruby</guid>
      <description>&lt;p&gt;En Ruby, pour connaître la classe parente d&amp;#8217;une classe, un appel de méthode suffit. Malheureusement, il n&amp;#8217;existe pas de telle méthode afin d&amp;#8217;obtenir les classes héritant d&amp;#8217;une classe donnée. Voici donc comment créer ce comportement.&lt;/p&gt;

&lt;p&gt;Prérequis: une connaissance basique du langage Ruby est nécessaire pour comprendre certains listings de code.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/6EUtX1zB52Y" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:57 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Connaitre-les-classes-heritant-d-une-autre-classe-en-Ruby</feedburner:origLink></item>
    <item>
      <title>VirtualBox - BSoD au demarrage de Windows</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/M7W-IfoLNeU/VirtualBox-BSoD-au-demarrage-de-Windows</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/VirtualBox-BSoD-au-demarrage-de-Windows</guid>
      <description>&lt;p&gt;Si, comme moi, vous êtes passe à la nouvelle version de VirtualBox, celle de Sun, vous avez peut-être de petits problèmes avec vos anciennes VM Windows.&lt;br /&gt;Voici comment résoudre le problème du BSoD juste après l&amp;#8217;affichage du logo Windows.&lt;/p&gt;

&lt;p&gt;La manipulation est relativement simple. Il vous suffit d&amp;#8217;aller des les réglages de votre VM. Puis dans la partie &lt;em&gt;General&amp;#160;&amp;#187; Advanced&amp;#160;&amp;#187; IDE Controller Type&lt;/em&gt; de choisir &lt;em&gt;PIIX3&lt;/em&gt; a la place de &lt;em&gt;PIIX4&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/vbox_bsod.png' alt='réglages à effectuer dans VirtualBox' /&gt;&lt;/p&gt;

&lt;p&gt;Et voilà le tour est joué !&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/M7W-IfoLNeU" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:56 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/VirtualBox-BSoD-au-demarrage-de-Windows</feedburner:origLink></item>
    <item>
      <title>Mettre en place un serveur SVN disponible via HTTP</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/0rD9T_IcZAE/Mettre-en-place-un-serveur-SVN-disponible-via-HTTP</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Mettre-en-place-un-serveur-SVN-disponible-via-HTTP</guid>
      <description>&lt;p&gt;Cet article explique comment installer SVN, creer un depot et le rendre accessible par internet via HTTP grace au serveur Apache.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/0rD9T_IcZAE" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:52 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Mettre-en-place-un-serveur-SVN-disponible-via-HTTP</feedburner:origLink></item>
    <item>
      <title>Ouvrir les liens de Thunderbird dans Firefox</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/QbdBFn9OXQw/Ouvrir-les-liens-de-Thunderbird-dans-Firefox</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Ouvrir-les-liens-de-Thunderbird-dans-Firefox</guid>
      <description>&lt;p&gt;Si comme moi, le fait que Konqueror (par exemple) s&amp;#8217;ouvre quand vous cliquez sur un lien dans Thunderbird vous insupporte, voici comment remédier à ce problème.&lt;/p&gt;

&lt;p&gt;A ma connaissance il y a deux méthodes.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/QbdBFn9OXQw" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:57 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Ouvrir-les-liens-de-Thunderbird-dans-Firefox</feedburner:origLink></item>
    <item>
      <title>Utiliser plusieurs fois le meme VDI sous VirtualBox</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/uW3wW1Tx1JQ/Utiliser-plusieurs-fois-le-meme-VDI-sous-VirtualBox</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Utiliser-plusieurs-fois-le-meme-VDI-sous-VirtualBox</guid>
      <description>&lt;p&gt;Pendant un instant, j&amp;#8217;ai crus qu&amp;#8217;il n&amp;#8217;était pas possible d&amp;#8217;utiliser plusieurs fois un même fichier VDI avec VirtualBox.&lt;/p&gt;

&lt;p&gt;En effet lorsque je copiais simplement une machine virtuelle, VirtualBox me disait que cette machine était déjà enregistrée.&lt;/p&gt;

&lt;p&gt;Cette idée allant à l&amp;#8217;encontre du principe même de la virtualisation, je me suis penché sur le problème.&lt;/p&gt;

&lt;p&gt;Il se trouve que VirtualBox est livré avec un utilitaire : VBoxManage&lt;/p&gt;

&lt;p&gt;VBoxManage permet différentes actions sur les fichiers VDI dont le &amp;#8216;clonevdi&amp;#8217; qui justement répond au besoin de copie des machines virtuelles.&lt;/p&gt;

&lt;p&gt;La commande suivante permet de créer un clone de MachineEnEntree :&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;VBoxManage clonevdi MachineEnEntree.vdi MachineEnSortie.vdi&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/uW3wW1Tx1JQ" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:53 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Utiliser-plusieurs-fois-le-meme-VDI-sous-VirtualBox</feedburner:origLink></item>
    <item>
      <title>La Text User Interface de GDB</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/RFE7-FfIcYQ/Text-User-Interface-de-gdb</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Text-User-Interface-de-gdb</guid>
      <description>&lt;p&gt;Petite chose que j&amp;#8217;ai découverte il y à quelques jours. Si vous programmez en C/C++, vous utilisez peut être gdb pour debugger vos programmes. Une fonctionnalité agréable de gdb est son interface en mode text &amp;#8216;tui&amp;#8217;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/RFE7-FfIcYQ" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:54 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Text-User-Interface-de-gdb</feedburner:origLink></item>
    <item>
      <title>Un man kikoolol</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/9hhNim-iRys/Un-man-kikoolol</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Un-man-kikoolol</guid>
      <description>&lt;p&gt;Si vous êtes intéressé par un man en couleurs, voici un moyen de l&amp;#8217;obtenir.&lt;/p&gt;

&lt;p&gt;Commencez par installer most. Most est un pager assez sympa dans le style de more et less.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;sudo aptitude install most&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Pour faire un simple test.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;man -P most commande&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Si ça vous plaît et que vous comptez le garder voici la marche à suivre.&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;sudo update-alternatives --config pager&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Choisissez most&lt;/p&gt;

&lt;p&gt;Si most vous plaît mais que les couleurs vous insupportent vous pouvez les désactiver en réglant la variable d&amp;#8217;environnement MOST_SWITCHES&amp;lt;br&amp;gt; (dans votre .&lt;em&gt;shrc par exemple)&lt;/em&gt;&lt;/p&gt;
&lt;div class='CodeRay'&gt;
  &lt;div class='code'&gt;&lt;pre&gt;&lt;span class='fu'&gt;export&lt;/span&gt; &lt;span class='iv'&gt;MOST_SWITCHES&lt;/span&gt;=&lt;span class='s'&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;span class='k'&gt;-C&lt;/span&gt;&lt;span class='dl'&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/9hhNim-iRys" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:58 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Un-man-kikoolol</feedburner:origLink></item>
    <item>
      <title>Une signature dans le style de Tron</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/wKnUEtz3B2g/Une-signature-dans-le-style-de-Tron</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Une-signature-dans-le-style-de-Tron</guid>
      <description>&lt;p&gt;Petit tuto pour expliquer comment faire ceci :&lt;br /&gt; (repris d&amp;#8217;un tuto que j&amp;#8217;avais écrit sur Crystal XP)&lt;/p&gt;

&lt;p&gt;&lt;img src='/images/tuto_tron/tuto_tron_11.png' alt='Signature Tron' /&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/wKnUEtz3B2g" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:55 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Une-signature-dans-le-style-de-Tron</feedburner:origLink></item>
    <item>
      <title>Installer et configurer Apache2 sous Debian</title>
      <link>http://feedproxy.google.com/~r/LeBlogDuGeekJoyeux/~3/eqKpLnymUJ4/Installer-et-configurer-Apache2-sous-Debian</link>
      <guid isPermaLink="false">http://blog.happynoff.fr/post/Installer-et-configurer-Apache2-sous-Debian</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Installer apache2&lt;/li&gt;

&lt;li&gt;Configuration basique du serveur&lt;/li&gt;

&lt;li&gt;Gestion des VirtualHosts&lt;/li&gt;
&lt;/ul&gt;&lt;img src="http://feeds.feedburner.com/~r/LeBlogDuGeekJoyeux/~4/eqKpLnymUJ4" height="1" width="1"/&gt;</description>
      <pubDate>Thu, 25 Aug 2011 15:02:57 +0200</pubDate>
    <feedburner:origLink>http://blog.happynoff.fr/post/Installer-et-configurer-Apache2-sous-Debian</feedburner:origLink></item>
  </channel>
</rss>

