<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Algo::rithmique</title>
  <link rel="alternate" type="text/html" href="http://algorithmique.net/" />
  <link rel="self" type="application/atom+xml" href="http://algorithmique.net/atom.xml" />
  <id>http://algorithmique.net/atom.xml</id>
  <updated>2012-02-09T22:03:17Z</updated>
  <subtitle>Algo::rithmique | [Why not ?]</subtitle>

  
  <entry>
    <title>Un petit test nasm + gcc</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Snippets/2012/02/09/un-petit-test-nasm--gcc.html' />
    <id>http://algorithmique.net/Snippets/2012/02/09/un-petit-test-nasm--gcc</id>
    <updated>2012-02-09T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/projets.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Ceci n'est pas vraiment un post, mais plus un exemple d'utilisation de &lt;a href=&quot;http://www.nasm.us/&quot;&gt;nasm&lt;/a&gt; + &lt;a href=&quot;http://gcc.gnu.org/&quot;&gt;gcc&lt;/a&gt; (sous MacOSX). Il s'agit ici d'un exemple pour l'architecture i386. Il a été testé sous Lion. Promis, je vais proposer une mise à jour, rapidement, pour montrer ce que cela donne en x86_64.
&lt;/p&gt;

&lt;p class=&quot;remark&quot;&gt;
  Attention, la version de NASM installée par Apple date un peu ;) Je vous conseille donc d'installer la vôtre.
&lt;/p&gt;

&lt;p &gt;&amp;nbsp;&lt;/p&gt;
&lt;tt &gt;add.asm&lt;/tt&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;nasm&quot;&gt;&lt;span class=&quot;k&quot;&gt;section&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;.data&lt;/span&gt;
   &lt;span class=&quot;nl&quot;&gt;msg:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;db&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;#39;%d&amp;#39;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;mh&quot;&gt;0xa&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;
   &lt;span class=&quot;nl&quot;&gt;addition_cumul:&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;dd&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;section&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;.text&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;global&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;_add&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;_printf&lt;/span&gt;

&lt;span class=&quot;nl&quot;&gt;_add:&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;ebp&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;mov&lt;/span&gt;  &lt;span class=&quot;nb&quot;&gt;ebp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;esp&lt;/span&gt;

   &lt;span class=&quot;nf&quot;&gt;mov&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;eax&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;addition_cumul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;eax&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;ebp&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;8&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;mov&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;addition_cumul&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;],&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;eax&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;dword&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;eax&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;push&lt;/span&gt; &lt;span class=&quot;kt&quot;&gt;dword&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;msg&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;call&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;_printf&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;esp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;4&lt;/span&gt;

   &lt;span class=&quot;nf&quot;&gt;pop&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;eax&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;leave&lt;/span&gt;
   &lt;span class=&quot;nf&quot;&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;&amp;nbsp;&lt;/p&gt;
&lt;tt &gt;testadd.c&lt;/tt&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;c&quot;&gt;&lt;span class=&quot;cp&quot;&gt;#include &amp;lt;stdio.h&amp;gt;&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;add&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;nb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;main&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
   &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;last&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;printf&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&amp;quot;%d + %d = &amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;last&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;last&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;add&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
   &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;&amp;nbsp;&lt;/p&gt;
&lt;tt &gt;Makefile&lt;/tt&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;makefile&quot;&gt;&lt;span class=&quot;nf&quot;&gt;all&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;:&lt;/span&gt;
   /usr/local/bin/nasm -f macho add.asm 
   /usr/bin/gcc-4.2 -Wl,-no_pie -m32 -c testadd.c 
   ld -arch i386 -macosx_version_min 10.6 -lc -o testadd add.o testadd.o /usr/lib/crt1.o 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Snippets/2012/02/09/un-petit-test-nasm--gcc.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Créer un système de messagerie instantanée avec Ruby, MQTT et Ncurses</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/11/12/crer-un-systme-de-messagerie-instantane-avec-ruby-mqtt-et-ncurses.html' />
    <id>http://algorithmique.net/Dev/2011/11/12/crer-un-systme-de-messagerie-instantane-avec-ruby-mqtt-et-ncurses</id>
    <updated>2011-11-12T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Non, vous ne vous êtes pas trompé (et moi non plus) ! Ce post a presque le même titre que le &lt;a href=&quot;/Dev/2011/11/11/crer-un-systme-de-messagerie-instantanne-avec-ruby-amqp-et-ncurses.html&quot;&gt;précédent&lt;/a&gt;. En effet, je vous propose de refaire notre système de messagerie instantanée, mais en remplaçant &lt;a href=&quot;http://www.amqp.org/&quot;&gt;AMQP&lt;/a&gt; par &lt;a href=&quot;http://mqtt.org/&quot;&gt;MQTT&lt;/a&gt;. Pour cela, nous utiliserons la gem &lt;a href=&quot;https://github.com/njh/ruby-mqtt&quot;&gt;ruby-mqtt&lt;/a&gt; et &lt;a href=&quot;http://mosquitto.org/&quot;&gt;mosquitto&lt;/a&gt; comme &lt;i &gt;broker&lt;/i&gt;.
