<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.menfin.info/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>M'enfin ?!?</title>
  <link>http://blog.menfin.info/</link>
  <description></description>
  <language>fr</language>
  <pubDate>Sat, 19 Jul 2008 12:12:35 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Rails et la sécurité</title>
    <link>http://blog.menfin.info/post/2008/07/18/Rails-et-la-securite</link>
    <guid isPermaLink="false">urn:md5:f46329425400828340823ebc7244d49a</guid>
    <pubDate>Fri, 18 Jul 2008 23:45:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Rails</category>
            
    <description>    &lt;h4&gt;Introduction&lt;/h4&gt;
&lt;p&gt;La sécurité des applications web est souvent un sujet délicat : peu de
temps à y consacrer, mais cela peut avoir des conséquences assez graves. Pas de
panique ! &lt;a href=&quot;http://rubyonrails.com&quot;&gt;Ruby on Rails&lt;/a&gt; est bien armé
et avec un peu de rigueur, on peut se protéger sans trop de difficultés. Nous
allons voir les principaux types d'attaques et comment les éviter.&lt;/p&gt;
&lt;h4&gt;Injections SQL&lt;/h4&gt;
&lt;p&gt;Commençons par un grand classique : &lt;a href=&quot;http://fr.wikipedia.org/wiki/Injection_SQL&quot;&gt;les injections SQL&lt;/a&gt;. Une
injection SQL consiste simplement à envoyer des données non prévues dans une
requête SQL. Prenons comme exemple une application web où les utilisateurs sont
authentifiés de la manière suivante :&lt;/p&gt;
&lt;pre&gt;
@current_user = User.find(:first, :conditions =&amp;gt; &amp;quot;login='#{params[:login]}' AND password='#{params[:password]}'&amp;quot;)
&lt;/pre&gt;
&lt;p&gt;En temps normal, quand Joe s'authentifie, la requête SQL suivante est
exécutée :&lt;/p&gt;
&lt;pre&gt;
SELECT * FROM users WHERE login='Joe' AND password='0521bc575b0ff61daa62494c7ae9c5b6' LIMIT 1;
&lt;/pre&gt;
&lt;p&gt;Mais supposons maintenant que Kevin, un Script Kiddie, passe dans le coin et
décide de mettre &lt;code&gt;&amp;quot;Joe'; --&amp;quot;&lt;/code&gt; dans le champ login. La requête SQL va
alors ressembler à :&lt;/p&gt;
&lt;pre&gt;
SELECT * FROM users WHERE login='Joe'; --' AND password='00000000000000000000000000000000' LIMIT 1;
&lt;/pre&gt;
&lt;p&gt;Kevin a réussi à se faire passer pour Joe sans connaître son mot de
passe !&lt;/p&gt;
&lt;p&gt;Heureusement, Active Record permet de &lt;a href=&quot;http://manuals.rubyonrails.com/read/chapter/43&quot;&gt;nous en protéger assez
facilement&lt;/a&gt;. Pour cela, il suffit d'utiliser les formes échappées comme
cela :&lt;/p&gt;
&lt;pre&gt;
@current_user = User.find(:first, :conditions =&amp;gt; [&amp;quot;login=? AND password=?&amp;quot;, params[:login], params[:password]])
&lt;/pre&gt;
&lt;p&gt;ou de façon équivalente :&lt;/p&gt;
&lt;pre&gt;
@current_user = User.find(:first, :conditions =&amp;gt; {:login =&amp;gt; params[:login], :password =&amp;gt; params[:password]})
&lt;/pre&gt;
&lt;p&gt;Dans les 2 cas, Active Record rajoutera un caractère &lt;code&gt;'\'&lt;/code&gt; devant
chaque apostrophe de façon à éviter les injections SQL.&lt;/p&gt;
&lt;h4&gt;L'authentification et la gestion des droits&lt;/h4&gt;
&lt;p&gt;Pour la grande majorité des projets, l'authentification (et la gestion des
droits qui vont avec) est un passage obligé. Pour cela, il existe un certain
nombre de points importants à respecter comme le chiffrement des mots de passe
stockés en base de données (ce que nous n'avons pas fait dans l'exemple
précédent). Les erreurs sont vite arrivées, aussi je vous recommande d'utiliser
des plugins reconnus comme &lt;a href=&quot;http://agilewebdevelopment.com/plugins/restful_authentication&quot;&gt;Restful
Authentication&lt;/a&gt;, &lt;a href=&quot;http://agilewebdevelopment.com/plugins/openidauthentication&quot;&gt;OpenID
Authentication&lt;/a&gt; et &lt;a href=&quot;http://www.writertopia.com/developers/authorization&quot;&gt;Authorization&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Il ne vous reste plus qu'à faire attention à un dernier détail : mettre
en cache des pages nécessitant une authentification est une mauvaise idée. En
effet, ces pages vont alors être servies par le serveur web sans passer Rails,
et donc sans vérification de l'authentification.&lt;/p&gt;
&lt;h4&gt;Se protéger des données forgées&lt;/h4&gt;
&lt;p&gt;L'étape suivante consiste à bien sécuriser l'accès aux données, aussi bien
en lecture qu'en écriture. En effet, Rails possède quelques raccourcis très
pratiques, mais qui peuvent poser problème quand ils sont mal maîtrisés. Le
plus courant est &lt;a href=&quot;http://manuals.rubyonrails.com/read/chapter/47&quot;&gt;l'affectation de masse&lt;/a&gt;,
technique qui consiste à créer un objet Active Record directement depuis les
paramètres de la requête HTTP. Par exemple, la création d'un compte utilisateur
pourra s'effectuer de la façon suivante :&lt;/p&gt;
&lt;pre&gt;
@user = User.create(params[:user])
&lt;/pre&gt;
&lt;p&gt;Supposons maintenant que la table &lt;code&gt;'users'&lt;/code&gt; comporte un champ
&lt;code&gt;'admin'&lt;/code&gt; qui vaut &lt;code&gt;0&lt;/code&gt; par défaut ou &lt;code&gt;1&lt;/code&gt; pour
les super-utilisateurs. Un utilisateur malveillant pourrait forger la requête
HTTP pour ajouter un paramètre &lt;code&gt;user&lt;a href=&quot;http://blog.menfin.info/post/2008/07/18/admin&quot; title=&quot;admin&quot;&gt;admin&lt;/a&gt;=1&lt;/code&gt; afin de gagner les pouvoirs réservés aux admins. La
première solution pour se protéger de cette attaque consiste à écrire
explicitement quels sont les paramètres autorisés :&lt;/p&gt;
&lt;pre&gt;
@user = User.create(
        :login =&amp;gt; params[:user][:login],
        :email =&amp;gt; params[:user][:email],
        :password =&amp;gt; params[:user][:password],
        :cgu =&amp;gt; params[:user][:cgu])
&lt;/pre&gt;
&lt;p&gt;Mais ceci peut vite devenir pénible quand on commence à avoir des
formulaires un peu conséquents. C'est pourquoi on lui préfère généralement la
deuxième solution : la déclaration dans le modèle de la liste des
attributs qui ne peuvent pas être modifiés. Cette déclaration se fait à l'aide
de la méthode &lt;strong&gt;&lt;code&gt;attr_protected&lt;/code&gt;&lt;/strong&gt; comme
suit :&lt;/p&gt;
&lt;pre&gt;
class User &amp;lt; ActiveRecord::Base
        attr_protected :admin
        ...
end
&lt;/pre&gt;
&lt;p&gt;Nous pouvons de nouveau utiliser l'affectation de masse sans craindre qu'un
utilisateur se fasse passer pour un admin, Rails s'occupe de filtrer les
paramètres.&lt;/p&gt;
&lt;p&gt;Dans le même style, un attaquant peut essayer de &lt;a href=&quot;http://www.therailsway.com/2007/3/26/association-proxies-are-your-friend&quot;&gt;forger
des URL&lt;/a&gt;. Si, par exemple, l'utilisateur authentifié peut supprimer l'item
n°123 qui lui appartient, en appelant l'URL &lt;code&gt;/items/delete/123&lt;/code&gt;,
alors que se passera-t-il s'il appelle la même URL pour l'item n°456 qui ne lui
appartient pas ? La réponse dépend du code de la méthode
&lt;code&gt;delete&lt;/code&gt;. Une implémentation de base pourrait ressembler
à :&lt;/p&gt;
&lt;pre&gt;
class ItemsController &amp;lt; ApplicationController
        def delete
                Item.delete(params[:id])
        end
end
&lt;/pre&gt;
&lt;p&gt;Pour se protéger des URL forgées, on pourrait la transformer en :&lt;/p&gt;
&lt;pre&gt;
class ItemsController &amp;lt; ApplicationController
        def delete
                @item = @current_user.items.find(params[:id])
                @item.delete if @item
        end
end
&lt;/pre&gt;
&lt;p&gt;Ce n'est pas parfait (on pourrait vérifier que c'est bien une requête de
type POST), mais c'est déjà beaucoup mieux.&lt;/p&gt;
&lt;p&gt;Un dernier petit truc pour la route avant de passer à autre chose. Si vous
avez une API pour laquelle vous utilisez la sérialisation XML, il peut être
intéressant de surcharger &lt;code&gt;ActiveRecord#to_xml&lt;/code&gt; pour que le champ
&lt;code&gt;secret_field&lt;/code&gt; n'y apparaisse pas :&lt;/p&gt;
&lt;pre&gt;
class Item &amp;lt; ActiveRecord::Base
        def to_xml(args={})
                super({:except =&amp;gt; [:secret_field]}.merge(args))
        end