&lt;/p&gt;

&lt;p &gt;
   MQTT est, tout comme AMQP, un protocole ouvert de messagerie inter-applicatif. Il est cependant beaucoup plus simple d'AMQP. En effet, il n'existe pas de notion d'&lt;i &gt;exchange&lt;/i&gt;. Il n'est pas non plus possible d'envoyer des messages qui pourront être &quot;conservés&quot; par le &lt;i &gt;broker&lt;/i&gt; afin d'être récupérés plus tard par des clients non connectés.
&lt;/p&gt;

&lt;p &gt;
   Un client MQTT va s'inscrire auprès d'une ou plusieurs &lt;i &gt;queues&lt;/i&gt; pas la suite il pourra récupérer les messages envoyés à ces &lt;i &gt;queues&lt;/i&gt;. De même, il pourra envoyer des messages à des &lt;i &gt;queues&lt;/i&gt;, qu'il s'y soit inscrit ou non.
&lt;/p&gt;

&lt;p &gt;
   Voyons cela sur un petit exemple. En premier, le client :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;lineno&quot;&gt; 1&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class=&quot;lineno&quot;&gt; 2&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;mqtt/client&amp;#39;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/11/12/crer-un-systme-de-messagerie-instantane-avec-ruby-mqtt-et-ncurses.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Créer un système de messagerie instantanée avec Ruby, AMQP et Ncurses</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/11/11/crer-un-systme-de-messagerie-instantanne-avec-ruby-amqp-et-ncurses.html' />
    <id>http://algorithmique.net/Dev/2011/11/11/crer-un-systme-de-messagerie-instantanne-avec-ruby-amqp-et-ncurses</id>
    <updated>2011-11-11T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Dans ce post, nous allons nous amuser à mettre en place un système de messagerie instantanée en utilisant &lt;a href=&quot;http://www.amqp.org/&quot;&gt;AMQP&lt;/a&gt;. AMQP est un protocole permettant de gérer des échanges de messages entre applications. Il s'agit d'un protocole ouvert dont il existe de multiples implémentations. Dans cet exemple, nous utiliserons Ruby pour créer notre système de &lt;i &gt;chat&lt;/i&gt;.
&lt;/p&gt;

&lt;p &gt;
   Afin de rendre notre client de messagerie un peu plus convivial, nous nous amuserons à mettre en place une interface utilisateur en mode texte avec &lt;a href=&quot;http://www.gnu.org/software/ncurses/ncurses.html&quot;&gt;Ncurses&lt;/a&gt;. Aucun rapport avec AMQP bien entendu, il s'agit simplement de s'amuser un peu ;)
&lt;/p&gt;

&lt;p &gt;
   Autant vous prévenir tout de suite, je ne vais faire qu'effleurer les deux sujets (AMQP et Ncurses). Mon objectif étant de vous faire toucher du doigt ces différentes technologies, en espérant attirer votre curiosité, et en vous laissant le plaisir d'approfondir ces sujets par vous même.
&lt;/p&gt;

&lt;h2 &gt;AMQP&lt;/h2&gt;

&lt;p &gt;
   Avant de se lancer dans le développement, il faut comprendre les mécanismes d'AMQP. Pour cela, regardons le schéma&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/11/11/crer-un-systme-de-messagerie-instantanne-avec-ruby-amqp-et-ncurses.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Visualiser un fichier Ant avec GraphViz</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Snippets/2011/10/29/visualiser-un-fichier-ant-avec-graphviz.html' />
    <id>http://algorithmique.net/Snippets/2011/10/29/visualiser-un-fichier-ant-avec-graphviz</id>
    <updated>2011-10-29T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/jruby.jpeg&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Depuis quelques jours, nous travaillons, avec &lt;a href=&quot;http://twitter.com/#!/syl20j&quot;&gt;@syl20j&lt;/a&gt; sur la refonte des installeurs des &lt;a href=&quot;http://www.vidal.fr/les-produits-professionnels/vidal-expert&quot;&gt;applications CD VIDAL&lt;/a&gt;. Dans leurs versions actuelles, ces installeurs sont générés via des scripts &lt;a href=&quot;http://ant.apache.org/&quot;&gt;Ant&lt;/a&gt; utilisant du &lt;a href=&quot;http://nsis.sourceforge.net&quot;&gt;NSIS&lt;/a&gt; sous Windows et du &lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/DeveloperTools/Conceptual/PackageMakerUserGuide/Introduction/Introduction.html&quot;&gt;PackageMaker&lt;/a&gt; sous Mac. Nous avons décidé de supprimer ces scripts pour remplacer tout cela par du &lt;a href=&quot;http://maven.apache.org/&quot;&gt;maven&lt;/a&gt; et de l'&lt;a href=&quot;http://www.ej-technologies.com/products/install4j/overview.html&quot;&gt;install4j&lt;/a&gt;. Une des étapes consiste donc à comprendre ce que font les scripts Ant. Afin de faciliter notre travail, j'ai développé un petit script permettant de faire une représentation d'un fichier de &lt;i &gt;build&lt;/i&gt; sous forme de graph.
&lt;/p&gt;

&lt;p &gt;
  Le voici :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;ruby&quot;&gt;&lt;span class=&quot;c1&quot;&gt;#!/usr/bin/env ruby&lt;/span&gt;

&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;rubygems&amp;#39;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;open-uri&amp;#39;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;nokogiri&amp;#39;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;graphviz&amp;#39;&lt;/span&gt;
&lt;span class=&quot;nb&quot;&gt;require&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&amp;#39;getoptlong&amp;#39;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Ant2Gv&lt;/span&gt;
   &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;initialize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;build_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gv_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; 
      &lt;span class=&quot;vi&quot;&gt;@build_file&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;build_file&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@build_doc&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;Nokogiri&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;::&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;XML&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;vi&quot;&gt;@build_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@build_graph&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;GraphViz&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;ss&quot;&gt;:ANT&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;:path&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;gv_path&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
      &lt;span class=&quot;vi&quot;&gt;@build_graph&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;node&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&amp;quot;shape&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Snippets/2011/10/29/visualiser-un-fichier-ant-avec-graphviz.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Développer des modules pour VIM</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Snippets/2011/10/05/developper-des-modules-pour-vim.html' />
    <id>http://algorithmique.net/Snippets/2011/10/05/developper-des-modules-pour-vim</id>
    <updated>2011-10-05T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;&lt;img class=&quot;alignleft size-full wp-image-562&quot; title=&quot;Projets&quot; src=&quot;/images/projets.png&quot; id=&quot;image-project&quot; alt=&quot;image-project&quot;&gt;&lt;/img&gt; Depuis que je suis (re)passé sous &lt;a href=&quot;http://vim.org&quot;&gt;Vim&lt;/a&gt; pour développer, j&amp;#8217;ai passé un peu de temps à me peaufiner une configuration &lt;em &gt;aux petits oignons&lt;/em&gt;. En effet, quand on a pris l&amp;#8217;habitude de développer avec un IDE, le moindre refactoring, la moindre recherche ou les imports automatiques nous font oublier que dans la &lt;em &gt;vraie vie&lt;/em&gt;, tout n&amp;#8217;est pas aussi luxueux ;)&lt;/p&gt;

&lt;p &gt;Heureusement, il existe un grand nombre de plugins pour Vim qui peuvent grandement nous simplifier la vie. Parmi ceux-ci, j&amp;#8217;utilise :&lt;/p&gt;

&lt;ul &gt;
&lt;li &gt;&lt;a href=&quot;https://github.com/vim-scripts/ack.vim&quot;&gt;ack.vim&lt;/a&gt; est un module permettant d&amp;#8217;utiliser &lt;a href=&quot;http://search.cpan.org/~petdance/ack/ack&quot;&gt;Ack&lt;/a&gt; dans Vim.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;https://github.com/vim-scripts/DirDiff.vim&quot;&gt;DirDiff.vim&lt;/a&gt; permet de comparer (et éventuellement merger) des arborescences de répertoires.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;https://github.com/tpope/vim-fugitive&quot;&gt;fugitive&lt;/a&gt; est une interface à Git, dans Vim.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;https://github.com/scrooloose/nerdtree&quot;&gt;NERDTree&lt;/a&gt; pour ajouter un explorateur de fichier à Vim.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;https://github.com/tpope/vim-surround&quot;&gt;surround&lt;/a&gt; est un module qui permet de facilement jouer avec les &amp;#8220;encadrements&amp;#8221;.&lt;/li&gt;
&lt;li &gt;&lt;a href=&quot;http://www.vim.org/scripts/script.php?script_id=3465&quot;&gt;tagbar&lt;/a&gt; permet d&amp;#8217;afficher tous les tags (classes, méthodes, variables, &amp;#8230;) du fichier courant.&lt;/li&gt;
&lt;/ul&gt;