end
&lt;/pre&gt;
&lt;h4&gt;Cross-Site Scripting&lt;/h4&gt;
&lt;p&gt;Jusque maintenant, nous avons vu des attaques directes : un utilisateur
essaye de s'en prendre à notre site. Il existe également des attaques plus
pernicieuses que l'on classe sous le nom de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Cross_site_scripting&quot;&gt;Cross-Site Scripting&lt;/a&gt;
(XSS en abrégé). Leur but est de s'en prendre aux utilisateurs de notre site en
glissant des cochonneries sur notre site. Ceci peut aller du spammeur qui
mettra une balise &lt;code&gt;&amp;lt;iframe&amp;gt;&lt;/code&gt; vers son site dans tous les
formulaires qui lui passent sous la main à l'injection de javascript non
maîtrisé.&lt;/p&gt;
&lt;p&gt;Par exemple, quelqu'un crée un item dont la description est la
suivante :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;script&amp;gt;document.location='http://www.programmez.com/';&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Si maintenant un visiteur affiche la description de cet item, il sera
redirigé vers le site www.programmez.com. Vous vous dites que c'est ennuyeux
mais pas bien méchant ? Oui, mais la même technique permet de voler les
cookies et donc les sessions associées. Nous allons donc chercher à nous
protéger de ces failles XSS.&lt;/p&gt;
&lt;p&gt;Pour cela, il est important de faire une distinction entre 2 cas :
est-ce que le champ que vous allez afficher peut contenir des balises HTML ou
non ? Pour afficher le nom d'un item, on sera dans le premier cas, à
savoir pas de balises HTML : on veut juste afficher le nom tel que l'a
rentré son propriétaire. Par contre, on peut souhaiter être plus souple pour la
description de l'item et laisser la possibilité d'avoir un titre (balise
&lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt;), du gras (&lt;code&gt;&amp;lt;b&amp;gt;&lt;/code&gt;) ou de l'italique
(&lt;code&gt;&amp;lt;i&amp;gt;&lt;/code&gt;). Ces 2 cas ne se traitent pas de la même façon. Pour
le premier cas, Rails nous offre un moyen simple de nous en protéger : le
helper &lt;strong&gt;&lt;code&gt;h&lt;/code&gt;&lt;/strong&gt;. En pratique, à chaque fois que l'on
souhaitera afficher le titre d'un item, on procédera de la manière
suivante :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;%=h @item.title %&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Ce &lt;code&gt;h&lt;/code&gt; va convertir les caractères qui pourraient être
interprétés par un navigateur web en l'entité HTML correspondante. Problème
résolu.&lt;/p&gt;
&lt;p&gt;Le deuxième cas est par contre plus difficile à traiter. Vous pouvez être
tenté d'utiliser un moteur de formatage de texte comme &lt;a href=&quot;http://whytheluckystiff.net/ruby/redcloth/&quot;&gt;RedCloth&lt;/a&gt;. Attention, cela ne
suffit pas à filtrer &lt;a href=&quot;http://www.rorsecurity.info/2007/08/20/redcloth-security-thoughts/&quot;&gt;toutes les
attaques&lt;/a&gt; ! Pour votre tranquillité, il vaut mieux utiliser le plugin
&lt;a href=&quot;http://svn.techno-weenie.net/projects/plugins/white_list/&quot;&gt;WhiteList&lt;/a&gt;.
Depuis Rails 2.0, ce plugin fait partie du framework et peut s'utiliser de la
façon suivante :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;%= sanitize @item.description, :tags =&amp;gt; %w(b i h1) %&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Il est possible de déclarer les balises autorisées de manière globale :
je vous renvoie à la &lt;a href=&quot;http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#M000936&quot;&gt;
documentation officielle&lt;/a&gt;. Et pour ceux qui veulent être sûrs de ne pas
oublier d'appel à &lt;code&gt;h&lt;/code&gt; ou à &lt;code&gt;sanitize&lt;/code&gt;, il existe des
moteurs de template alternatifs comme &lt;a href=&quot;http://wiki.rubyonrails.com/rails/pages/Safe+ERB&quot;&gt;Safe ERB&lt;/a&gt; ou &lt;a href=&quot;http://www.kuwata-lab.com/erubis/&quot;&gt;Erubis&lt;/a&gt;. Ces moteurs adoptent l'approche
opposée : ils filtrent par défaut tous les éléments &lt;code&gt;&amp;lt;%=
%&amp;gt;&lt;/code&gt;, charge au développeur d'indiquer explicitement ceux pour lequel
le moteur ne fera pas de filtrage.&lt;/p&gt;
&lt;h4&gt;Cross-Site Request Forgeries&lt;/h4&gt;
&lt;p&gt;Juste avant de finir, je voudrais juste dire un mot sur un dernier type
d'attaques. Les CSRF, abréviation de Cross-Site Request Forgery, sont des
attaques complexes qui visent à forcer l'utilisateur à envoyer une requête HTTP
vers notre site lorsque celui-ci visitera le site de l'attaquant. Je vous
renvoie à &lt;a href=&quot;http://fr.wikipedia.org/wiki/Cross-Site_Request_Forgeries&quot;&gt;wikipedia&lt;/a&gt; si
vous voulez comprendre comment fonctionne ce type d'attaques. Sachez que Rails
vous protège de celles-ci depuis la version 2.0 et qu'il existe un plugin pour
les versions plus anciennes : &lt;a href=&quot;http://svn.techno-weenie.net/projects/plugins/csrf_killer/&quot;&gt;CSRF-killer&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;Nous avons pu voir qu'en prenant quelques bonnes habitudes, on pouvait
développer des applications sûres en Rails. Il reste cependant des sujets que
je n'ai pas abordés comme &lt;a href=&quot;http://www.igvita.com/blog/2006/10/10/securing-your-rails-environment/&quot;&gt;l'administration
de Rails&lt;/a&gt;, &lt;a href=&quot;http://www.rorsecurity.info/2007/03/15/apache-2-file-privileges-and-modules/&quot;&gt;apache&lt;/a&gt;
ou &lt;a href=&quot;http://www.rorsecurity.info/2007/02/25/securing-mysql/&quot;&gt;MySQL&lt;/a&gt;
(&lt;a href=&quot;http://www.rorsecurity.info/2007/02/27/rails%e2%80%99-friends-securing-mysql-continued/&quot;&gt;suite&lt;/a&gt;),
&lt;a href=&quot;http://www.rorsecurity.info/2007/03/27/working-with-files-in-rails/&quot;&gt;la
manipulation des fichiers&lt;/a&gt; ou encore &lt;a href=&quot;http://railscasts.com/episodes/9&quot;&gt;le filtrage des informations sensibles dans
les logs&lt;/a&gt;. Il est également important de se tenir au courant des mises à
jour de sécurité de Rails et des plugins que vous utilisez.&lt;/p&gt;
&lt;p&gt;Je remercie Benoît Sibaud pour sa relecture attentive.&lt;/p&gt;
&lt;h4&gt;Références&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.rorsecurity.info/ruby-on-rails-security-cheatsheet/&quot; title=&quot;http://www.rorsecurity.info/ruby-on-rails-security-cheatsheet/&quot;&gt;http://www.rorsecurity.info/ruby-on...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.quarkruby.com/2007/9/20/ruby-on-rails-security-guide&quot; title=&quot;http://www.quarkruby.com/2007/9/20/ruby-on-rails-security-guide&quot;&gt;http://www.quarkruby.com/2007/9/20/...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.innerewut.de/2008/1/3/24c3-ruby-on-rails-security&quot; title=&quot;http://blog.innerewut.de/2008/1/3/24c3-ruby-on-rails-security&quot;&gt;http://blog.innerewut.de/2008/1/3/2...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.owasp.org/index.php/OWASP_AppSec_FAQ&quot; title=&quot;http://www.owasp.org/index.php/OWASP_AppSec_FAQ&quot;&gt;http://www.owasp.org/index.php/OWAS...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.owasp.org/index.php/Top_10_2007&quot; title=&quot;http://www.owasp.org/index.php/Top_10_2007&quot;&gt;http://www.owasp.org/index.php/Top_...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/07/18/Rails-et-la-securite#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/07/18/Rails-et-la-securite#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/261666</wfw:commentRss>
      </item>
    
  <item>
    <title>LinuxFR.org a dix ans, soirée Firefox 3 et autres joyeusetés</title>
    <link>http://blog.menfin.info/post/2008/06/28/LinuxFRorg-a-dix-ans-soiree-Firefox-3-et-autres-joyeusetes</link>
    <guid isPermaLink="false">urn:md5:71945562a9e80024542cfc2527558dea</guid>
    <pubDate>Sat, 28 Jun 2008 18:00:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Actualités</category>
            
    <description>    &lt;p&gt;Je n'ai pas pour habitude de faire des billets en vrac, mais ce sera
exceptionnellement le cas. Je souhaite en effet vous parler de plusieurs points
qui n'attendront pas :&lt;/p&gt;
&lt;h2&gt;LinuxFR a 10 ans !&lt;/h2&gt;
&lt;p&gt;Hé oui, c'est aujourd'hui, le 28 juin, que &lt;a href=&quot;http://linuxfr.org&quot;&gt;LinuxFR&lt;/a&gt; fête &lt;a href=&quot;https://linuxfr.org/2008/06/28/24276.html&quot;&gt;10 ans de dépêches, journaux et
autres informations autour de Linux et des Logiciels Libres&lt;/a&gt;. J'espère que
LinuxFR pourra continuer à animer la vie de la communauté du Logiciel Libre
pour encore quelques années.&lt;/p&gt;
&lt;h2&gt;Soirée Firefox 3&lt;/h2&gt;
&lt;p&gt;Hier soir avait lieu la soirée Firefox 3. Je dois avouer que j'ai été déçu
par la soirée : peu de monde, pas de musique, l'ambiance n'était pas au
rendez-vous :/ &lt;a href=&quot;http://standblog.org/&quot;&gt;Tristan Nitot&lt;/a&gt; a pris
&lt;a href=&quot;http://www.flickr.com/photos/nitot/sets/72157605857467802/&quot;&gt;des photos
de la soirée&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;RMLL du 1er au 5 juillet&lt;/h2&gt;
&lt;p&gt;La semaine prochaine, ce sera &lt;acronym title=&quot;Rencontre Mondiale du Logiciel Libre&quot;&gt;RMLL&lt;/acronym&gt;. Ca se passe à
Mont-de-Marsan, et j'y serais pour tenir le stand de &lt;a href=&quot;http://rubyfrance.org/&quot;&gt;Ruby France&lt;/a&gt; et donner &lt;a href=&quot;http://2008.rmll.info/10-ans-de-LinuxFR-org.html&quot;&gt;une conférence sur
LinuxFR&lt;/a&gt;. J'espère y croiser des lecteurs de mon blog ;)&lt;/p&gt;
&lt;p&gt;Un gros merci à &lt;a href=&quot;http://www.af83.com&quot;&gt;AF83&lt;/a&gt; qui me laisse y aller
pendant mes jours de boulot.&lt;/p&gt;
&lt;h2&gt;Do You Buzz&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://www.doyoubuzz.com/&quot;&gt;Do You Buzz&lt;/a&gt; est un nouveau service
en ligne pour publier son CV. Chose intéressante, c'est le premier site
développé avec le framework &lt;a href=&quot;http://turb.ulenc.es/&quot;&gt;Turbulences&lt;/a&gt; en
dehors d'AF83.&lt;/p&gt;
&lt;p&gt;Le site est encore en bêta privée, mais il marche déjà très bien et
l'interface est vraiment agréable à utiliser. J'en sais quelque chose, car je
fais parti des premiers beta-testeurs (mon CV est visible sur &lt;a href=&quot;http://www.doyoubuzz.com/bruno-michel&quot; title=&quot;http://www.doyoubuzz.com/bruno-michel&quot;&gt;http://www.doyoubuzz.com/bruno-mich...&lt;/a&gt;).&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/06/28/LinuxFRorg-a-dix-ans-soiree-Firefox-3-et-autres-joyeusetes#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/06/28/LinuxFRorg-a-dix-ans-soiree-Firefox-3-et-autres-joyeusetes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/255112</wfw:commentRss>
      </item>
    
  <item>
    <title>Github theme for Vim</title>
    <link>http://blog.menfin.info/post/2008/05/30/Github-theme-for-Vim</link>
    <guid isPermaLink="false">urn:md5:c1b1c214e2e3f698108b34dcdcb18564</guid>
    <pubDate>Fri, 30 May 2008 02:14:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Vim</category>
            
    <description>    &lt;p&gt;Scott Becker has made a &lt;a href=&quot;http://synthesis.sbecker.net/articles/2008/05/28/github-theme-for-textmate&quot;&gt;Github
theme for Textmate&lt;/a&gt;, so I've decided to made a Github theme for ViM.&lt;/p&gt;
&lt;p&gt;It's available on github: &lt;a href=&quot;http://github.com/nono/github_vim_theme/tree/master&quot;&gt;Github Vim Theme&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://blog.menfin.info/public/Github_theme_for_vim.png&quot;&gt;&lt;img src=&quot;http://blog.menfin.info/public/./.Github_theme_for_vim_m.jpg&quot; alt=&quot;Screenshot of the Github theme for Vim&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/05/30/Github-theme-for-Vim#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/05/30/Github-theme-for-Vim#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/245399</wfw:commentRss>
      </item>
    
  <item>
    <title>Outils pour tracer des graphes</title>
    <link>http://blog.menfin.info/post/2008/05/10/Outils-pour-tracer-des-graphes</link>
    <guid isPermaLink="false">urn:md5:07c01f42ce346a64ea32b7120f6ac5aa</guid>
    <pubDate>Sat, 10 May 2008 01:30:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Divers</category>
            
    <description>    &lt;p&gt;Je cherche depuis un certain temps un outil pour tracer des graphes. En
général, j'utilise la suite &lt;a href=&quot;http://www.graphviz.org/&quot;&gt;Graphviz&lt;/a&gt;
pour faire cela. Le principe est relativement simple : on décrit le graphe
dans un fichier au format dot, puis on utilise un des 5 outils (dot, neato,
fdp, circo et twopi) pour générer une image. Cela marche plutôt bien, mais les
graphes générés sont sobres, pour ne pas dire moches (voir la &lt;a href=&quot;http://www.graphviz.org/Gallery.php&quot;&gt;galerie&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Je connaissais également &lt;a href=&quot;http://www.opte.org/maps/&quot;&gt;LGL&lt;/a&gt;, mais
il est surtout adapté pour tracer des graphes avec beaucoup de noeuds et/ou
arêtes. Il existe aussi des outils pour tracer des diagrammes (genre &lt;a href=&quot;http://live.gnome.org/Dia&quot;&gt;Dia&lt;/a&gt;) qui peuvent être utilisés pour tracer des
graphes, mais je préfère de loin l'approche de graphviz.&lt;/p&gt;
&lt;p&gt;Et récemment, je suis tombé sur &lt;a href=&quot;http://nodebox.net/code/index.php/Graphing&quot;&gt;Nodebox&lt;/a&gt; : le choc, des
jolis graphes ! Malheureusement, Nodebox fonctionne sous MacOSX. Il existe
bien &lt;a href=&quot;http://dev.nodebox.net/wiki/Qt&quot;&gt;un port pour GNU/Linux sous
QT&lt;/a&gt;, mais je n'arrive pas à utiliser le module Graph avec celui-ci :/
&lt;a href=&quot;http://shoebox.sollec.org/&quot;&gt;Shoebox&lt;/a&gt; est une réécriture de nodebox
(sous Cairo ce coup-ci), mais j'ai l'impression qu'il n'est pas encore assez
avancé pour faire quelque chose d'utile avec.&lt;/p&gt;
&lt;p&gt;Toujours à partir de Nodebox, j'ai découvert &lt;a href=&quot;https://networkx.lanl.gov/wiki&quot;&gt;NetworkX&lt;/a&gt;, mais, si j'ai bien compris,
c'est une surcouche à Graphviz. &lt;a href=&quot;https://networkx.lanl.gov/wiki/gallery&quot;&gt;Les exemples de la gallerie&lt;/a&gt; me
semblent quand même plus jolis que ceux de GraphViz. Est-ce que l'auteur de
NetworkX a passé du temps pour faire ces exemples ou est-ce que je me suis
trompé sur NetworkX ? Je ne saurais dire, mais cela vaudrait sûrement le
coup que j'y rejette un coup d'oeil à l'occasion.&lt;/p&gt;
&lt;p&gt;Enfin, la solution viendra peut être du Javascript. Le &lt;a href=&quot;http://blog.thejit.org/?page_id=14&quot;&gt;JavaScript Information Visualization
Toolkit (JIT)&lt;/a&gt; est une bibliothèque pour tracer des graphes. Ce n'est pas
aussi simple que GraphViz et, pour le moment, limité aux arbres, mais cela
pourrait devenir une solution intéressante. Le projet &lt;a href=&quot;http://dev.jquery.com/~john/processing.js/&quot;&gt;Processing.js&lt;/a&gt; montre que l'on
peut utiliser la balise Canvas pour faire un rendu qui n'a rien à envier au
Desktop. Alors qui sait, peut être que JIT pourra vraiment devenir la solution
pour tracer de jolis graphes même si l'utilisation de javascript peut
surprendre pour cela...&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt; : je viens de découvrir un nouveau
venu : &lt;a href=&quot;http://www.ubietylab.net/ubigraph/index.html&quot;&gt;Ubigraph&lt;/a&gt;. Les démos sont
impressionnantes, mais le serveur n'est malheureusement pas sous une licence
libre.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/05/10/Outils-pour-tracer-des-graphes#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/05/10/Outils-pour-tracer-des-graphes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/237524</wfw:commentRss>
      </item>
    
  <item>
    <title>Annonces RailsConf 2008</title>
    <link>http://blog.menfin.info/post/2008/05/08/Annonces-RailsConf-2008</link>
    <guid isPermaLink="false">urn:md5:4a0073f36d2fdbcfd3b1c144164979a3</guid>
    <pubDate>Thu, 08 May 2008 17:37:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Rails</category>
            
    <description>    &lt;p&gt;La &lt;a href=&quot;http://en.oreilly.com/rails2008/&quot;&gt;RailsConf 2008&lt;/a&gt;, la grande
messe annuelle des railers, aura lieu du 29 mai au 6 juin. A cette occasion, un
certain nombre d'annonces devrait être faites. Bien entendu, la plus attendue
sera celle de &lt;a href=&quot;http://rubyonrails.com&quot;&gt;Ruby on Rails&lt;/a&gt; 2.1. Mais
c'est loin d'être la seule. Coté framework, on devrait également entendre
parler de &lt;a href=&quot;http://www.merbivore.com/&quot;&gt;Merb&lt;/a&gt; dont la version 1.0
devrait être annoncée par ce RailsConf si tout va bien.&lt;/p&gt;
&lt;p&gt;On attend également beaucoup de choses pour les interpréteurs Ruby :
arrivée du tout nouveau &lt;a href=&quot;http://ruby.gemstone.com/&quot;&gt;MagLev&lt;/a&gt;,
&lt;a href=&quot;http://rubini.us/&quot;&gt;Rubinius&lt;/a&gt; faisant tourner des applis Rails,
&lt;a href=&quot;http://jruby.codehaus.org/&quot;&gt;JRuby&lt;/a&gt; plus rapide que l'interpréteur
Ruby officiel pour les applis Rails ? Pour le moment, ce ne sont que des
objectifs (ou au mieux des rumeurs), mais on sent une certaine agitation de ce
coté-là.&lt;/p&gt;
&lt;p&gt;Enfin, la mode est au moteur de réseaux sociaux, et le RailsConf sera
l'endroit pour en parler, mais ceci fera l'objet d'un autre post sur ce blog
;-) Bref, plein de bonnes choses en vue qui me feront regretter de ne pas
pouvoir y aller...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/05/08/Annonces-RailsConf-2008#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/05/08/Annonces-RailsConf-2008#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/237155</wfw:commentRss>
      </item>
    
  <item>
    <title>Dossier Ruby on Rails dans programmez</title>
    <link>http://blog.menfin.info/post/2008/04/02/Dossier-Ruby-on-Rails-dans-programmez</link>
    <guid isPermaLink="false">urn:md5:4d95c8f36a0acb1bb8007add32939f4e</guid>
    <pubDate>Wed, 02 Apr 2008 01:23:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Ruby</category>
            
    <description>    &lt;p&gt;La revue &lt;a href=&quot;http://www.programmez.com&quot;&gt;Programmez&lt;/a&gt; sort un dossier
sur &lt;a href=&quot;http://www.rubyonrails.com&quot;&gt;Ruby on Rails&lt;/a&gt;. La &lt;a href=&quot;http://programmez.com/magazine_articles.php?id_article=1031&amp;amp;&amp;amp;titre=RUBY%20on%20Rails%20(1re%20partie)&quot;&gt;
première partie de ce dossier&lt;/a&gt; est sortie ce mois-ci, et la suite sera pour
le mois prochain. Si je vous parle de cela, c'est parce que j'ai l'honneur de
participer à ce dossier : j'ai écrit le dossier sur Rails et la sécurité.
Vous n'aurez plus d'excuses pour ne pas suivre les règles de bases pour
s'assurer de la sécurité de son appli rails.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt; : l'article en question est maintenant
disponible sur &lt;a href=&quot;http://blog.menfin.info/post/2008/07/18/Rails-et-la-securite&quot; title=&quot;http://blog.menfin.info/post/2008/07/18/Rails-et-la-securite&quot;&gt;http://blog.menfin.info/post/2008/0...&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/04/02/Dossier-Ruby-on-Rails-dans-programmez#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/04/02/Dossier-Ruby-on-Rails-dans-programmez#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/226212</wfw:commentRss>
      </item>
    
  <item>
    <title>Afficher la branche Git courante dans le prompt de ZSH</title>
    <link>http://blog.menfin.info/post/2008/03/15/Afficher-la-branche-Git-courante-dans-le-prompt-de-ZSH</link>
    <guid isPermaLink="false">urn:md5:fdebc81014a46a5ce917b23b4991208f</guid>
    <pubDate>Sat, 15 Mar 2008 20:12:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Git</category>
            
    <description>    &lt;p&gt;Je suis tombé sur un tips bien sympa : &lt;a href=&quot;http://www.simplisticcomplexity.com/2008/03/13/show-your-git-branch-name-in-your-prompt/&quot;&gt;
Show Your GIT Branch Name In Your Prompt&lt;/a&gt;. Il y est expliqué comment avoir
la branche &lt;a href=&quot;http://git.or.cz/&quot;&gt;Git&lt;/a&gt; en cours dans son prompt avec
&lt;a href=&quot;http://www.gnu.org/software/bash/&quot;&gt;Bash&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;J'ai adapaté ca pour &lt;a href=&quot;http://www.zsh.org/&quot;&gt;zsh&lt;/a&gt;. Voici un extrait
de mon &lt;code&gt;zshrc&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;
export PS1='%~ $(git_branch)%# '

function git_branch {
  git branch --no-color 2&amp;gt; /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}

setopt PROMPT_SUBST
&lt;/pre&gt;
&lt;p&gt;La seule difficulté fût de se rendre compte qu'il fallait activer une option
pour que ca marche, et de savoir quelle était cette option
(&lt;code&gt;PROMPT_SUBST&lt;/code&gt; en l'occurence).&lt;/p&gt;
&lt;p&gt;Ainsi que je suis sous un répertoire normal, j'ai un prompt de la forme
&lt;code&gt;~/Desktop %&lt;/code&gt; , et quand je suis dans un répertoire versionné sous
Git, ca donne : &lt;code&gt;~/mon_projet (ma_branche) %&lt;/code&gt; . Ce n'est pas
grand chose, mais comme il paraît que c'est une bonne pratique de faire des
branches sous Git, autant avoir en permance le nom de la branche courante sous
les yeux.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS&lt;/strong&gt; : j'ai des invitations pour &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; si ca intéresse des gens.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/03/15/Afficher-la-branche-Git-courante-dans-le-prompt-de-ZSH#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/03/15/Afficher-la-branche-Git-courante-dans-le-prompt-de-ZSH#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/221062</wfw:commentRss>
      </item>
    
  <item>
    <title>4ème apéro Ruby</title>
    <link>http://blog.menfin.info/post/2008/02/17/4eme-apero-Ruby</link>
    <guid isPermaLink="false">urn:md5:3df909a6fde455e54d6e73cdb9567ce6</guid>
    <pubDate>Sun, 17 Feb 2008 15:53:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Ruby</category>
            
    <description>    &lt;p&gt;L'association &lt;a href=&quot;http://www.rubyfrance.org/&quot; hreflang=&quot;fr&quot;&gt;Ruby
France&lt;/a&gt; organise pour la quatrième fois un apéro Ruby à &lt;a href=&quot;http://lacantine.org&quot; hreflang=&quot;fr&quot;&gt;la cantine&lt;/a&gt;. Ce sera l'occasion de
discuter autour d'un verre de Ruby et de découvrir la cantine. Il devrait
notamment y avoir une présentation de Ruby 1.9 et des lightning talks.&lt;/p&gt;
&lt;p&gt;J'y serais et vous ?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mise à jour&lt;/strong&gt; : j'ai oublié le lien vers &lt;a href=&quot;http://rubyfrance.org/articles/2008/02/17/quatrime-apro-ruby-de-paris-rb---ruby-france/&quot; hreflang=&quot;fr&quot;&gt;l'annonce officielle&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/02/17/4eme-apero-Ruby#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/02/17/4eme-apero-Ruby#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/210189</wfw:commentRss>
      </item>
    
  <item>
    <title>Portrait of a N00b</title>
    <link>http://blog.menfin.info/post/2008/02/12/Portrait-of-a-N00b</link>
    <guid isPermaLink="false">urn:md5:0e9361c7cab796a7c882a1facd5b0cad</guid>
    <pubDate>Tue, 12 Feb 2008 01:02:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Divers</category>
            
    <description>    &lt;p&gt;Steve Yegge, un blogger influent qui travaille chez Google, a posté un
article intitulé « &lt;a href=&quot;http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&quot;&gt;Portrait of a
N00b&lt;/a&gt; ». Comme à son habitude, c'est un très long post où il explique les
différences dans la manière de coder (et commenter son code) entre un
développeur peu expérimenté et un développeur avec 20 ans d'expérience.&lt;/p&gt;
&lt;p&gt;S'en suit une digression très intéressante entre langages à typage statique
(Ocaml, Haskell), langages à typage dynamique (Perl, Python, Ruby), et les
langages classiques (C++, Java) à typage statique mais qui vous laisse tricher
avec les types. On y trouve quelques perles :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If static types are comments, then I think we can conclude that people who
rely too much on static types, people who really love the static modeling
process, are n00bs.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;You can write C++ like straight C code if you like, using buffers and
pointers and nary a user-defined type to be found. Or you can spend weeks
agonizing over template metaprogramming with your peers, trying to force the
type system to do something it's just not powerful enough to express.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Perl, Python and Ruby fail to attract many Java and C++ programmers because,
well, they force you to get stuff done.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mais le plus simple reste d'aller lire l'original : &lt;a href=&quot;http://steve-yegge.blogspot.com/2008/02/portrait-of-n00b.html&quot;&gt;Portrait of a
N00b&lt;/a&gt;. C'est long, mais ca en vaut largement la lecture. Et si vous avez
encore du temps, les autres articles sont aussi des lectures recommandées.&lt;/p&gt;
&lt;p&gt;Ai-je précisé que je me retrouve plus dans la peau du dév expérimenté que du
N00b, même si c'est un prétentieux, vu que je suis encore vraiment loin d'avoir
20 ans d'expérience ?&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/02/12/Portrait-of-a-N00b#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/02/12/Portrait-of-a-N00b#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/208206</wfw:commentRss>
      </item>
    
  <item>
    <title>Nouveaux tips pour vim</title>
    <link>http://blog.menfin.info/post/2008/01/22/Nouveaux-tips-pour-vim</link>
    <guid isPermaLink="false">urn:md5:fdb3036a94159eaa9c19fa4fbaf81db9</guid>
    <pubDate>Tue, 22 Jan 2008 01:23:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
            
    <description>    &lt;p&gt;Voici une nouvelle fournée de tips pour Vim. Pour les retardataires, la
première série est toujours disponible &lt;a href=&quot;http://blog.menfin.info/post/2007/11/18/Tips-pour-Vim&quot;&gt;par là&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CTRL+v&lt;/code&gt; reste une valeur sûre : ca active la sélection
rectangulaire. Suivie de &lt;code&gt;I&lt;/code&gt;, ca permet d'insérer un même texte sur
plusieurs lignes. Au contraire, avec &lt;code&gt;x&lt;/code&gt;, on peut supprimer une
colonne.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;:Man&lt;/code&gt; permet d'afficher une page de man directement dans Vim
(avec la coloration syntaxique) ;&lt;/li&gt;
&lt;li&gt;j'ai rajouté la ligne suivante dans mon &lt;code&gt;vimrc&lt;/code&gt; pour pouvoir
insérer facilement des Lorem ipsum :&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
iab lorem Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
&lt;/pre&gt;
&lt;p&gt;Voilà, c'est tout pour aujourd'hui.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2008/01/22/Nouveaux-tips-pour-vim#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2008/01/22/Nouveaux-tips-pour-vim#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/199739</wfw:commentRss>
      </item>
    
  <item>
    <title>J'y serai</title>
    <link>http://blog.menfin.info/post/2007/12/04/Jy-serai</link>
    <guid isPermaLink="false">urn:md5:473137e10171398180bed81a5604b24e</guid>
    <pubDate>Tue, 04 Dec 2007 00:31:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Ruby</category>
            
    <description>    &lt;p&gt;&lt;a href=&quot;http://paris.onrails.info/&quot;&gt;&lt;img alt=&quot;Paris on Rails&quot; src=&quot;http://blog.menfin.info/public/paris_on_rails.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/12/04/Jy-serai#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/12/04/Jy-serai#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/182456</wfw:commentRss>
      </item>
    
  <item>
    <title>Mercurial sur mon MyBook</title>
    <link>http://blog.menfin.info/post/2007/12/01/Mercurial-sur-mon-MyBook</link>
    <guid isPermaLink="false">urn:md5:e73f3bdb79b453df38ef50e45596b68a</guid>
    <pubDate>Sat, 01 Dec 2007 23:10:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>MyBook</category>
            
    <description>    &lt;p&gt;J'ai installé &lt;a href=&quot;http://www.selenic.com/mercurial/&quot;&gt;mercurial&lt;/a&gt; sur
mon MyBook. Ce n'est pas très compliqué, mais voici quand même la méthode que
j'ai utilisée pour ceux qui n'ont pas envie de chercher. La première chose à
faire, c'est se connecter en ssh (si sshd n'est activé, vous pouvez le faire
grâce à &lt;a href=&quot;http://martin.hinner.info/mybook/sshaccess.php&quot;&gt;la méthode de
Martin Hinner&lt;/a&gt;). Ensuite, comme mercurial est en &lt;a href=&quot;http://www.python.org/&quot;&gt;Python&lt;/a&gt;, il faut installer Python :&lt;/p&gt;
&lt;pre&gt;
$ cd /tmp
$ wget http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2
$ tar xvjf Python-2.5.1.tar.bz2
$ cd Python-2.5.1
$ ./configure --disable-ipv6 --disable-shared --with-cxx=no --with-threads
$ make
$ sudo make install
&lt;/pre&gt;
&lt;p&gt;Puis, on peut passer à l'install de mercurial proprement dit :&lt;/p&gt;
&lt;pre&gt;
$ cd /tmp
$ wget http://www.selenic.com/mercurial/release/mercurial-0.9.5.tar.gz
$ tar xvzf mercurial-0.9.5.tar.gz
$ cd mercurial-0.9.5
$ make
$ sudo make install-bin
&lt;/pre&gt;
&lt;p&gt;Un petit &lt;code&gt;hg -v&lt;/code&gt; pour tester, et c'est déjà fini.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/12/01/Mercurial-sur-mon-MyBook#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/12/01/Mercurial-sur-mon-MyBook#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/181003</wfw:commentRss>
      </item>
    
  <item>
    <title>IRB, un outil à (re)découvrir</title>
    <link>http://blog.menfin.info/post/2007/12/01/IRB-un-outil-a-redecouvrir2</link>
    <guid isPermaLink="false">urn:md5:6d597e0c813fecd8fbe5deed15da6f1f</guid>
    <pubDate>Sat, 01 Dec 2007 00:33:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Ruby</category>
            
    <description>    IRB est un outil génial pour tester rapidement un truc en &lt;a href=&quot;http://www.ruby-lang.org/fr/&quot;&gt;Ruby&lt;/a&gt;. C'est une sorte d'interpréteur Ruby
qui fonctionne comme un shell : vous tapez une ligne de Ruby, irb
l'interprête et vous donne le résultat, vous tapez une autre ligne, irb
l'interprête en tenant compte de la première ligne, et ainsi de suite. Voici
par exemple ce que cela donne (avec en gras, ce que j'ai tapé) :
&lt;pre&gt;
&amp;gt;&amp;gt; &lt;b&gt;titi = 2 + 3&lt;/b&gt;&lt;br /&gt;
&amp;gt; 5&lt;br /&gt;
&amp;gt;&amp;gt; &lt;b&gt;toto = titi * 4&lt;/b&gt;&lt;br /&gt;
&amp;gt; 20
&lt;/pre&gt;
Pour ceux qui veulent en savoir plus, je recommande de lire &lt;a href=&quot;http://poignantguide.net/ruby/expansion-pak-1.html&quot;&gt;le chapitre consacré à
IRB&lt;/a&gt; dans &lt;a href=&quot;http://fr.poignantguide.net/&quot;&gt;Le Guide (Poignant) de
Why's vers Ruby&lt;/a&gt; et d'essayer ca dans &lt;a href=&quot;http://tryruby.hobix.com/&quot;&gt;Try Ruby&lt;/a&gt; qui est, en gros, un IRB dans votre
navigateur web. Il est possible de configurer IRB via le fichier
&lt;tt&gt;$HOME/.irbrc&lt;/tt&gt; : changer le prompt, charger des fichiers, activer
l'auto-complétion, etc. &lt;a href=&quot;http://quotedprintable.com/2007/9/13/my-irbrc&quot;&gt;Comme&lt;/a&gt; &lt;a href=&quot;http://drnicwilliams.com/2006/10/12/my-irbrc-for-consoleirb/&quot;&gt;d'autres&lt;/a&gt;
&lt;a href=&quot;http://redhanded.hobix.com/inspect/stickItInYourIrbrcMethodfinder.html&quot;&gt;personnes&lt;/a&gt;
&lt;a href=&quot;http://blog.nicksieger.com/articles/2006/05/30/irbrc-on-windows&quot;&gt;l'ont&lt;/a&gt;
&lt;a href=&quot;http://ruby.tie-rack.org/3/my-irbrc/&quot;&gt;fait&lt;/a&gt; &lt;a href=&quot;http://errtheblog.com/post/26&quot;&gt;avant&lt;/a&gt; &lt;a href=&quot;http://romeda.org/blog/2006/11/irbrc.html&quot;&gt;moi&lt;/a&gt;, je poste mon fichier de
conf &lt;tt&gt;.irbrc&lt;/tt&gt; pour que chacun puisse s'en inspirer (et aussi pour le
retrouver plus facilement quand je ne suis pas chez moi ;-)
&lt;pre&gt;
  &lt;span class=&quot;Type&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;Special&quot;&gt;&amp;quot;yaml&amp;quot;&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;Special&quot;&gt;&amp;quot;irb/completion&amp;quot;&lt;/span&gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;IRB&lt;/span&gt;.conf[&lt;span class=&quot;Special&quot;&gt;:USE_REALINE&lt;/span&gt;] = &lt;span class=&quot;Special&quot;&gt;true&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;IRB&lt;/span&gt;.conf[&lt;span class=&quot;Special&quot;&gt;:PROMPT_MODE&lt;/span&gt;] = &lt;span class=&quot;Special&quot;&gt;:SIMPLE&lt;/span&gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;span class=&quot;Comment&quot;&gt;# History with readline&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;HISTFILE&lt;/span&gt; = &lt;span class=&quot;Special&quot;&gt;&amp;quot;~/.irb.hist&amp;quot;&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;MAXHISTSIZE&lt;/span&gt; = &lt;span class=&quot;Special&quot;&gt;100&lt;/span&gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;span class=&quot;Comment&quot;&gt;# what? (gem install what_methods)&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;Special&quot;&gt;&amp;quot;what_methods&amp;quot;&lt;/span&gt;&lt;br /&gt;
  &lt;br /&gt;
  &lt;span class=&quot;Comment&quot;&gt;# Wirble (gem install wirble)&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;Special&quot;&gt;&amp;quot;wirble&amp;quot;&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;Wirble&lt;/span&gt;.init&lt;br /&gt;
  &lt;span class=&quot;Type&quot;&gt;Wirble&lt;/span&gt;.colorize&lt;br /&gt;
  &lt;br /&gt;
  &lt;span class=&quot;Comment&quot;&gt;# Just for Rails...&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Statement&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;Identifier&quot;&gt;ENV&lt;/span&gt;[&lt;span class=&quot;Special&quot;&gt;&amp;quot;RAILS_ENV&amp;quot;&lt;/span&gt;]&lt;br /&gt;
    &lt;span class=&quot;Type&quot;&gt;IRB&lt;/span&gt;.conf[&lt;span class=&quot;Special&quot;&gt;:IRB_RC&lt;/span&gt;] = &lt;span class=&quot;Type&quot;&gt;Proc&lt;/span&gt;.new &lt;span class=&quot;Statement&quot;&gt;do&lt;/span&gt;&lt;br /&gt;
      &lt;span class=&quot;Type&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;Type&quot;&gt;Base&lt;/span&gt;.logger = &lt;span class=&quot;Type&quot;&gt;Logger&lt;/span&gt;.new(&lt;span class=&quot;Identifier&quot;&gt;STDOUT&lt;/span&gt;)&lt;br /&gt;
      &lt;span class=&quot;Type&quot;&gt;ActiveRecord&lt;/span&gt;::&lt;span class=&quot;Type&quot;&gt;Base&lt;/span&gt;.instance_eval { &lt;span class=&quot;Type&quot;&gt;alias&lt;/span&gt; &lt;span class=&quot;Special&quot;&gt;:[] :find&lt;/span&gt; }&lt;br /&gt;
    &lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;&lt;br /&gt;
  &lt;span class=&quot;Statement&quot;&gt;end&lt;/span&gt;
&lt;/pre&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/12/01/IRB-un-outil-a-redecouvrir2#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/12/01/IRB-un-outil-a-redecouvrir2#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/180769</wfw:commentRss>
      </item>
    
  <item>
    <title>Nouveau disque dur : MyBook World Edition</title>
    <link>http://blog.menfin.info/post/2007/11/26/Nouveau-disque-dur-%3A-MyBook-World-Edition</link>
    <guid isPermaLink="false">urn:md5:e3e459e49dc870359a95c39fa79bccbd</guid>
    <pubDate>Mon, 26 Nov 2007 01:42:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>MyBook</category>
            
    <description>    &lt;p&gt;Je viens de m'acheter un disque dur externe Western Digital MyBook World
Edition. La bête doit principalement me servir pour mes sauvegardes, mais avec
ses 500 Go, je devrais avoir de la place pour d'autres choses. J'ai choisi ce
modèle car je voulais un disque dur branché sur de l'ethernet, pas en usb, et
qu'en plus j'avais lu sur &lt;a href=&quot;http://jeromeandrieux.blogspot.com/2007/06/nastty-convi-wd-mybook.html&quot; title=&quot;http://jeromeandrieux.blogspot.com/2007/06/nastty-convi-wd-mybook.html&quot;&gt;http://jeromeandrieux.blogspot.com/...&lt;/a&gt;
qu'il avait le bon goût de tourner sous linux (les sources du firmware sous
licence GPL sont disponibles sur &lt;a href=&quot;http://support.wdc.com/download/index.asp?cxml=n&amp;amp;pid=30&amp;amp;swid=64&quot; title=&quot;http://support.wdc.com/download/index.asp?cxml=n&amp;amp;pid=30&amp;amp;swid=64&quot;&gt;
http://support.wdc.com/download/ind...&lt;/a&gt;).&lt;/p&gt;
&lt;h4&gt;Ce que j'ai déjà fait&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;le brancher&lt;/li&gt;
&lt;li&gt;aller sur l'interface web : http://admin:123456@&amp;lt;l'adresse IP du
Mybook&amp;gt;&lt;/li&gt;
&lt;li&gt;rajouter un utilisateur sur cette interface&lt;/li&gt;
&lt;li&gt;activer l'accès ssh grâce à &lt;a href=&quot;http://martin.hinner.info/mybook/sshaccess.php&quot;&gt;la méthode de Martin
Hinner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;se logger en ssh dessus avec l'utilisateur créé précédement&lt;/li&gt;
&lt;li&gt;désactiver mionet toujours grâce à &lt;a href=&quot;http://blog.menfin.info/post/2007/11/26/Martin%20Hinner&quot;&gt;http://martin.hinner.info/mybook/disable_mionet.php&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;faire joujou avec l'interface web&lt;/li&gt;
&lt;li&gt;et finalement commencer mes sauvegardes à la main (à coups de scp)&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Ce qu'il reste à faire&lt;/h4&gt;
&lt;p&gt;Visiblement, il est possible de faire des choses bien sympathiques comme
installer &lt;a href=&quot;http://blog.menfin.info/post/2007/11/26/vsftpd&quot;&gt;http://vsftpd.beasts.org/&lt;/a&gt; (un serveur FTP bien
secure), &lt;a href=&quot;http://blog.menfin.info/post/2007/11/26/rsync&quot;&gt;http://samba.anu.edu.au/rsync/&lt;/a&gt; ou encore &lt;a href=&quot;http://blog.menfin.info/post/2007/11/26/PHP&quot;&gt;http://php.net&lt;/a&gt; (en réutilisant le lighttpd de l'interface web)
dessus :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://martin.hinner.info/mybook/packages.php&quot; title=&quot;http://martin.hinner.info/mybook/packages.php&quot;&gt;http://martin.hinner.info/mybook/pa...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mybookworld.wikidot.com/hacks-and-howto&quot; title=&quot;http://mybookworld.wikidot.com/hacks-and-howto&quot;&gt;http://mybookworld.wikidot.com/hack...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://chayden.dyndns.info/info/mybookworld:top&quot; title=&quot;http://chayden.dyndns.info/info/mybookworld:top&quot;&gt;http://chayden.dyndns.info/info/myb...&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.welped.com/2007/08/29/hacking-the-mybook-world-edition-into-a-php-powered-web-server/&quot; title=&quot;http://www.welped.com/2007/08/29/hacking-the-mybook-world-edition-into-a-php-powered-web-server/&quot;&gt;
http://www.welped.com/2007/08/29/ha...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Il est également possible de mettre en veille le disque dur d'après &lt;a href=&quot;http://kyyhkynen.net/stuff/mybook/&quot; title=&quot;http://kyyhkynen.net/stuff/mybook/&quot;&gt;http://kyyhkynen.net/stuff/mybook/&lt;/a&gt;.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/11/26/Nouveau-disque-dur-%3A-MyBook-World-Edition#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/11/26/Nouveau-disque-dur-%3A-MyBook-World-Edition#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/179106</wfw:commentRss>
      </item>
    
  <item>
    <title>Tips pour Vim</title>
    <link>http://blog.menfin.info/post/2007/11/18/Tips-pour-Vim</link>
    <guid isPermaLink="false">urn:md5:0154fbb47a7c20541e03fb5ee2a5e7e5</guid>
    <pubDate>Sun, 18 Nov 2007 02:10:00 +0100</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Vim</category>
            
    <description>    &lt;p&gt;Voici quelques trucs pour ViM que j'ai utilisé aujourd'hui :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mettre &lt;code&gt;au BufRead,BufNewFile /etc/apache/** setf apache2&lt;/code&gt; dans
le fichier &lt;code&gt;$HOME/.vim/ftdetect/apache.vim&lt;/code&gt; pour que les fichiers
&lt;code&gt;/etc/apache2&lt;/code&gt; soient bien reconnus comme des fichiers de conf
d'apache (pour la coloration syntaxique) ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%&lt;/code&gt; pour sauter d'une parenthèse ouvrante à la parenthèse
fermante qui lui correspond (et vice-versa) : c'est un déplacement
classique dans ViM, mais ca fait toujours plaisir quand on a des dizaines de
parenthèses qui s'ouvrent et se ferment dans tous les sens ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;248|&lt;/code&gt; permet de se déplacer au 248ème caractère de la ligne
courante ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;gg247&amp;lt;barre d'esspacement&amp;gt;&lt;/code&gt; permet de se déplacer au
248ème caractère du fichier (en fait, ca permet de se placer sur le premier
caractère, puis d'avancer 247 fois d'un caractère).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bref, rien d'extraordinaire, mais je suis bien malheureux quand je me
retrouve sous un autre éditeur et que je ne peux plus utiliser ces petits
trucs.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/11/18/Tips-pour-Vim#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/11/18/Tips-pour-Vim#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/176421</wfw:commentRss>
      </item>
    
  <item>
    <title>Ce qui me manque sous Mac OSX</title>
    <link>http://blog.menfin.info/post/2007/10/23/Ce-qui-me-manque-sous-Mac-OSX</link>
    <guid isPermaLink="false">urn:md5:3127b9a19b74d9ac00c313859128c7bd</guid>
    <pubDate>Tue, 23 Oct 2007 00:34:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>OSX</category>
            
    <description>    &lt;p&gt;J'utilise GNU/Linux depuis plusieurs années, mais depuis quelques mois, je
suis sous Mac OSX au boulot. Dans l'ensemble, je dois avouer que c'est très
joli et facile à utiliser. Mais sur certains points, j'ai trouvé Mac OSX très
mal foutu par rapport à ce que l'on peut trouver sous GNU/Linux. Voici une
petite liste des trucs qui m'ont le plus géné (et qui me gênent
encore) :&lt;/p&gt;
&lt;h4&gt;#1 - Le clavier&lt;/h4&gt;
&lt;p&gt;Le clavier de mon mac m'a longtemps dérouté, et encore maintenant, je ne
sais pas comment se nomme toutes les touches. Et faire certains caractères est
mission impossible si personne ne vous aide la première fois : faut savoir
que pour faire un pipe |, il faut une combinaison de 3 touches dont la lettre
l. C'est pas marqué sur le clavier, et c'est vraiment pas intuitif.&lt;/p&gt;
&lt;h4&gt;#2 - L'absence de bureaux virtuels&lt;/h4&gt;
&lt;p&gt;Par défaut, il n'y a pas de bureaux virtuels sous Mac OSX. Il parait qu'on
peut installer des softwares pour faire ca, mais je n'ai pas essayé. Est-ce
qu'Apple aurait peur d'être poursuivi à cause du brevet sur les bureaux
virtuels &lt;sup&gt;[&lt;a href=&quot;http://blog.menfin.info/post/2007/10/23/#pnote-166585-1&quot; id=&quot;rev-pnote-166585-1&quot; name=&quot;rev-pnote-166585-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; ?&lt;/p&gt;
&lt;h4&gt;#3 - Le Window Manager sous évolué&lt;/h4&gt;
&lt;p&gt;Je ne comprends pas que le Window Manager soit aussi peu évolué. J'ai
peut-être été habitué à des Window Manager très perfectionnés sous GNU/Linux,
mais le choc a été dur : je n'ai pas trouvé comment garder une fenêtre au
premier plan, comment avoir l'auto-focus, etc. Je ne sais pas pour vous, mais
pour moi, ce sont vraiment des fonctions de base.&lt;/p&gt;
&lt;h4&gt;#4 - La barre de menu&lt;/h4&gt;
&lt;p&gt;Mais quelle idée d'aller mettre la barre de menu à cet endroit ? Je
travaille sur un portable avec un deuxième écran. Pas de chance, la barre de
menu ne s'affiche que en haut de l'écran du portable, et pas du tout sur mon
écran LCD 20&amp;quot;. Mon curseur de souris fait des kilomètres à cause de ce menu mal
placé.&lt;/p&gt;
&lt;h4&gt;#5 - Le copier-coller&lt;/h4&gt;
&lt;p&gt;Tout le reste, je pense que je peux survivre avec, mais le copier-coller,
c'est vraiment le truc qui me mine la vie. Explications : sous GNU/Linux,
il suffit de sélectionner du texte pour qu'il soit copié, et un clic avec le
bouton du milieu de la souris, c'est collé. Bref, c'est simple, clair, net,
efficace. Sous Mac OSX, il faut faire &amp;lt;Touche dont je ne connais pas le
nom&amp;gt;-C pour copier et &amp;lt;Touche dont je ne connais pas le nom&amp;gt;-V pou
coller. Et là, 100 fois par jour, je me retrouve à souligner du texte pour le
copier, puis quand je le colle, je me rends compte que ce n'est pas du tout
cela que je voulais coller, et #!@%&amp;amp;?, il faut effacer le texte que je
viens de coller, et resélectionner le texte qui m'intéresse, faire
&amp;lt;truc&amp;gt;-C, &amp;lt;truc&amp;gt;-V, et tout ca pour un simple copier-coller.&lt;/p&gt;
&lt;p&gt;J'ai eu beau chercher sur Internet, je n'ai rien trouvé pour avoir le
copier-coller façon UNIX sous Mac OSX. Si quelqu'un a la solution, je suis prêt
à lui payer une pinte de bière.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://blog.menfin.info/post/2007/10/23/#rev-pnote-166585-1&quot; id=&quot;pnote-166585-1&quot; name=&quot;pnote-166585-1&quot;&gt;1&lt;/a&gt;] http://yro.slashdot.org/yro/04/02/25/1346201.shtml&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/10/23/Ce-qui-me-manque-sous-Mac-OSX#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/10/23/Ce-qui-me-manque-sous-Mac-OSX#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/166585</wfw:commentRss>
      </item>
    
  <item>
    <title>SEPT RAISONS POUR LESQUELLES JE CONTINUE A UTILISER TEMPLEET ALORS QUE JE POURRAIS UTILISER RUBY ON RAILS</title>
    <link>http://blog.menfin.info/post/2007/09/23/SEPT-RAISONS-POUR-LESQUELLES-JE-CONTINUE-A-UTILISER-TEMPLEET-ALORS-QUE-JE-POURRAIS-UTILISER-RUBY-ON-RAILS</link>
    <guid isPermaLink="false">urn:md5:2a4919280f8d729520d4a91f6e5ea3e8</guid>
    <pubDate>Sun, 23 Sep 2007 16:15:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Humour</category>
            
    <description>    &lt;p&gt;Je m'occupe du site &lt;a href=&quot;http://linuxfr.org/&quot;&gt;LinuxFR.org&lt;/a&gt;. C'est
codé avec le merveilleux framework &lt;a href=&quot;http://templeet.org/&quot;&gt;Templeet&lt;/a&gt;.
Le site pourrait être refait avec &lt;a href=&quot;http://rubyonrails.com/&quot;&gt;Ruby On
Rails&lt;/a&gt;, mais je vais vous expliquer en 7 raisons pourquoi je préfère
Templeet &lt;sup&gt;[&lt;a href=&quot;http://blog.menfin.info/post/2007/09/23/#pnote-157823-1&quot; id=&quot;rev-pnote-157823-1&quot; name=&quot;rev-pnote-157823-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; :&lt;/p&gt;
&lt;h3&gt;#1 - Templeet fait tout ce dont j'ai besoin&lt;/h3&gt;
&lt;p&gt;Qu'est-ce que Ruby on Rails peut faire que Templeet ne peut pas
faire ?&lt;br /&gt;
&lt;em&gt;... je réfléchis ...&lt;/em&gt;&lt;br /&gt;
Bon, en fait, la liste est longue, mais est-ce que j'ai vraiment besoin de tout
ca ? C'est vrai qui se sert de Jabber, OpenID, de validation automatique
de formulaire ou encore d'AJAX ? Sur LinuxFR.org, on utilise rien de tout
ca, c'est donc que je n'en ai pas besoin.&lt;/p&gt;
&lt;h3&gt;#2 - Les vrais hommes travaillent directement sur la prod&lt;/h3&gt;
&lt;p&gt;Sur LinuxFR.org, on travaille directement sur le serveur de prod. On est des
vrais hommes, on n'a pas besoin d'un serveur de dev. Puis, franchement, changer
les habitudes du jour au lendemain, ce serait trop dur.&lt;/p&gt;
&lt;h3&gt;#3 - La vie serait trop monotone sans les bugs templeet&lt;/h3&gt;
&lt;p&gt;J'admire l'équipe qui développe Ruby on Rails, travailler en permanence sur
du code testé et qui fonctionne correctement, ca doit lassant. Pour ma part, je
préfère travailler avec les bugs de templeet, sans tests unitaires. C'est
beaucoup plus joyeux :)&lt;/p&gt;
&lt;h3&gt;#4 - Templeet, c'est super performant&lt;/h3&gt;
&lt;p&gt;Vous ne me croyez pas ? Et pourtant, un benchmark a prouvé
scientifiquement que Templeet est plus rapide qu'Apache : &lt;a href=&quot;https://linuxfr.org//2003/04/07/12001.html&quot; title=&quot;https://linuxfr.org//2003/04/07/12001.html&quot;&gt;https://linuxfr.org//2003/04/07/120...&lt;/a&gt;.
Alors que Ruby on Rails, c'est bien connu depuis l'affaire twitter, ca scale
pas.&lt;/p&gt;
&lt;h3&gt;#5 - J'aime la syntaxe LISP&lt;/h3&gt;
&lt;p&gt;Avec Templeet, pas de risque de se reposer sur un éditeur de texte : je
fais tout de tête, y compris compter les parenthèses. Ainsi, l'édition du code
repose uniquement sur moi, et je peux faire exactement ce que je veux.&lt;/p&gt;
&lt;h3&gt;#6 - Configurer templeet, j'en rêve la nuit&lt;/h3&gt;
&lt;p&gt;A propos de ce que j'aime, la configuration de templeet, c'est que du
bonheur ! Je passe des nuits à imaginer des solutions pour éliminer ce
&lt;code&gt;templeet.php&lt;/code&gt; de l'URL ou à réfléchir sur des algorithmes
évolutionnaires pour ajuster les variables templeet.&lt;/p&gt;
&lt;h3&gt;#7 - Les sites web c'est comme les petites amies : je veux être le
seul à m'en occupper&lt;/h3&gt;
&lt;p&gt;Avec templeet, je suis sûr de n'avoir jamais à partager mon site web avec
qui que ce soit.&lt;/p&gt;
&lt;div class=&quot;footnotes&quot;&gt;
&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://blog.menfin.info/post/2007/09/23/#rev-pnote-157823-1&quot; id=&quot;pnote-157823-1&quot; name=&quot;pnote-157823-1&quot;&gt;1&lt;/a&gt;] Ce texte est une parodie de &lt;a href=&quot;http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html&quot; title=&quot;http://www.oreillynet.com/ruby/blog/2007/09/7_reasons_i_switched_back_to_p_1.html&quot;&gt;
http://www.oreillynet.com/ruby/blog...&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2007/09/23/SEPT-RAISONS-POUR-LESQUELLES-JE-CONTINUE-A-UTILISER-TEMPLEET-ALORS-QUE-JE-POURRAIS-UTILISER-RUBY-ON-RAILS#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2007/09/23/SEPT-RAISONS-POUR-LESQUELLES-JE-CONTINUE-A-UTILISER-TEMPLEET-ALORS-QUE-JE-POURRAIS-UTILISER-RUBY-ON-RAILS#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/157823</wfw:commentRss>
      </item>
    
  <item>
    <title>Copier-Coller depuis ViM</title>
    <link>http://blog.menfin.info/post/2006/07/11/Copier-Coller-depuis-ViM</link>
    <guid isPermaLink="false">urn:md5:5ced5b2a86293295c74a8786cc00d3b9</guid>
    <pubDate>Tue, 11 Jul 2006 00:15:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Vim</category>
            
    <description>    &lt;p&gt;Dans mon dernier billet, j'écrivais que je rédige mes billets avec ViM, puis que je fais un copier-coller vers l'interface web de Dotclear.
Pour cela, je fais la combinaison de touches suivantes :&lt;/p&gt;
&lt;pre&gt;
gg      Aller au début du fichier et
&amp;quot;*      utiliser le registre &amp;quot;* pour ...
yG      ... copier le texte jusqu'à la fin du fichier.
&lt;/pre&gt;

&lt;p&gt;Et comme le registe &lt;code&gt;&amp;quot;*&lt;/code&gt; correspond au &lt;em&gt;clipboard&lt;/em&gt;, je peux ensuite coller mon texte dans mon navigateur web (firefox).&lt;/p&gt;


&lt;p&gt;Mais pour ce post, j'ai décidé de suivre
&lt;a href=&quot;http://blog.menfin.info/post/2006/07/09/Coloration-syntaxique-dans-Vim-pour-les-billets-Dotclear#c45302&quot;&gt;le conseil de Romuald&lt;/a&gt;
et d'utiliser l'extension &lt;a href=&quot;http://mozex.mozdev.org/&quot;&gt;Mozex&lt;/a&gt;, et à première vue, ca paraît pas mal.&lt;/p&gt;


&lt;p&gt;&lt;ins&gt;Mise à jour&lt;/ins&gt; : bon, en fait, j'ai un problème d'encodage avec mozex, mais j'espère bien le régler.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2006/07/11/Copier-Coller-depuis-ViM#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2006/07/11/Copier-Coller-depuis-ViM#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/17841</wfw:commentRss>
      </item>
    
  <item>
    <title>Coloration syntaxique dans Vim pour les billets Dotclear</title>
    <link>http://blog.menfin.info/post/2006/07/09/Coloration-syntaxique-dans-Vim-pour-les-billets-Dotclear</link>
    <guid isPermaLink="false">urn:md5:047f52324706c7245f65b2594c0d3ca0</guid>
    <pubDate>Sun, 09 Jul 2006 23:25:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Vim</category>
            
    <description>    &lt;p&gt;Je ne sais pas pour vous, mais moi, j'ai horreur de devoir taper du texte dans mon navigateur web.
Aussi, dès que je tape plus de quelques lignes, j'utilise ViM, puis je fais un copier-coller vers firefox.
Cela me permet par exemple de profiter de la coloration syntaxique.&lt;/p&gt;


&lt;p&gt;En particulier, je tape mes billets sous ViM, et je me suis donc créé le fichier de syntaxe pour là aussi avoir la coloration syntaxique.
Ce fichier est téléchargeable ici : &lt;a href=&quot;http://blog.menfin.info/public/dotclear.vim&quot;&gt;dotclear.vim&lt;/a&gt;
Il faut le placer dans le répertoire &lt;code&gt;~/.vim/syntax/&lt;/code&gt;.&lt;/p&gt;


&lt;p&gt;Et pour que ViM sache automatiquement que les fichiers avec l'extension &lt;code&gt;.dc&lt;/code&gt; sont au format &lt;code&gt;dotclear&lt;/code&gt;, il suffit de créer un fichier &lt;code&gt;~/.vim/ftdetect/dotclear.vim&lt;/code&gt; avec le contenu suivant :&lt;/p&gt;
&lt;pre&gt;
au BufRead,BufNewFile *.dc  set ft=dotclear
&lt;/pre&gt;</description>
    
          <enclosure url="http://blog.menfin.info/public/dotclear.vim"
      length="2979" type="text/plain" />
    
    
          <comments>http://blog.menfin.info/post/2006/07/09/Coloration-syntaxique-dans-Vim-pour-les-billets-Dotclear#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2006/07/09/Coloration-syntaxique-dans-Vim-pour-les-billets-Dotclear#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/17591</wfw:commentRss>
      </item>
    
  <item>
    <title>Templates dans vim 2 / 2</title>
    <link>http://blog.menfin.info/post/2006/07/09/Templates-dans-vim-2-/-2</link>
    <guid isPermaLink="false">urn:md5:2558e81799ae016044cdbbe63b34f322</guid>
    <pubDate>Sun, 09 Jul 2006 21:44:00 +0200</pubDate>
    <dc:creator>M'enfin ?!?</dc:creator>
        <category>Vim</category>
            
    <description>&lt;p&gt;Voici la suite du précédent tips.&lt;/p&gt;    &lt;p&gt;Comme promis, nous allons donc voir comment avoir des templates un peu plus dynamiques. Le langage de script de vim n'étant pas des plus sympathiques, je préfère appeler un programme externe.
Pour cela, nous allons remplacer la ligne que nous avions insérée dans le fichier vimrc par celle-là :&lt;/p&gt;
&lt;pre&gt;
au BufNewFile * 0r! ~/.vim/skeleton.rb
&lt;/pre&gt;


&lt;p&gt;Ici, c'est un script en ruby (&lt;code&gt;skeleton.rb&lt;/code&gt;) qui est appelé.
Pour le moment, ce script ne reçoit aucun paramètre.
Pas terrible pour savoir quel template utiliser !
Pour régler ce problème, nous pouvons passer par exemple le nom du fichier, avec son chemin complet.
Il suffit de rajouter &lt;code&gt;%:p&lt;/code&gt; toujours à la me ligne du fichier vimrc.
&lt;code&gt;%&lt;/code&gt; indique le fichier courant, et &lt;code&gt;:p&lt;/code&gt; est un modificateur pour avoir le chemin complet.&lt;/p&gt;


&lt;p&gt;Mais, &lt;strong&gt;ViM&lt;/strong&gt; fait déjà de la détection de &lt;em&gt;filetype&lt;/em&gt;, aussi il peut être intéressant de passer ce &lt;em&gt;filetype&lt;/em&gt; à notre script.
Pour cela, nous allons encore modifier notre ligne :&lt;/p&gt;
&lt;pre&gt;
au BufNewFile * :exe(&amp;quot;0r! ~/.vim/skeleton.rb %:p &amp;quot; . &amp;amp;filetype)
&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : comme il n'est pas possible à ma connaissance de passer directement le filtype à la commande r!, je construit d'abord la chaîne de cractère avec toute la commande et  le filetype, puis je l'éxécute.&lt;/p&gt;


&lt;p&gt;Maintenant que nous pouvons appeller un script avec le chemin du fichier et son &lt;em&gt;filetype&lt;/em&gt;, je pense qu'on peut dire que c'est gagné.
Voici à titre d'exemple le script que j'utilise :&lt;/p&gt;
&lt;pre&gt;
#!/usr/bin/env ruby
# Author: Bruno Michel &amp;lt;bmichel@menfin.info&amp;gt;
# Licence: MIT &amp;lt;http://www.opensource.org/licenses/mit-license.html&amp;gt;

require 'erb' 


SKELETON_DIR = File.expand_path(&amp;quot;~/.vim/skeleton&amp;quot;);
EXTENSION  = &amp;quot;erb&amp;quot;

file, filetype = ARGV
filename  = File.basename(file)
skeletons = [filename, filetype]
skeleton  = skeletons.map { |s|
    File.join(SKELETON_DIR, &amp;quot;#{s}.#{EXTENSION}&amp;quot;)
}.find { |s|
    File.exist?(s) &amp;amp;&amp;amp; File.readable?(s)
}

exit if skeleton.nil?

File.open(skeleton) do |f|
    puts ERB.new(f.read, nil, '&amp;lt;&amp;gt;').result(binding)
end
&lt;/pre&gt;


&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; : si vous voulez utiliser ce script, n'oubliez pas de le rendre exécutable (&lt;code&gt;chmod a+x ~/.vim/skeleton.rb&lt;/code&gt;)&lt;/p&gt;


&lt;p&gt;Ce script va chercher un fichier &lt;code&gt;.erb&lt;/code&gt; dans le répertoire &lt;code&gt;~/.vim/skeleton&lt;/code&gt; dont le nom correspond soit au nom du nouveau fichier, soit à son filetype.
Et dans ce répertoire, on trouve, par exemple, &lt;code&gt;ruby.erb&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;
#!/usr/bin/env ruby
# Author: Bruno Michel &amp;lt;bmichel@menfin.info&amp;gt;
# Licence: MIT &amp;lt;http://www.opensource.org/licenses/mit-license.html&amp;gt;
&lt;/pre&gt;

&lt;p&gt;ou &lt;code&gt;README.erb&lt;/code&gt; :&lt;/p&gt;
&lt;pre&gt;
&amp;lt;%= `figlet -c README` %&amp;gt;
&amp;lt;%# figlet: http://www.figlet.org %&amp;gt;

Author: Bruno Michel &amp;lt;bmichel@menfin.info&amp;gt; 
Date: &amp;lt;%= Date.today.strftime(&amp;quot;%d/%m/%y&amp;quot;) %&amp;gt; 
Time: &amp;lt;%= Time.now.strftime(&amp;quot;%H:%M:%S&amp;quot;) %&amp;gt;
&amp;lt;% directory = File.dirname(file) %&amp;gt;
Project: &amp;lt;%= File.split(directory).last %&amp;gt;
&lt;/pre&gt;


&lt;p&gt;Et voilà, mission accomplie, nous avons des templates dynamiques, avec notamment la possibilité d'insérer la date ou l'heure courante.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.menfin.info/post/2006/07/09/Templates-dans-vim-2-/-2#comment-form</comments>
      <wfw:comment>http://blog.menfin.info/post/2006/07/09/Templates-dans-vim-2-/-2#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.menfin.info/feed/rss2/comments/17586</wfw:commentRss>
      </item>
    
</channel>
</rss>