&lt;p &gt;Une fois ces modules installés, il me manque trois petites choses:&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Snippets/2011/10/05/developper-des-modules-pour-vim.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Ma (petite) console Java</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Snippets/2011/08/08/ma-petite-console-java.html' />
    <id>http://algorithmique.net/Snippets/2011/08/08/ma-petite-console-java</id>
    <updated>2011-08-08T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/jruby.jpeg&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Quand j'ai commencé à développer en Java, parmi les choses qui me manquait le plus, une console, façon &lt;a href=&quot;http://en.wikipedia.org/wiki/Interactive_Ruby_Shell&quot;&gt;IRB&lt;/a&gt;, était dans le top 10. En effet, le problème avec les langages nécessitant une phase de compilation et que lorsque vous voulez tester rapidement un petit enchainement, vous avez l'impression de devoir sortir l'artillerie lourde. J'ai donc cherché s'il existait quelque chose pour m'aider, et je suis rapidement tombé sur &lt;a href=&quot;http://www.beanshell.org/&quot;&gt;BeanShell&lt;/a&gt;. Ce dernier, utilisé en ligne de commande, répond totalement à mon besoin. Cependant, je me suis également demandé si je ne pourrais pas mettre en place ma propre solution.
&lt;/p&gt;

&lt;p &gt;
   Je me suis donc tourné vers ce que je connais et j'ai essayé de mettre en place une solution à base de &lt;a href=&quot;http://www.jruby.org/&quot;&gt;JRuby&lt;/a&gt; et &lt;a href=&quot;https://github.com/jruby/java-inline&quot;&gt;java-inline&lt;/a&gt;. Le résultat n'est pas parfait, mais il répond au besoin de base.
&lt;/p&gt;

&lt;p &gt;
   Voici un example d'utilisation : 
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;java&quot;&gt;&lt;span class=&quot;n&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;export&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;CLASSPATH&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;commons&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;io&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;2.0&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;jar&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;$&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ruby&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;jconsole&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;rb&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;jConsole&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;with&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Java&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;10.7&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;help&lt;/span&gt;
&lt;span class=&quot;err&quot;&gt;\&lt;/span&gt;&lt;span class=&quot;kn&quot;&gt;import&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nn&quot;&gt;PACKAGE&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;   &lt;span class=&quot;o&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;Import&lt;/span&gt; &lt;span class=&quot;kn&quot;&gt;package&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Snippets/2011/08/08/ma-petite-console-java.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>D'Intellij à VIM - Réaction en chaine</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Projets/2011/08/07/dintellij-a-vim--reaction-en-chaine.html' />
    <id>http://algorithmique.net/Projets/2011/08/07/dintellij-a-vim--reaction-en-chaine</id>
    <updated>2011-08-07T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;&lt;img class=&quot;alignleft size-full wp-image-562&quot; title=&quot;Projets&quot; src=&quot;/images/projets.png&quot; id=&quot;image-project&quot; alt=&quot;image-project&quot;&gt;&lt;/img&gt; Depuis que j&amp;#8217;ai rejoint l&amp;#8217;équipe Software de VIDAL, j&amp;#8217;avais pris l&amp;#8217;habitude de coder avec &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;Intellij&lt;/a&gt;. Trois raisons ont motivés ce choix. Premièrement, &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;Intellij&lt;/a&gt; est (AMHA) moins lourd qu&amp;#8217;&lt;a href=&quot;http://www.eclipse.org/&quot;&gt;Eclipse&lt;/a&gt;. En second, le support de Scala et Ruby y est particulièrement bien fait. Enfin il existe le plugin &lt;a href=&quot;https://github.com/olegs/ideavim&quot;&gt;IdeaVIM&lt;/a&gt;, permettant de retrouver (presque) toute la puissance de &lt;a href=&quot;http://vim.org&quot;&gt;VIM&lt;/a&gt; dans &lt;a href=&quot;http://www.jetbrains.com/idea/&quot;&gt;Intellij&lt;/a&gt;. Puis est arrivé &lt;a href=&quot;http://twitter.com/#!/syl20j&quot;&gt;@syl20j&lt;/a&gt;, &lt;em &gt;vimiste&lt;/em&gt; parmi les &lt;em &gt;vimiste&lt;/em&gt; qui m&amp;#8217;a permis de me poser la question &lt;em &gt;&amp;#8220;Tant qu&amp;#8217;à vouloir faire du VIM, pourquoi ne pas utiliser l&amp;#8217;original ?&amp;#8221;&lt;/em&gt; Et c&amp;#8217;est ainsi que j&amp;#8217;ai dis au revoir à Intellij et (re) bonjour à VIM.&lt;/p&gt;

&lt;h2 id=&quot;dintellijvim&quot;&gt;D&amp;#8217;intellij à VIM&lt;/h2&gt;

&lt;p &gt;Côté langage, nous en utilisons principalement trois : Java, Scala et Ruby. Pour le premier et le dernier, VIM ne demande rien de particulier. Pour Scala, il sera cependant utile d&amp;#8217;installer un plugin. Après plusieurs tests, j&amp;#8217;ai opté pour la &lt;a href=&quot;https://github.com/rosstimson/scala-vim-support&quot;&gt;version Git de Ross Timson&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Projets/2011/08/07/dintellij-a-vim--reaction-en-chaine.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Création d'un modèle d'acteur en Ruby</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/06/18/cration-dun-modle-dacteur-en-ruby.html' />
    <id>http://algorithmique.net/Dev/2011/06/18/cration-dun-modle-dacteur-en-ruby</id>
    <updated>2011-06-18T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Depuis 2 &lt;a href=&quot;http://en.wikipedia.org/wiki/Sprint_(software_development)&quot;&gt;sprints&lt;/a&gt;, nous travaillons, &lt;a href=&quot;https://twitter.com/#!/syl20j&quot;&gt;@syl20j&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/#!/jblemee&quot;&gt;@jblemee&lt;/a&gt; et moi, sur un nouveau projet chez &lt;a href=&quot;http://www.vidal.fr&quot;&gt;VIDAL&lt;/a&gt;. Partants de rien, nous avons choisi de développer en &lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;Scala&lt;/a&gt;, ce qui nous a ouvert la voie vers l'utilisation du &lt;a href=&quot;http://en.wikipedia.org/wiki/Actor_model&quot;&gt;modèle d'acteur&lt;/a&gt;. Mes &lt;i &gt;divertissements&lt;/i&gt; avec Erlang m'avaient déjà permis de jouer un peu avec. Pourtant, il aura fallu que je l'utilise dans un contexte professionnel pour véritablement y consacrer du temps et essayer de l'appliquer en Ruby.
&lt;/p&gt;

&lt;h2 &gt;Les acteurs&lt;/h2&gt;

&lt;p &gt;
  Le principe du modèle d'acteur vise avant tout à simplifier le traitement parallèle. Pour cela il définit les règles suivantes :
  &lt;ul &gt;
    &lt;li &gt;Un acteur participe à un traitement parallèle et ne partage rien avec les autres acteurs.&lt;/li&gt;
    &lt;li &gt;On communique avec un acteur &lt;i &gt;uniquement&lt;/i&gt; par le biais de messages.&lt;/li&gt;
    &lt;li &gt;Les messages reçus par un même acteur sont traités séquentiellement (et non en parallèle) en suivant la règle FIFO.&lt;/li&gt;
  &lt;/ul&gt;
&lt;/p&gt;

&lt;p &gt;
  Avant de voir comment nous pouvons mettre en place un modèle d'acteur en Ruby, il peut être intéressant de regarder comment il s'utilise dans d'autres langages.
&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/06/18/cration-dun-modle-dacteur-en-ruby.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Mettre en place de l'autocomplétion sur une commande shell</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Projets/2011/05/15/mettre-en-place-de-lautocompltion-sur-une-commande-shell.html' />
    <id>http://algorithmique.net/Projets/2011/05/15/mettre-en-place-de-lautocompltion-sur-une-commande-shell</id>
    <updated>2011-05-15T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/projets.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Dans la continuité de mon développement de &lt;a href=&quot;/Projets/2011/05/14/vf--un-remplacant-pour-cd.html&quot;&gt;vf&lt;/a&gt;, je me suis demandé comment mettre en place de l'autocomplétion. En effet, si &lt;tt &gt;vf&lt;/tt&gt; remplace très avantageusement &lt;tt &gt;cd&lt;/tt&gt;, l'autocomplétion par défaut du shell ne permet d'accéder facilement qu'aux répertoires. Ainsi, un &lt;tt &gt;vf &amp;lt;TAB&amp;gt;&lt;/tt&gt; ne présente que la liste des fichiers et répertoires, masquant totalement l'intérêt de &lt;tt &gt;vf&lt;/tt&gt;, à savoir la présence des alias.
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vf &amp;lt;TAB&amp;gt;
--&amp;lt; file &amp;gt;--
Capcode/                         lipsum/                          Fragaria/
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;
  Il serait bien plus intéressant que &lt;tt &gt;vf&lt;/tt&gt; présente non seulement la liste des répertoires, mais également des alias :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;nv&quot;&gt;$ &lt;/span&gt;vf &amp;lt;TAB&amp;gt;
github                           vidal                            docs
...
--&amp;lt; file &amp;gt;--
Capcode/                         lipsum/                          Fragaria/
...
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;
	J'ai donc fouillé un peu.
&lt;/p&gt;

&lt;p &gt;
	Etant un utilisateur convaincu de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Zsh&quot;&gt;Zsh&lt;/a&gt;, je m'étais déjà amusé un peu avec le &lt;a href=&quot;http://www.csse.uwa.edu.au/programming/linux/zsh-doc/zsh_23.html&quot;&gt;système de complétion&lt;/a&gt; de ce dernier. Pour ce qui est des autres, j'ai du &lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Projets/2011/05/15/mettre-en-place-de-lautocompltion-sur-une-commande-shell.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>vf - un remplaçant pour cd</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Projets/2011/05/14/vf--un-remplacant-pour-cd.html' />
    <id>http://algorithmique.net/Projets/2011/05/14/vf--un-remplacant-pour-cd</id>
    <updated>2011-05-14T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/projets.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Si, comme moi, vous travaillez beaucoup en &lt;i &gt;ligne de commande&lt;/i&gt;, que vous passez votre temps à naviguer d'un répertoire à un autre, peut-être vous êtes-vous créé des alias pour vous &lt;i &gt;téléporter&lt;/i&gt; plus rapidement dans tel ou tel répertoire. Je me suis amusé à pousser cette idée et j'ai donc créé &lt;tt &gt;vf&lt;/tt&gt;. Cet utilitaire vient remplacer la commande &lt;tt &gt;cd&lt;/tt&gt; en comblant quelques une de ses lacunes.
&lt;/p&gt;

&lt;p &gt;
	L'idée première de &lt;tt &gt;vf&lt;/tt&gt; consiste à pouvoir facilement créer des raccourcis vers des répertoires. Pour cela, il vous suffit de vous rendre dans le répertoire en question et à exécuter la commande suivante :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;sh&quot;&gt;vf -s mon_alias
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;
	A partir de maintenant, vous pouvez facilement revenir dans le répertoire pointé par l'&lt;i &gt;alias&lt;/i&gt; &lt;tt &gt;mon_alias&lt;/tt&gt; en utilisant simplement la commande :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;sh&quot;&gt;vf mon_alias
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;
	Si par la suite, vous souhaitez supprimer un alias, il suffit d'utiliser l'option &lt;tt &gt;-r&lt;/tt&gt; :
&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre &gt;&lt;code class=&quot;sh&quot;&gt;vf -r mon_alias
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;


&lt;p &gt;
	A tout moment vous pouvez afficher la liste de vos alias en utilisant l'option &lt;tt &gt;-l&lt;/tt&gt;.
&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Projets/2011/05/14/vf--un-remplacant-pour-cd.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Ruby/GraphViz 1.0.0</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Projets/2011/05/09/rubygraphviz-100.html' />
    <id>http://algorithmique.net/Projets/2011/05/09/rubygraphviz-100</id>
    <updated>2011-05-09T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/projets.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Après 32 versions 0.X et un peu plus de 6 ans de développement, la version 1.0.0 de Ruby/GraphViz vient de sortir. Il est donc  temps de consacrer un petit article à ces 4500 lignes de code, dont ~1800 pour les tests. D'en profiter pour remercier les 14 personnes qui ont participé à son développement, et de rendre un petit hommage aux utilisateurs qui vont permettre de bientôt passer la barre des 40000 téléchargements.
&lt;/p&gt;

&lt;h2 &gt;Un peu d'histoire...&lt;/h2&gt;

&lt;h3 &gt;Une première version en C&lt;/h3&gt;

&lt;p &gt;
  La toute &lt;a href=&quot;http://raa.ruby-lang.org/project/ruby-graphviz/0.1.0&quot;&gt;première version&lt;/a&gt; de Ruby/GraphViz, dont les sources sont &lt;a href=&quot;http://gregoire.lejeune.free.fr/ruby-graphviz_0.0.1.tar.gz&quot;&gt;encore disponibles&lt;/a&gt;, était écrite en C. A l'origine, ce module faisait partie du projet &lt;a href=&quot;http://rubyforge.org/projects/ruby-asp/&quot;&gt;Ruby/ASP&lt;/a&gt; qui avait pour ambition de créer un portage d'&lt;a href=&quot;http://www.apache-asp.org/&quot;&gt;apache-asp&lt;/a&gt; en Ruby. Dans les faits, j'ai longtemps utilisé apache-asp pour développer &lt;a href=&quot;http://sourceforge.net/projects/webtime/&quot;&gt;Webtime&lt;/a&gt;, outil de &lt;i &gt;timesheet&lt;/i&gt;. Et, vous l'aurez compris, j'avais l'espoir de le réécrire en Ruby.
&lt;/p&gt;

&lt;p &gt;
  Quel rapport avec GraphViz ?
&lt;/p&gt;

&lt;p &gt;
  Et bien j'envisageais d'ajouter à Webtime des fonctionnalités nécessitant la mise en place de graphes. Ceci afin de permettre de présenter des organigrammes, des schémas de dépendances entre projets, etc...
&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Projets/2011/05/09/rubygraphviz-100.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Créer un démon (ou un service) pour U*IX et Windows en Java avec commons-deamon</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/04/11/crer-un-dmon-ou-un-service-pour-uix-et-windows-en-java-avec-commons-deamon.html' />
    <id>http://algorithmique.net/Dev/2011/04/11/crer-un-dmon-ou-un-service-pour-uix-et-windows-en-java-avec-commons-deamon</id>
    <updated>2011-04-11T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
	Créer un démon n'est pas des plus intuitif avec Java. Et bien qu'il y ait de &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=166&quot;&gt;l'espoir&lt;/a&gt; avec le futur &lt;a href=&quot;http://jdk7.java.net/&quot;&gt;Java 7&lt;/a&gt;, en attendant, il existe des solutions très simples à mettre en place. Je vous propose aujourd'hui de regarder ce que propose &lt;tt &gt;commons-&lt;i &gt;daemon&lt;/i&gt;&lt;/tt&gt;. Comme nous allons le voir, cette solution possède de solides avantages. Outre sa simplicité, elle permet, à moindre coût, de considérer les différentes plateformes.
&lt;/p&gt;

&lt;p &gt;
	Si nous avons l'habitude de parler de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Daemon_(informatique)&quot;&gt;démon&lt;/a&gt; sous U*IX, un utilisateur Windows entendra plutôt &lt;i &gt;service&lt;/i&gt;. Il s'agit d'une différence importante en terme de mise en place. En effet, si sous U*IX l'utilisation d'un &lt;a href=&quot;http://fr.wikipedia.org/wiki/Fork_(programmation)&quot;&gt;fork&lt;/a&gt; suffit dans 90% des cas, sous Windows il faudra jouer avec le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Service_Control_Manager&quot;&gt;Service Control Manager&lt;/a&gt;. C'est justement ce que propose &lt;tt &gt;commons-&lt;i &gt;daemon&lt;/i&gt;&lt;/tt&gt;.
&lt;/p&gt;

&lt;p class=&quot;remark&quot;&gt;
	J'utiliserai indifféremment le terme de &lt;i &gt;démon&lt;/i&gt; ou &lt;i &gt;service&lt;/i&gt; dans la suite de cette présentation. 
&lt;/p&gt;

&lt;h2 &gt;La partie commune&lt;/h2&gt;

&lt;p &gt;
	Dans cet exemple, j'utilise maven. Commencez donc par créer un projet et ajoutez la dépendance suivante :
&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/04/11/crer-un-dmon-ou-un-service-pour-uix-et-windows-en-java-avec-commons-deamon.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Installer un environnement de cross compilation</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/02/19/installer-un-environnement-de-cross-compilation.html' />
    <id>http://algorithmique.net/Dev/2011/02/19/installer-un-environnement-de-cross-compilation</id>
    <updated>2011-02-19T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Quand on n'y a jamais été confronté, on a tendance à croire que la cross-compilation est un sujet compliqué. C'est oublié le côté primitif&lt;small &gt;&lt;sup &gt;1&lt;/sup&gt;&lt;/small&gt; d'un compilateur. En effet, ce dernier n'est rien d'autre qu'un &lt;i &gt;traducteur&lt;/i&gt; dont le rôle consiste à générer un code cible compréhensible par une machine donnée, à partir d'un code source. Dans cette définition, rien n'indique, à juste titre, que cette traduction doit être faite sur la machine à laquelle est destiné le code cible. Ainsi rien ne m'empêche d'installer, sur mon Mac, un compilateur dans le but de créer des exécutables pour Windows. C'est ce que nous allons voir ici.
&lt;/p&gt;

&lt;h2 &gt;MinGW&lt;/h2&gt;

&lt;p &gt;
  &lt;a href=&quot;http://www.mingw.org/&quot;&gt;MinGW&lt;/a&gt; est un projet ayant pour objectif de porter les outils de développement du projet &lt;a href=&quot;http://www.gnu.org/&quot;&gt;GNU&lt;/a&gt; sur la plateforme &lt;a href=&quot;http://www.microsoft.com/windows/&quot;&gt;Windows&lt;/a&gt;. C'est donc une excellente base de départ pour ce que nous voulons faire, car il met à notre disposition un ensemble de fichiers d'entêtes pour le développement d'application Windows. Ces éléments sont disponibles dans la partie &lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/02/19/installer-un-environnement-de-cross-compilation.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Développer conjointement sur iPhone et Android</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2011/01/04/dvelopper-conjointement-sur-iphone-et-android.html' />
    <id>http://algorithmique.net/Dev/2011/01/04/dvelopper-conjointement-sur-iphone-et-android</id>
    <updated>2011-01-04T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/projets.png&quot; alt=&quot;Projets&quot;&gt;&lt;/img&gt;
  Depuis quelques semaines, je travaille sur le développement d'une application iPhone&lt;small &gt;&lt;sup &gt;1&lt;/sup&gt;&lt;/small&gt;, et j'ai donc profité de la trêve de Noël pour agrémenter mes connaissances dans le domaine du développement mobile en général. Comme tout utilisateur de Mac et possesseur d'iPhone, je me suis naturellement penché vers ce dernier en oubliant vaniteusement les autres. Dommage&lt;small &gt;&lt;sup &gt;2&lt;/sup&gt;&lt;/small&gt; ! Oui, &lt;i &gt;dommage&lt;/i&gt; parce qu'aujourd'hui, oublier une plateforme serait faire preuve de caprice irrationnel tant les parts de marchés des uns et des autres sont importantes&lt;small &gt;&lt;sup &gt;3&lt;/sup&gt;&lt;/small&gt;. Heureusement ma conviction qu'il est aujourd'hui important de développer des applications mobiles pour le plus grand nombre avait déjà été perçue par de plus sages que moi. Et c'est donc vers eux que je me suis tourné !
&lt;/p&gt;

&lt;p &gt;
  Dans ce post, je vais me concentrer sur une solution de développement conjointe entre iPhone et Android. Cependant, comme je l'ai indiqué, il serait dommage de se limiter à ces deux seules plateformes. En effet, il ne faut pas oublier  BlackBerry, Symbian ou Palm.
&lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2011/01/04/dvelopper-conjointement-sur-iphone-et-android.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Développer des extensions pour Node.js</title>
    <link rel='alternate' type='text/html' href='http://algorithmique.net/Dev/2010/11/30/dvelopper-des-extensions-pour-nodejs.html' />
    <id>http://algorithmique.net/Dev/2010/11/30/dvelopper-des-extensions-pour-nodejs</id>
    <updated>2010-11-30T00:00:00Z</updated>

    <author>
      <name>Gregoire Lejeune</name>
      <uri>http://algorithmique.net</uri>
      <email>gregoire.lejeune@free.fr</email>
    </author>

    <content type="html">&lt;p &gt;
  &lt;img class=&quot;alignleft size-full wp-image-562&quot; src=&quot;/images/dev.png&quot; alt=&quot;Dev&quot;&gt;&lt;/img&gt;
  La première fois que j'ai touché à &lt;a href=&quot;http://nodejs.org/&quot;&gt;Node.js&lt;/a&gt; je n'ai pas pu m'empêcher d'avoir une pensée émue pour le défunt&lt;small &gt;&lt;sup &gt;1&lt;/sup&gt;&lt;/small&gt; Netscape LiveWire qui offrait alors la toute première implémentation SSJS. Passons...
&lt;/p&gt;

&lt;p &gt;
  Dans un &lt;a href=&quot;http://algorithmique.net/Projets/2010/09/06/graphviz-avec-nodejs.html&quot;&gt;précédent article&lt;/a&gt;, je vous ai présenté ma solution permettant d'utiliser &lt;a href=&quot;http://graphviz.org&quot;&gt;GraphViz&lt;/a&gt; avec Node. La mise en place de cette solution passe par le développement d'un module. Je vous propose aujourd'hui de voir comment développer ce type d'extension pour Node.
&lt;/p&gt;

&lt;p &gt;
  La création d'extensions pour Node peut se faire de deux façons. La solution la plus évidente consiste, bien entendu, à développer en Javascipt. L'autre solution consiste à utiliser l'API C++ de V8. De ces deux méthodes en découle une troisième, évidente, qui consiste à mixer les deux précédentes.
&lt;/p&gt;

&lt;p &gt;
  Comme toujours, je ne serais trop vous conseiller de consulter la documentation. Pour la partie JavaScript, la &lt;a href=&quot;http://nodejs.org/api.html&quot;&gt;documentation&lt;/a&gt; de Node est certes un peu light à certains moments, mais en regardant en plus le code des &lt;/p&gt; &lt;p&gt;&lt;a href="http://algorithmique.net/Dev/2010/11/30/dvelopper-des-extensions-pour-nodejs.html"&gt;Lire la suite...&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
</feed>
