<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://www.truffot.fr/jerome/index.php/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/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Jérôme Truffot</title>
  <link>http://www.truffot.fr/jerome/index.php/</link>
  <atom:link href="http://www.truffot.fr/jerome/index.php/feed/rss2" rel="self" type="application/rss+xml"/>
  <description>Blog personnel de Jérôme Truffot</description>
  <language>fr</language>
  <pubDate>Tue, 10 Jan 2012 08:08:38 +0100</pubDate>
  <copyright>2009 © www.truffot.fr</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Astuce JSF : Expression Language et appel à fonctions</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2008/09/05/Astuce-JSF-%3A-Expression-Language-et-appel-a-fonctions</link>
    <guid isPermaLink="false">urn:md5:680e135a224142840557d14688c12b94</guid>
    <pubDate>Fri, 05 Sep 2008 10:05:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Programmation</category>
        <category>java</category><category>JSF</category>    
    <description>Là encore, je suis loin d'avoir l'expérience suffisante pour me décréter expert en JSF. Mais comme j'en fait au boulot, je partage cette astuce pour concaténer deux strings, et plus généralement pour appeler des fonctions depuis JSF. Rien de génial, c'est plutôt de la bidouille mais dans certains cas, ça peut être pratique.    &lt;p&gt;Je vais commencer par une petite présentation rapide de JSF en citant l'article &lt;a href=&quot;http://fr.wikipedia.org&quot; hreflang=&quot;fr&quot;&gt;wikipédia&lt;/a&gt; : &lt;a href=&quot;http://fr.wikipedia.org/wiki/JavaServer_Faces&quot; hreflang=&quot;fr&quot;&gt;Java Server Faces&lt;/a&gt; (abrégé en JSF) est un framework Java basé sur les composants, pour le développement d'applications Web , et fait partie du standard Java EE. Il suit la méthode de conception &lt;a href=&quot;http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur&quot; hreflang=&quot;fr&quot;&gt;Modèle-Vue-Contrôleur&lt;/a&gt;. Ce que j'appellerai simplement JSF dans la suite de ce billet est la &lt;strong&gt;vue&lt;/strong&gt;. C'est un assemblage de composants (appelés &quot;tags&quot;) qui font appel à un ou plusieurs contrôleurs (instance d'une classe Java) pour récupérer des données et les mettre en page. Les contrôleurs font le lien entre les vues et la logique métier (partie Modèle) qui récupère et/ou &quot;calcule&quot; les données.&lt;/p&gt;
&lt;p&gt;Voilà pour le principe. En pratique, on peut avoir besoin de faire des opérations très basiques dans la vue. Pour récupérer les données dans la vue via les contrôleurs, et faire ce opérations basiques, JSF utilise les &lt;a href=&quot;http://adiguba.developpez.com/tutoriels/j2ee/jsp/el/#L1&quot; hreflang=&quot;fr&quot;&gt;Expressions Languages&lt;/a&gt; (EL). Elles supportent l'appel aux getters des contrôleurs ainsi qu'aux méthodes de type &lt;em&gt;isQuelqueChose&lt;/em&gt; qui renvoient un booléen (pour les tests). Elles supportent également les opérateurs arithmétiques pour les types numériques ainsi que les opérateurs relationnels et logiques pour les types numériques, les booléens et les Strings.&lt;/p&gt;
&lt;p&gt;Ainsi, la première limitation est de ne pas pouvoir appeler les méthodes qu'on souhaite. Si vous avez un objet (bean) et que vous voulez appeler la méthode toto, vous écrivez &lt;code&gt;bean.toto&lt;/code&gt; (remarquer l'absence de parenthèse, &lt;strong&gt;on ne peut pas passer d'arguments !&lt;/strong&gt;). Et bien à l'exécution, les EL vont chercher à appeler la méthode &lt;code&gt;getToto()&lt;/code&gt; et non &lt;code&gt;toto()&lt;/code&gt;...&lt;/p&gt;
&lt;p&gt;Cependant, on peut utilisé des objets de type Map (beans mappés). Par exemple, on peut récupérer la map toto, attribut du contrôleur, via son getter, puis récupérer la valeur correspondante dans cette map à la clé tete (vous avez compris que je cherche à récupérer la valeur de la tête à Toto ! :D). Pour cela, on écrit &lt;code&gt;controleur.toto[&quot;tete&quot;]&lt;/code&gt;. Si j'avais voulu faire la même chose par une méthode toto qui prend un String comme argument, j'aurais écrit &lt;code&gt;controleur.toto(&quot;tete&quot;)&lt;/code&gt;... La différence n'est pas énorme ;-).&lt;/p&gt;
&lt;p&gt;Finalement, mettre des crochets à la place de parenthèses, ça n'a pas l'air si choquant... Enfin, il faut tout de même se dire que dans une utilisation &quot;normal&quot;, la map toto contiendra toutes les valeurs susceptibles d'être passer en argument. Ce n'est donc pas vraiment une vrai fonction. Si on ne s'intéresse qu'à une partie de l'anatomie de Toto, ça va. Si ma méthode toto se charge de concaténer un String au String passé en argument, il faut stocker tous les Strings possibles et imaginables ?! Bref, on ne va pas faire ça !&lt;/p&gt;
&lt;p&gt;L'astuce (appelée également bidouille ;-)), que je propose, consiste à utiliser une &quot;fausse&quot; map. On va se fabriquer une map qui ne stocke aucune information et dont la méthode &lt;code&gt;get&lt;/code&gt; fera le &quot;calcul&quot; qu'on souhaite. Pour cela, on va utiliser la classe &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/util/AbstractMap.html&quot; hreflang=&quot;fr&quot;&gt;AbstractMap&lt;/a&gt; du package standard &lt;strong&gt;java.util&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;private Map&amp;lt;String, String&amp;gt; toto =&lt;br /&gt;	new AbstractMap&amp;lt;String, String&amp;gt;() {&lt;br /&gt;		@Override&lt;br /&gt;		public Set&amp;lt;Entry&amp;lt;String, String&amp;gt;&amp;gt; entrySet() {&lt;br /&gt;			return null;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		@Override&lt;br /&gt;		public String get(final Object arg0) {&lt;br /&gt;			return &quot;PREFIX&quot; + arg0.toString();&lt;br /&gt;		}&lt;br /&gt;	};&lt;/pre&gt;
&lt;p&gt;Tout ça pour ça... Si c'est pas malheureux... &lt;img src=&quot;/jerome/themes/default/smilies/sad.png&quot; alt=&quot;:(&quot; class=&quot;smiley&quot; /&gt;&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Comparateurs génériques en Java</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2008/09/04/Comparateurs-generiques-en-Java</link>
    <guid isPermaLink="false">urn:md5:85c5540d09b3d78571b0dc0afe239cf3</guid>
    <pubDate>Thu, 04 Sep 2008 16:13:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Programmation</category>
        <category>comparateur</category><category>générique</category><category>java</category>    
    <description>&lt;p&gt;Il n'y a rien de plus énervant que d'écrire plusieurs fois la même chose. Et rien ne ressemble plus à un comparateur qu'un autre comparateur. Par exemple, trier des personnes suivant leur nom, leur âge, la couleur de leurs cheveux ou la taille de leur forte poitrine (spéciale dédicace à Elie Semoun ;-)), c'est un peu la même chose. Sans être un grand spécialiste du Java, je me suis intéressé aux génériques pour simplifier l'écriture de mes comparateurs.&lt;/p&gt;    &lt;p&gt;Le problème est le suivant : on veut comparer deux instances de la classe T (pour un tri par exemple) en comparant un de leurs attributs de classe E. On va écrire un comparateur générique pour mutualiser un maximum de chose. Évidemment, nos &quot;vrais&quot; comparateur en hériteront.&lt;/p&gt;
Notre comparateur générique implémente logiquement l'interface Comparator&amp;lt;T&amp;gt;. Pour cela, il implémente la méthode compare qui compare deux objets de classe T. L'idée générique est de comparer un attribut particulier (le même sur les deux objets) de classe E en utilisant un comparateur de E particulier. Deux problèmes se posent alors à nous.&lt;br /&gt;&lt;p&gt;Comment récupérer l'attribut sur lequel porte la comparaison ? La méthode qui récupère l'attribut qui nous intéresse est forcément spécifique à la classe T et à l'attribut. Pour se mettre d'accord sur la méthode qui renvoi l'attribut, le mieux serait d'imposer le nom de la méthode en héritant d'une interface. Cette méthode serait implémentée dans les &quot;vrais&quot; comparateurs. Là, comme le constructeur générique implémente déjà certaine méthode, il me semble que le mieux est de faire une méthode abstraite valueOf (ce qui doit être sensiblement la même chose qu'une interface...).&lt;/p&gt;
&lt;pre&gt;/**&lt;br /&gt;&amp;nbsp;* @param obj&lt;br /&gt;&amp;nbsp;* @return comparative value of the object&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;abstract E valueOf(final T obj);&lt;/pre&gt;D'où sort ce comparateur de E ? L'idéal aurait certainement été de pouvoir passer la classe de ce comparateur en tant que paramètre de notre comparateur générique. Malheureusement, je n'ai pas réussi un tel exploit. Les voix des générics java sont impénétrables ;-). La solution que je propose, c'est simplement de passer l'instance du comparateur de E au constructeur de notre comparateur générique.&lt;br /&gt;&lt;pre&gt;/**&amp;nbsp;* Intermediate comparator.&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;private Comparator&amp;lt;E&amp;gt; comparator;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;&amp;nbsp;* Constructor.&lt;br /&gt;&amp;nbsp;* @param c intermediate comparator&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public AbstractComparator(final Comparator&amp;lt;E&amp;gt; c) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; comparator = c;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;On a maintenant tout ce qu'il nous faut pour implémenter la méthode compare de l'interface Comparator&amp;lt;T&amp;gt;.&lt;/p&gt;
&lt;pre&gt;public int compare(final T o1, final T o2) {
&amp;nbsp;&amp;nbsp; return comparator.compare(valueOf(o1), valueOf(o2));&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Bien, ça semble déjà pas mal. Il manque tout de même un petit truc. Ce genre de comparateur, ça ne change pas beaucoup au cours de l'exécution. Ce serait dommage de créer une multitude d'instances d'un même comparateur. Bref, on va faire l'effort de mettre en place un beau design pattern Singleton ! :D&lt;/p&gt;
&lt;p&gt;Pour cela, on commence par passer le constructeur en protected. Ensuite, les comparateurs implémenteront une méthode de classe (static) getInstance. Cette méthode crée l'instance du comparateur si elle n'existe pas encore et la retourne. Rien que du classique... Trop classique même ! On ne va pas s'embêter à récrire tout ça à chaque fois ? Allez hop ! On va mutualiser le code dans le comparateur générique.&lt;/p&gt;
&lt;p&gt;L'idée est la suivante. Dans mon &quot;vrai&quot; comparateur, la méthode getInstance va appeler la méthode getInstance du comparateur générique dont il hérite avec en paramètre, le nom de sa classe (histoire que le comparateur générique s'y retrouve ;-). N'oubliez pas que du coup, le comparateur générique stocke toutes les instances de tous les comparateurs qui en dérivent !! Et pour les stocker, on va utiliser une simple map avec comme clé, la class des comparateurs. Cette map est forcément un attribut de classe.&lt;/p&gt;
&lt;pre&gt;private static Map&amp;lt;Class, Comparator&amp;gt; comparators;&lt;/pre&gt;&lt;p&gt;Ensuite, la méthode getInstance, méthode de classe également, prend une classe en paramètre et renvoi le comparateur correspondant. Cette méthode de classe est donc forcément générique, et son paramètre U implémente l'interface Comparator. Comme c'est la classe (et non une instance) qui est passée en argument, on va utiliser la méthode newInstance pour construire l'instance. En cas de problème, cette méthode lance des exceptions de type InstantiationException ou IllegalAccessException.&lt;/p&gt;
&lt;pre&gt;protected static &amp;lt;U extends Comparator&amp;gt; U getInstance(final Class&amp;lt;U&amp;gt; c)&amp;nbsp;&amp;nbsp; &amp;nbsp;throws InstantiationException, IllegalAccessException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (comparators == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators = new HashMap&amp;lt;Class, Comparator&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!comparators.containsKey(c)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(c, c.newInstance());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return (U) comparators.get(c);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Voilà notre super comparateur générique !&lt;/p&gt;
&lt;pre&gt;public abstract class AbstractComparator&amp;lt;T, E&amp;gt; implements Comparator&amp;lt;T&amp;gt; {&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * comparators.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private static Map&amp;lt;Class, Comparator&amp;gt; comparators;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * Intermediate comparator.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private Comparator&amp;lt;E&amp;gt; comparator;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * Bean constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param c comparator&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected AbstractComparator(final Comparator&amp;lt;E&amp;gt; c) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparator = c;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param &amp;lt;U&amp;gt; generic parameter of the class&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param c class of the researched comparator&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return the researched comparator&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws InstantiationException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws IllegalAccessException &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected static &amp;lt;U extends Comparator&amp;gt; U getInstance(final Class&amp;lt;U&amp;gt; c)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;throws InstantiationException, IllegalAccessException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (comparators == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators = new HashMap&amp;lt;Class, Comparator&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!comparators.containsKey(c)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(c, c.newInstance());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return (U) comparators.get(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o1&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o2&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return comparison between a1 and o2&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public int compare(final T o1, final T o2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return comparator.compare(valueOf(o1), valueOf(o2));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param obj&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return comparative value of the object&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;abstract E valueOf(final T obj);&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Passons à l'implémentation d'un comparateur ABComparator héritant de ce comparateur générique. Je dispose des ingrédients suivants. Une classe A possède un attribut value de type B sur lequel repose la comparaison. Elle possède également une méthode getValue qui permet de récupérer cet attribut. Enfin, je dispose d'un comparateur de B appelé BComparator.&lt;/p&gt;
&lt;pre&gt;public class ABComparator extends AbstractComparator&amp;lt;A, B&amp;gt; {&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * Constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws IllegalAccessException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws InstantiationException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;protected ABComparator() throws InstantiationException, IllegalAccessException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;super(getInstance(BComparator.class));&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @see org.esupportail.ca.domain.beans.comparators.AbstractComparator#valueOf(java.lang.Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@Override&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public B valueOf(final A a) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (a == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return null;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return a.getValue();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return the ABComparator instance&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws InstantiationException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws IllegalAccessException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static ABComparator getInstance() throws InstantiationException, IllegalAccessException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return getInstance(ABComparator.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Simple et rapide à écrire ! Maintenant, les comparateurs, ça dépote ! :D Enfin presque... Encore faut-il avoir le comparateur de B sous la main. Par exemple, si B est String ou un type de base, il faut écrire les comparateurs correspondants... &lt;/p&gt;
&lt;p&gt;Le pire, c'est que la plupart de ces types de base implémente l'interface Comparable. C'est-à-dire qu'il possède une méthode compareTo pour comparer une instance à une autre passée en argument. Du coup, on se retrouve à récrire pour toutes ces classes la même méthode compare qui teste si la première instance est nulle, et si elle ne l'est pas, elle retourne le résultat de la méthode compareTo appliquée à cette instance. Bref, c'est laborieux. Simplifions nous la vie avec les génériques !! :D&lt;/p&gt;
&lt;p&gt;On va donc écrire un comparateur générique pour les classes implémentant l'interface Comparable.&lt;/p&gt;
&lt;pre&gt;public class ComparableComparator&amp;lt;T extends Comparable&amp;lt;T&amp;gt;&amp;gt; implements Comparator&amp;lt;T&amp;gt; {&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * Constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public ComparableComparator() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;super();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o1 first object to compare&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o2 second object to compare&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return comparison result&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public int compare(final T o1, final T o2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (o1 == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (o2 == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return o1.compareTo(o2);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Parfait, maintenant je peux initialiser par exemple mon comparateur de String : new ComparableComparator&amp;lt;String&amp;gt;(). Super, mais il se repose le problème de l'unicité de l'instance pour ces comparateurs. &quot;Singleton, singleton, singleton !&quot; hurlent mes compagnons ! Sous la pression populaire, je m'exécute ! :D&lt;/p&gt;
&lt;p&gt;Vous avez compris le coup de la map pour stocker les instances. Le problème avec les génériques en Java, c'est qu'on ne peut pas instancier une classe générique comme tout à l'heure avec le newInstance (ou alors je ne sais pas faire ;-)). Par exemple, je ne peux écrire ComparableComparator&amp;lt;String&amp;gt;.newInstance. De même, ComparableComparator&amp;lt;String&amp;gt;.class n'est pas correct et je ne peux pas le passer en argument d'une méthode. Du coup, la seule solution que j'ai trouvé pour le moment, c'est d'instancier les comparateurs un par un à la main, dans une zone static du ComparableComparator... Comme je disais, je ne suis pas un grand spécialiste de ce langage mais il me semble que ça fait parti des limitations un peu embêtantes des génériques en Java... Dommage...&lt;/p&gt;
&lt;pre&gt;/**&amp;nbsp;* comparators.&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;private static Map&amp;lt;Class, ComparableComparator&amp;gt; comparators = new HashMap&amp;lt;Class, ComparableComparator&amp;gt;();&lt;br /&gt;static {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(Date.class, new ComparableComparator&amp;lt;Date&amp;gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(String.class, new ComparableComparator&amp;lt;String&amp;gt;());&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Ensuite, la méthode getInstance prend la classe &quot;Comparable&quot; en argument. Si le comparateur correspondant n'est pas dans la map, une InstantiationException est lancée.&lt;/p&gt;
&lt;pre&gt;public static &amp;lt;E extends Comparable&amp;lt;E&amp;gt;&amp;gt; ComparableComparator getInstance(final Class&amp;lt;E&amp;gt; c)&amp;nbsp;&amp;nbsp; &amp;nbsp;throws InstantiationException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!comparators.containsKey(c)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;throw new InstantiationException(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&quot;No ComparableComparator could be initialized for the class &quot; + c);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;return comparators.get(c);&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Voilà encore un joli exemple de l'utilité et des limites des génériques en Java ! :D&lt;/p&gt;
&lt;pre&gt;/**&amp;nbsp;* Generic comparator for class which implements the Comparable interface.&lt;br /&gt;&amp;nbsp;* @param &amp;lt;T&amp;gt; the generic comparable class&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class ComparableComparator&amp;lt;T extends Comparable&amp;lt;T&amp;gt;&amp;gt; implements Comparator&amp;lt;T&amp;gt; {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * comparators.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private static Map&amp;lt;Class, ComparableComparator&amp;gt; comparators = new HashMap&amp;lt;Class, ComparableComparator&amp;gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;static {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(Date.class, new ComparableComparator&amp;lt;Date&amp;gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;comparators.put(String.class, new ComparableComparator&amp;lt;String&amp;gt;());&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * Constructor.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;private ComparableComparator() {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;super();&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param &amp;lt;E&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param c&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return the corresponding ComparableComparator&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @throws InstantiationException&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;@SuppressWarnings(&quot;unchecked&quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public static &amp;lt;E extends Comparable&amp;lt;E&amp;gt;&amp;gt; ComparableComparator getInstance(final Class&amp;lt;E&amp;gt; c)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;throws InstantiationException {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (!comparators.containsKey(c)) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;throw new InstantiationException(&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&quot;No ComparableComparator could be initialized for the class &quot; + c);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return comparators.get(c);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;/**&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o1 first object to compare&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @param o2 second object to compare&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @return comparison result&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; */&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;public int compare(final T o1, final T o2) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (o1 == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if (o2 == null) {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return -1;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;return o1.compareTo(o2);&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>k-Splittable Delay Constrained Routing Problem : A Branch-and-Price Approach</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/10/k-Splittable-Delay-Constrained-Routing-Problem-%3A-A-Branch-and-Price-Approach2</link>
    <guid isPermaLink="false">urn:md5:bd993e21032f005337cb4db5e1c6f34c</guid>
    <pubDate>Mon, 10 Sep 2007 17:42:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>k-splittable flow</category><category>rapport recherche</category><category>routage</category>    
    <description>&lt;p&gt;Jé́rôme Truffot, Christophe Duhamel, Philippe Mahey.&lt;br /&gt;
&lt;a href=&quot;http://www.isima.fr/limos/publi/RR-06-08.pdf&quot; hreflang=&quot;fr&quot;&gt;Rapport de recherche RR-06-08&lt;/a&gt;, LIMOS, Aubière, France, 2006.&lt;br /&gt;
En ré́vision dans &lt;a href=&quot;http://www3.interscience.wiley.com/cgi-bin/jhome/32046&quot; hreflang=&quot;fr&quot;&gt;Networks&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;Routing problems which include a QoS based path control play a key role in broadband communication networks. We analyze here an algorithmic procedure based on a branch and price algorithm and on the flow deviation method to solve a non-linear k-splittable flow problem. The model can support end-to-end delay bounds on each path and we compare the behaviour of the algorithm with and without these constraints. The trade-off between QoS guaranties and CPU time is clearly established and we show that minimizing the average delay on all arcs will yield solutions close to the optimal one at a significant computational saving.&lt;/p&gt;


&lt;pre&gt;
@TECHREPORT{Truffot06b,
  author = {J{\'e}r{\^o}me Truffot and Christophe Duhamel and Philippe Mahey},
  title = {{k-Splittable Delay Constrained Routing Problem: A Branch and Price Approach}},
  institution = {LIMOS},
  year = {2006},
  number = {RR-06-08},
  address = {Aubi{\`e}re, France}
}
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>A Branch and Price Algorithm for the k-splittable Maximum Flow Problem</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/10/k-Splittable-Delay-Constrained-Routing-Problem-%3A-A-Branch-and-Price-Approach</link>
    <guid isPermaLink="false">urn:md5:fe8ba20a9b2b28325fa33cb562238c48</guid>
    <pubDate>Mon, 10 Sep 2007 17:28:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>flot maximal</category><category>k-splittable flow</category><category>rapport recherche</category>    
    <description>&lt;p&gt;Jé́rôme Truffot, Christophe Duhamel.&lt;br /&gt;
&lt;a href=&quot;http://www.isima.fr/limos/publi/RR-06-04.pdf&quot; hreflang=&quot;fr&quot;&gt;Rapport de recherche RR-06-04&lt;/a&gt;, LIMOS, Aubière, France, 2006.&lt;br /&gt;
En révision dans &lt;a href=&quot;http://www.elsevier.com/wps/find/journaldescription.cws_home/702998/description#description&quot; hreflang=&quot;fr&quot;&gt;Discrete Optimization&lt;/a&gt;.&lt;/p&gt;    &lt;p&gt;The Maximum Flow Problem with flow width constraints is a NP-hard problem. Two models are proposed: the first model is a compact node-arc model using two flow conservation blocks per path. For each path, one block defines the path while the other one send the right amount of flow on it. The second model is an extended arc-path model. It is obtained from the first model after a Dantzig-Wolfe reformulation. it is an extended model as it relies on the set of all the paths between the source and the sink nodes. Some symmetry breaking constraints are used to improve the model. A branch and price algorithm is proposed to solve the problem. The column generation reduces to the computation of a shortest path whose cost depends on weights on the arcs and on the path capacity. A polynomial time algorithm is proposed to solve this subproblem. Computational results are shown on a set of medium-sized instances to show the effectiveness of our approach.&lt;/p&gt;


&lt;pre&gt;
@TECHREPORT{Truffot06a,
  author = {J{\'e}r{\^o}me Truffot and Christophe Duhamel},
  title = {{A Branch and Price Algorithm for the k-splittable Maximum Flow Problem}},
  institution = {LIMOS},
  year = {2006},
  number = {RR-06-04},
  address = {Aubi{\`e}re, France}
}
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Bounding the number of light paths for robust LSP routing</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/10/Bounding-the-number-of-light-paths-for-robust-LSP-routing</link>
    <guid isPermaLink="false">urn:md5:803b0b6bbf2fc6485a29a33e0a1f0360</guid>
    <pubDate>Mon, 10 Sep 2007 17:17:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>conférence</category><category>MPLS</category><category>proceedings</category><category>routage</category>    
    <description>    &lt;p&gt;Philippe Mahey, Jérôme Truffot&lt;br /&gt;
in &lt;a href=&quot;http://www.nottingham.ac.uk/eee/icton/&quot; hreflang=&quot;fr&quot;&gt;8th International Conference on Transparent Optical Networks (ICTON 2006)&lt;/a&gt;,&lt;br /&gt;
pages 18, Nottingham, UK, June 2006&lt;/p&gt;


&lt;p&gt;(&lt;a href=&quot;http://www.cost293.org/&quot; hreflang=&quot;fr&quot;&gt;GRAAL&lt;/a&gt; Annual Conference 2006)&lt;/p&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Using Branch-and-Price to Solve Multicommodity k-Splittable Flow Problems</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/10/Using-Branch-and-Price-to-Solve-Multicommodity-k-Splittable-Flow-Problems</link>
    <guid isPermaLink="false">urn:md5:030d67759170f0dfe478047e987f2c7e</guid>
    <pubDate>Mon, 10 Sep 2007 16:38:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>conférence</category><category>k-splittable flow</category><category>proceedings</category>    
    <description>&lt;p&gt;Jérôme Truffot, Christophe Duhamel, Philippe Mahey&lt;br /&gt;
dans &lt;a href=&quot;http://www.inoc2005.fc.ul.pt/&quot; hreflang=&quot;fr&quot;&gt;The Proceedings of 2005 International Network Optimisation Conférence&lt;/a&gt;,&lt;br /&gt;
20-23 mars 2005, Lisbonne, Portugal&lt;/p&gt;    &lt;p&gt;In this paper we present a column generation model and a branch-and-price algorithm for a multicommodity k-splittable flow problem. The k-splittable flow is an extension of the unsplittable flow. It has been introduced by Baier, Köhler and Skutella in [4]. This flow can be split into at most k paths. The k-splittable flow is used to study path limitation constraints in classical flow problems. In this paper we consider only the maximal k-splittable flow problem.
First we formulate this problem with two sets of variables for each one of the k paths: path design variables and flow variables. This leads to a large linear mixed integer program with two types of variables. The subproblem is not exactly an unsplittable flow problem since the amount of flow is not known. This degree of freedom complexifies this problem. Moreover the flow conservation constraint alone does not ensure  that the decision variables define a single path since any set of directed cycles satisfies this constraint. So an additional constraint is put on each nodes cocycle. It allows only sets of disjoint directed cycles.&lt;/p&gt;


&lt;p&gt;Next we present a path decomposition on this model, which gives us an exponential edge-path model. Then a Branch-and-Price algorithm is applied. The branching strategy is based on the work of Barnhart and al. for the integer multicommodity flow problem [5]. The column generation subproblem can be seen as a shortest path problem with &quot;high&quot; enough capacity. We propose a polynomial time algorithm to solve this subproblem. Computational results are improved by introducing strategies like variable ordering and storing paths in a pool. Finally numerical results are reported for the different strategies and with a direct MIP approach.&lt;/p&gt;


&lt;pre&gt;
@inproceedings{Truffot05b,
 author = {J{\'e}r{\^o}me Truffot and Christophe Duhamel and Philippe Mahey},
 title = {{Using Branch-and-Price to Solve Multicommodity k-Splittable
              Flow Problems}},
 booktitle = {The Proceedings of 2005 International Network Optimisation 
                    Conference},
 dates = {20-23 mars}
 year = {2005},
 pages = {811--816},
 location = {Lisbonne, Portugal},
}
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.truffot.fr/jerome/public/publications/inoc05-res.pdf"
      length="72713" type="application/pdf" />
          <enclosure url="http://www.truffot.fr/jerome/public/publications/inoc05-pres.pdf"
      length="257285" type="application/pdf" />
    
    
      </item>
    
  <item>
    <title>Branch &amp; Price pour le problème du multiflot k-séparable de coût minimal</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/09/Branch-Price-pour-le-probleme-du-multiflot-k-separable-de-cout-minimal</link>
    <guid isPermaLink="false">urn:md5:c9d6ede36b9afe15f17e2d1410af7b0b</guid>
    <pubDate>Sun, 09 Sep 2007 15:48:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>conférence</category><category>flot coût min</category><category>k-splittable flow</category><category>proceedings</category>    
    <description>&lt;p&gt;Jérôme Truffot, Christophe Duhamel, Philippe Mahey&lt;br /&gt;
dans les &lt;a href=&quot;http://www.ocea.li.univ-tours.fr/roadef05/&quot; hreflang=&quot;fr&quot;&gt;Actes du 6ème congrès ROADEF&lt;/a&gt;,&lt;br /&gt;
14-16 février 2005, Tours, France, pages 357-358&lt;/p&gt;    &lt;pre&gt;
@inproceedings{Truffot05a,
 author = {J{\'e}r{\^o}me Truffot and Christophe Duhamel and Philippe Mahey},
 title = {{Branch \&amp;amp; Price pour le probl{\`e}me du multiflot $k$-s{\'e}parable de 
              co{\^u}t minimal}},
 booktitle = {les Actes du $6^{\text{{\`e}me}}$ congr{\`e}s ROADEF},
 dates = {14-16 f{\'e}vrier}
 year = {2005},
 pages = {357--358},
 location = {Tours, France},
}
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.truffot.fr/jerome/public/publications/roadef05-res.ps"
      length="86751" type="application/postscript" />
          <enclosure url="http://www.truffot.fr/jerome/public/publications/roadef05-pres.pdf"
      length="494001" type="application/pdf" />
    
    
      </item>
    
  <item>
    <title>Modélisation des problèmes de routage dans les réseaux GMPLS</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/09/Modelisation-des-problemes-de-routage-dans-les-reseaux-GMPLS</link>
    <guid isPermaLink="false">urn:md5:a8b1245d1ea4f9b0368896c988ac90d4</guid>
    <pubDate>Sun, 09 Sep 2007 15:41:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>MPLS</category><category>rapport recherche</category><category>routage</category>    
    <description>&lt;p&gt;Jérôme Truffot, Bruno Bachelet, Philippe Mahey.&lt;br /&gt;
Rapport de recherche LIMOS/RR04-24, Laboratoire LIMOS, Université Blaise Pascal.&lt;br /&gt;
2004, Clermont-Ferrand, France.&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://www.isima.fr/limos/publi/RR-04-24.pdf&quot; title=&quot;http://www.isima.fr/limos/publi/RR-04-24.pdf&quot;&gt;http://www.isima.fr/limos/publi/RR-...&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Cet article présente une analyse et une modélisation des problèmes de routage rencontrés dans les réseaux de communications GMPLS. Nous expliquons en quoi les protocoles de type MPLS et les réseaux optiques modifient les problématiques de routage classiques. De plus, nous considérons des contraintes de qualité de service (QoS), la structure multicouche du réseau et des aspects de sécurisation, permettant de prévenir et de réagir aux pannes. Plusieurs modèles non linéaires pour représenter ces différents aspects, ainsi que des pistes pour les résoudre, sont proposés.&lt;/p&gt;


&lt;pre&gt;
@techreport{Truffot2006,
 author = {Jérôme Truffot and Bruno Bachelet and Philippe Mahey},
 title = {{Modélisation des problèmes de routage dans les réseaux GMPLS}},
 institution = {{LIMOS, Université Blaise Pascal, Clermont-Ferrand, France}},
 year = {2004}
}
&lt;/pre&gt;</description>
    
    
    
      </item>
    
  <item>
    <title>Le problème de flot maximal avec contrainte sur le nombre de chemins</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/09/Le-probleme-de-flot-maximal-avec-contrainte-sur-le-nombre-de-chemins</link>
    <guid isPermaLink="false">urn:md5:9f938f4b47e63d6bd5417c0d90c99193</guid>
    <pubDate>Sun, 09 Sep 2007 15:29:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Publications</category>
        <category>conférence</category><category>flot maximal</category><category>k-splittable flow</category><category>proceedings</category>    
    <description>&lt;p&gt;Jérôme Truffot, Christophe Duhamel, Philippe Mahey&lt;br /&gt;
dans les &lt;a href=&quot;http://www.francoro.ch/&quot; hreflang=&quot;fr&quot;&gt;Actes de la 4ème conférence Francoro&lt;/a&gt;,&lt;br /&gt;
18-21 août 2004, Fribourg, Suisse&lt;/p&gt;    &lt;pre&gt;
@inproceedings{Truffot04,
 author = {J{\'e}r{\^o}me Truffot and Christophe Duhamel and Philippe Mahey},
 title = {{Le probl{\`e}me de flot maximal avec contrainte sur 
            le nombre de chemins}},
 booktitle = {dans les Actes de la $4^{\text{{\`e}me}} conf{\'e}rence Francoro},
 dates = {18-21 ao{\^u}t}
 year = {2004},
 pages = {43},
 location = {Fribourg, Suisse},
}
&lt;/pre&gt;</description>
    
          <enclosure url="http://www.truffot.fr/jerome/public/publications/francoroIV-pres.pdf"
      length="418450" type="application/pdf" />
    
    
      </item>
    
  <item>
    <title>Curriculum Vitae</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/09/08/Curriculum-Vitae</link>
    <guid isPermaLink="false">urn:md5:b3981a0e9145584b6a4eb8efb5a0282b</guid>
    <pubDate>Sat, 08 Sep 2007 20:02:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
            
    <description>&lt;h3&gt;Jérôme Truffot - Ingénieur en informatique&lt;/h3&gt;


&lt;p&gt;28 ans, célibataire&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;mailto:%6a%65%72%6f%6d%65%2e%74%72%75%66%66%6f%74%2e%32%30%30%33%5b%61%74%5d%61%6e%65%6c%69%73%2e%69%73%69%6d%61%2e%66%72&quot; hreflang=&quot;fr&quot;&gt;jerome.truffot.2003[at]anelis.isima.fr&lt;/a&gt; - &lt;a href=&quot;http://jerome.truffot.fr&quot; hreflang=&quot;fr&quot;&gt;http://jerome.truffot.fr&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Apt 36 - Résidence Alméria, 39 bd Pochet-Lagaye, 63000 Clermont-Ferrand&lt;/p&gt;    &lt;hr /&gt;


&lt;h4&gt;Formation&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2003 - 2007&amp;nbsp;: &lt;strong&gt;Thèse en informatique&lt;/strong&gt; au &lt;a href=&quot;http://www.isima.fr/limos&quot; hreflang=&quot;fr&quot;&gt;LIMOS-CNRS UMR 6158&lt;/a&gt;, &lt;a href=&quot;http://www.univ-bpclermont.fr/&quot; hreflang=&quot;fr&quot;&gt;Université Blaise Pascal&lt;/a&gt;, Clermont-Ferrand, soutenance prévue fin octobre
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sujet&lt;/em&gt;&amp;nbsp;: Conception de réseaux haut débit sous contraintes de sécurisation.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Thèmes de recherche&lt;/em&gt;&amp;nbsp;: recherche opérationnelle, optimisation combinatoire, optimisation convexe, programmation linéaire, optimisation dans les réseaux.&lt;/li&gt;
&lt;li&gt;Participation au projet &lt;a href=&quot;http://www-sop.inria.fr/mascotte/PRESTO/&quot; hreflang=&quot;fr&quot;&gt;PRESTO&lt;/a&gt; de l'&lt;a href=&quot;http://acisi.loria.fr/&quot; hreflang=&quot;fr&quot;&gt;ACI CNRS&lt;/a&gt; Sécurité Informatique.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;2000 - 2003&amp;nbsp;: &lt;strong&gt;Diplôme d'Ingénieur en Informatique&lt;/strong&gt; de l'&lt;a href=&quot;http://www.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ISIMA&lt;/a&gt;. (Institut Supérieur d'Informatique, de Modélisation et de leurs Applications), Clermont-Ferrand.&lt;br /&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Option&lt;/em&gt;&amp;nbsp;: Calcul et Modélisation Scientifiques.&lt;/p&gt;

&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;1997 - 2000&amp;nbsp;: &lt;strong&gt;Classes préparatoires&lt;/strong&gt;, section mathématiques et physique au &lt;a href=&quot;http://lyc21-carnot.ac-dijon.fr/&quot; hreflang=&quot;fr&quot;&gt;lycée Carnot&lt;/a&gt; de Dijon.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;1997&amp;nbsp;: &lt;strong&gt;Baccalauréat scientifique&lt;/strong&gt;, spécialité mathématique, mention Assez Bien, au &lt;a href=&quot;http://www.ac-dijon.fr/visiteur/annuaire_individu.php?etat=detail&amp;amp;ref=201&quot; hreflang=&quot;fr&quot;&gt;lycée Chevalier d'Eon&lt;/a&gt; de Tonnerre.&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;


&lt;h4&gt;Expérience professionnelle&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;2005 - 2007&amp;nbsp;: &lt;strong&gt;Attaché Temporaire d'Enseignement et de Recherche&lt;/strong&gt; à l'&lt;a href=&quot;http://www.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ISIMA&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Programmation numérique&lt;/em&gt;&amp;nbsp;: cours/TD/TP, niveau 1ère année.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Développement objet / C++&lt;/em&gt;&amp;nbsp;: encadrement de TP, niveau 2ème et 3ème année.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Algorithmique&lt;/em&gt;&amp;nbsp;: cours/TD, niveau 1ère année.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Recherche opérationnelle / Mathématiques&lt;/em&gt;&amp;nbsp;: cours/TD, niveau 1ère année N+I (étudiants étrangers).&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;2003 - 2005&amp;nbsp;: &lt;strong&gt;Vacations&lt;/strong&gt; à l'&lt;a href=&quot;http://www.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ISIMA&lt;/a&gt;, encadrement de projets étudiants.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Avr. 2003 - Sep. 2003&amp;nbsp;: &lt;strong&gt;Stage de 5 mois&lt;/strong&gt; au &lt;a href=&quot;http://www.isima.fr/limos&quot; hreflang=&quot;fr&quot;&gt;LIMOS-CNRS UMR 6158&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sujet&lt;/em&gt;&amp;nbsp;: Étude du problème du flot maximal avec limitation du nombre de chemins.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Langages utilisés&lt;/em&gt;&amp;nbsp;: C, C++.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environnement de développement&lt;/em&gt;&amp;nbsp;: Unix.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;Avr. 2002 - Sep. 2002&amp;nbsp;: &lt;strong&gt;Stage de 5 mois&lt;/strong&gt; au &lt;a href=&quot;http://wwwlisc.clermont.cemagref.fr/&quot; hreflang=&quot;fr&quot;&gt;LISC&lt;/a&gt;, unité de recherche du &lt;a href=&quot;http://www.clermont.cemagref.fr/&quot; hreflang=&quot;fr&quot;&gt;CEMAGREF&lt;/a&gt; de Clermont-Ferrand.
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Sujet&lt;/em&gt;&amp;nbsp;: Réalisation d'une interface d'exploration de simulations.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Langages utilisés&lt;/em&gt;&amp;nbsp;: Java, XML.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Environnement de développement&lt;/em&gt;&amp;nbsp;: Windows.&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;


&lt;h4&gt;Compétences&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Recherche opérationnelle&lt;/em&gt;&amp;nbsp;: Programmation linéaire, optimisation combinatoire, optimisation convexe, programmation numérique.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Langages de programmation&lt;/em&gt;&amp;nbsp;: C/C++, Fortran, Java, Perl, Scheme, Caml.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Autres langages&lt;/em&gt;&amp;nbsp;: HTML, XML, XSL, XML Schema, Latex.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Systèmes d'exploitation&lt;/em&gt;&amp;nbsp;: Unix, GNU/Linux, Windows.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Outils spécialisés&lt;/em&gt;&amp;nbsp;: CPLEX, MatLab.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Module suivi en complément&lt;/em&gt;&amp;nbsp;: Bioinformatique.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Langues&lt;/em&gt;&amp;nbsp;: Anglais (bon niveau), Allemand (notions).&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;


&lt;h4&gt;Charges collectives&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Juin 2006&amp;nbsp;: Membre du comité d'organisation de la Xème journée de l'école doctorale Sciences Pour l'Ingénieur.&lt;/li&gt;
&lt;li&gt;Avr. 2005&amp;nbsp;: Membre du comité d'organisation des journées de présentation des sujets de thèse par les doctorants de 1ère année de l'école doctorale Sciences Pour l'Ingénieur.&lt;/li&gt;
&lt;li&gt;Fév. 2004&amp;nbsp;: Membre du comité d'organisation du forum doctorant entreprise.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;&lt;/pre&gt;

&lt;hr /&gt;


&lt;h4&gt;Publications&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;à faire&lt;/code&gt;&lt;/p&gt;


&lt;hr /&gt;


&lt;h4&gt;Activités annexes&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Trésorier de l'&lt;a href=&quot;http://anelis.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ANELIS&lt;/a&gt;, l'association des ANciens ELèves de l'&lt;a href=&quot;http://www.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ISIMA&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Développement du site internet de l'&lt;a href=&quot;http://anelis.isima.fr&quot; hreflang=&quot;fr&quot;&gt;ANELIS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Randonnées pédestres.&lt;/li&gt;
&lt;/ul&gt;</description>
    
          <enclosure url="http://www.truffot.fr/jerome/public/cv.pdf"
      length="52347" type="application/pdf" />
    
    
      </item>
    
  <item>
    <title>Les Puys de la Vache et de Lassolas</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/08/05/Les-Puys-de-la-Vache-et-de-Lassolas</link>
    <guid isPermaLink="false">urn:md5:a8306ceeba3fbfb74b8c1c6c84055834</guid>
    <pubDate>Sun, 05 Aug 2007 16:38:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Randonnées</category>
        <category>Auvergne</category><category>chaîne des Puys</category><category>randos</category>    
    <description>&lt;p&gt;Après une semaine agréable où la température n'a cessé d'augmenter, ce dimanche a probablement été le jour le plus chaud de cet été. Donc pour profiter pleinement de ma randonnée dominicale, je suis allé chercher la fraicheur matinale. Départ à 8h de la &lt;a href=&quot;http://www.parc-volcans-auvergne.com&quot; hreflang=&quot;fr&quot;&gt;maison du parc des volcans&lt;/a&gt;, direction les Puys de la Vache et de Lassolas à travers les cheires boisées et les brumes matinales.&lt;/p&gt;    &lt;p&gt;Ces deux puys jumeaux ont des cratères engueulés&lt;sup&gt;[&lt;a href=&quot;http://www.truffot.fr/jerome/index.php/post/2007/08/05/Les-Puys-de-la-Vache-et-de-Lassolas#pnote-4-1&quot; id=&quot;rev-pnote-4-1&quot;&gt;1&lt;/a&gt;]&lt;/sup&gt; leur conférant cette forme si particulière de croissant. Culminant respectivement à 1167 et 1187 mètres, ils offrent un magnifique panorama sur la chaine des puys et la campagne environnante. On peut y admirer le Puy de Dôme au nord, le massif du Sancy au sud-ouest ainsi qu'une multitude de puys boisés tout autour. Contrairement à ces derniers, leurs sommets sont quasiment dépourvues de végétation et sont recouverts essentiellement de grains de &lt;a href=&quot;http://fr.wikipedia.org/wiki/Pouzzolane&quot; hreflang=&quot;fr&quot;&gt;pouzzolane&lt;/a&gt;, cette roche volcanique rouge ou noire présente sur de nombreux puys auvergnats. La vue s'en trouve d'autant plus dégagée et l'impression de vide démultipliée (amis &lt;a href=&quot;http://fr.wikipedia.org/wiki/Acrophobie&quot; hreflang=&quot;fr&quot;&gt;acrophobes&lt;/a&gt;, le panorama en vaut la peine mais allez-y accompagné, ce serait dommage de rester bloqué au milieu de la pente ;-)).&lt;/p&gt;


&lt;p&gt;Heureusement que le paysage vaut la peine d'accomplir tous ces efforts car les montées, heureusement relativement courtes, font fonctionner à plein régime coeur, poumons et une multitude de muscles dont j'ignore les noms. Pires encore, les descentes, tout aussi raides, sont casse-pattes et révèle à la perfection les muscles utilisés dans ce type d'exercice. C'est facile, c'est là où on a mal ;-). Si bien que le retour sur le plancher des vaches, et ses pentes plus acceptables, donne envie de se dégourdir les jambes en marchant de plus belle. On jettera néanmoins un oeil curieux et émerveillé sur le splendide paysage lunaire, au pied du Puy de la Vache, composé d'éboulis de pouzzolane rouge et noire et de bombes de lave sur un terrain dégagé, spectacle ahurissant au milieu de la forêt.&lt;/p&gt;


&lt;p&gt;Après deux heures à crapahuter dans les collines, j'avais hâte d'attaquer la deuxième partie de ma randonnée qui me mène jusqu'au Puy de Vichatel par les GR 4 - GR 441. De grands chemins parcourent la forêt à l'abris de la chaleur. Je m'adonne alors entièrement au plaisir de la randonnée. Mes jambes s'affolent dans un rythme effréné. Une impression de légèreté me fait voler à travers la vallée. Au comble de mon bonheur, je distance pour un moment la horde de mouches sanguinaires qui me suit depuis mon départ et qui ne faisait rien qu'à m'embêter ...&lt;/p&gt;


&lt;p&gt;Le Puy de Vichatel en lui-même n'apporte pas grand chose. D'autant plus que je me suis légèrement perdu dans la montée (j'ai du me tromper à un embranchement ... bref passons ... ;-)). Le cratère au sommet est assez impressionnant mais ça ne vaut pas le &lt;a href=&quot;http://fr.wikipedia.org/wiki/Puy_de_Pariou&quot; hreflang=&quot;fr&quot;&gt;Pariou&lt;/a&gt;. Dans la descente, on a un point de vue intéressant sur les Puys de la Vache et de Lassolas mais c'est tout. De retour à la voiture après 4h de balade, mes pieds étaient heureux que j'achève là leur calvaire et, moi-même, j'étais heureux qu'ils aient si bien supportés cette épreuve. En début d'après-midi, au paroxysme de la chaleur, chacun se réjouit d'une douche salvatrice et d'une sieste réparatrice ... Quel beau dimanche&amp;nbsp;!&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://www.geoportail.fr/visu2D.do?cg=djoxLjEqYzptZXRyb3BvbGUqY3Y6MS4wKnZ2OjEuMSp4eToyLjk1ODU1NzQzMTI2OTMyOTV8NDUuNjk2ODQ3MzkxODYzODYqczo4KnB2OjEuMCpwOmRlY291dmVydGUqbDpTY2FufDF8MTAwfDI%3D&quot; hreflang=&quot;fr&quot;&gt;L'itinéraire sur Géoportail&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/jerome.truffot/LesPuysDeLaVacheEtDeLassolas&quot; hreflang=&quot;fr&quot;&gt;Quelques photos&lt;/a&gt;&amp;nbsp;:&lt;/p&gt;

&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://picasaweb.google.com/s/c/bin/slideshow.swf&quot; width=&quot;600&quot; height=&quot;400&quot; flashvars=&quot;host=picasaweb.google.com&amp;captions=1&amp;noautoplay=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjerome.truffot%2Falbumid%2F5096007642374771425%3Fkind%3Dphoto%26alt%3Drss&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;

&lt;div class=&quot;footnotes&quot;&gt;&lt;h4&gt;Notes&lt;/h4&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.truffot.fr/jerome/index.php/post/2007/08/05/Les-Puys-de-la-Vache-et-de-Lassolas#rev-pnote-4-1&quot; id=&quot;pnote-4-1&quot;&gt;1&lt;/a&gt;] &lt;a href=&quot;http://fr.wikipedia.org/wiki/Puy_de_Lassolas&quot; hreflang=&quot;fr&quot;&gt;l'un des cotés a explosé&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
</description>
    
    
    
      </item>
    
  <item>
    <title>Le lac d'Aydat</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/07/29/Le-lac-dAydat</link>
    <guid isPermaLink="false">urn:md5:7c705c6002b828d14addbe4f2c3d49fe</guid>
    <pubDate>Sun, 29 Jul 2007 18:34:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Randonnées</category>
        <category>Auvergne</category><category>Aydat</category><category>randos</category>    
    <description>&lt;p&gt;Encore un beau dimanche ensoleillé. Je ne boude pas mon plaisir et je pars en randonnée, direction le lac d'Aydat à une vingtaine de minutes de Clermont-Ferrand&amp;nbsp;: probablement le lac préféré des clermontois en été. Quand il fait beau et chaud, la berge aménagée est prise d'assaut par une horde de baigneurs assoiffés de fraicheur. Enfin, quand, comme moi, on arrive vers 9h15 un dimanche matin, c'est plutôt calme ;-).&lt;/p&gt;


&lt;p&gt;Un grand beau temps et une fraicheur matinale exquise m'ont donc  accompagné durant toute cette balade qui consiste à faire le (grand &lt;img src=&quot;/jerome/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; tour du lac. Le panneau de cette petite randonnée prévoie un parcourt de 12,5 Km pour une durée de 3h45. Néanmoins, il n'y a aucune vrai difficulté, pas de puy à grimper, pas de descente vertigineuse, pour tout dire un terrain assez plat en comparaison d'autres balades à faire dans la région. Bref, elle a tout pour me plaire cette rando et je n'ai rien regretté :D.&lt;/p&gt;    &lt;p&gt;Pour commencer, on tourne le dos au lac et on part plein ouest, direction la chaine des puys. Ce lac tant promis par la dénomination même de la randonnée se fera pourtant attendre jusqu'aux derniers kilomètres, pour apparaitre sous son meilleur profil (le coquin ;-)). On traverse quelques villages des alentours, aussi calme qu'un dimanche matin. Le temps pour le coeur de prendre son rythme et pour les jambes de se délier, la machine tourne à plein régime et avale les kilomètres. Déjà, on se trouve à quelques pas du Puy de Charmont. A un carrefour, on peut hésiter et aller tout droit à la découverte des puys et des cheires, ces anciennes coulées de laves aujourd'hui recouvertes de forêts. Ces cheires peuvent d'ailleurs avoir une plus grande importance que ce que l'ont pense. Lorsque l'on regarde la &lt;a href=&quot;http://www.geoportail.fr/visu2D.do?cg=djoxLjEqYzptZXRyb3BvbGUqY3Y6MS4wKnZ2OjEuMSp4eToyLjk4OTcxMDQyNjMxMTgyMzd8NDUuNjczNzkyMjE3NjE0NzA0KnM6OCpwdjoxLjAqcDpkZWNvdXZlcnRlKmw6U2NhbnwxfDEwMHwy&quot; hreflang=&quot;fr&quot;&gt;carte&lt;/a&gt; de la région, on aperçoit que les cheires basses séparent le lac d'Aydat et le lac de la Cassière (merci &lt;a href=&quot;http://www.geoportail.fr&quot; hreflang=&quot;fr&quot;&gt;géoportail&lt;/a&gt;). Il fut un temps où ces deux lacs n'en formaient qu'un, avant que cette coulée de lave ne les séparent.&lt;/p&gt;


&lt;p&gt;Mais revenons à notre carrefour et la tentation de ces puys boisés si particulier. Tel n'est pas le but de notre escapade. Au contraire, prenons la direction du sud, vers le soleil. Il faut dire qu'il a fait beau toute la journée mais, étrangement, un gros tas de nuages moches comme tout a décidé de stationner sur ces puys (bouh les méchants !!). Nous traversons alors le petit village de Fontclairant et côtoyons les flancs du Puy de la Rode jusqu'au village de Veyreras. Au détour d'une ferme, nous changeons de cap.&lt;/p&gt;


&lt;p&gt;Nous continuons de tourner et c'est au tour de l'ouest d'avoir les faveurs de notre regard. Les massifs du Livradois-Forez sont loins. Il y aurait encore beaucoup de ces plaines, de ces cultures et de ces prairies à traverser. Au milieu de cette nature apprivoisée par l'agriculture moderne, un menhir nous rappelle qu'il s'agit aussi de la terre de nos ancêtres. Ici, au milieu de nul part se dresse la Pierre Longue. Obélix l'aura surement laisser trainer par là en pourchassant une cohorte de romains :-). C'est toutefois l'occasion de détourner notre regard vers le massif du Sancy, au loin vers l'Est. Finalement, ce menhir n'est peut-être pas là totalement par hasard ...&lt;/p&gt;


&lt;p&gt;En rencontrant le GR30, nous changeons une dernière fois de cap pour retourner, au nord, vers le lac d'Aydat. A proximité du village de Phialeix, nous abordons la descente vers le lac qui se laisse admirer sous toutes ses coutures. Il s'étend de toute son ampleur au travers des moindres plis que la terre forme ici. L'eau tende de s'échapper de tous les côtés. Poussé par le vent, de petites vagues viennent s'échouer impuissantes sur les rives. La berge nord, aménagée, est occupé par les baigneurs. Plus au calme, quelques pécheurs s'adonnent à leur loisir. Au milieu, de petites embarcations à voile font la courses contre des pédalos. Il ne reste plus qu'à rejoindre la berge nord par de charmants chemins à travers les bois. A midi passé, le soleil haut dans le ciel épargne cependant la fraicheur boisée de cette fin de randonnée.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://www.geoportail.fr/visu2D.do?cg=djoxLjEqYzptZXRyb3BvbGUqY3Y6MS4wKnZ2OjEuMSp4eToyLjk4MDIzMzU1NDQ0ODg0OHw0NS42NjEzMDg2NDY5MzM5OSpzOjcqcHY6MS4wKnA6ZGVjb3V2ZXJ0ZSpsOlNjYW58MXwxMDB8Mg%3D%3D&quot; hreflang=&quot;fr&quot;&gt;L'itinéraire sur Géoportail&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/jerome.truffot/LeLacDAydat&quot; hreflang=&quot;fr&quot;&gt;Quelques photos&lt;/a&gt;&amp;nbsp;:&lt;/p&gt;

&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://picasaweb.google.com/s/c/bin/slideshow.swf&quot; width=&quot;600&quot; height=&quot;400&quot; flashvars=&quot;host=picasaweb.google.com&amp;captions=1&amp;noautoplay=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjerome.truffot%2Falbumid%2F5093050836564349441%3Fkind%3Dphoto%26alt%3Drss&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;
</description>
    
    
    
      </item>
    
  <item>
    <title>La Roche Branlante</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/07/22/La-Roche-Branlante</link>
    <guid isPermaLink="false">urn:md5:be1b8712820224b35f3e1b4a540d6d47</guid>
    <pubDate>Sun, 22 Jul 2007 15:36:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Randonnées</category>
        <category>Auvergne</category><category>randos</category><category>Rochefort-Montagne</category>    
    <description>&lt;p&gt;Après une semaine de mauvais temps en plein mois de Juillet, ce dimanche ensoleillé ne pouvait rimer qu'avec randonnée&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Me voilà donc parti en début d'après-midi en direction de Rochefort-Montagne. Mon fidèle topoguide m'annonce 3h30 de randonnée, plus 30 minutes pour aller voir la Roche Branlante, clou de la balade. Le départ est bien moins brutal que pour &lt;a href=&quot;http://www.truffot.fr/jerome/index.php/post/2007/07/14/Le-tour-de-la-Piniere&quot; hreflang=&quot;fr&quot;&gt;le plateau de la Pinière&lt;/a&gt;. Je peux alors profiter du beau temps pour &lt;del&gt;prendre des coups de soleil&lt;/del&gt; admirer la vallée de la Plane recouverte de prairie et parsemée de quelques petits villages. Les vaches qui pâturent à flanc de colline ne semblent pas perturbées par ma présence. Je continue mon chemin poussé par la brise et le calme de la campagne. Quel plaisir de se dégourdir les jambes dans un grand bol d'air frais.&lt;/p&gt;    &lt;p&gt;Du haut de la colline qui sépare les vallées de la Plane et de Fontsalade (du nom des ruisseaux du même nom qui se retrouve un peu au nord de Rochefort-Montagne pour former le ruisseaux de Rochefort), on aperçoit au loin les Roches Tuilière et Sanadoire qui semblent former la porte d'entrée du massif du Sancy. Dans la descente de la vallée de Fontsalade, une ouverture dans la forêt nous laisse admirer cette formation géologique des plus pittoresques.&lt;/p&gt;


&lt;p&gt;On remonte ensuite l'autre versant de la vallée jusqu'à la Roche Branlante. Il s'agit d'un énorme bloc rocheux d'environs 5 mètres de haut posé en équilibre sur un autre bloc rocheux. Il n'y a pas d'autre lien entre ces deux blocs que celui imposé par la gravité. Au fil de l'érosion, cet équilibre semble de plus en plus périlleux. Si bien qu'un bon coup d'épaule semble pouvoir faire vaciller cet immense rocher. Nul doute qu'il finira par tomber dans la vallée (j'espère qu'il n'y a personne en dessous ;-). D'ici là, on peut encore admirer une de ces curiosités que la nature nous réserve.&lt;/p&gt;


&lt;p&gt;Avant de redescendre vers Rochefort-Montagne, un coup d'oeil au nord nous permet d'admirer la chaîne des Puys dont le si charismatique Puy de Dôme. Laissons maintenant sonner au loin la cloche des vaches en pâture pour regagner la civilisation ...&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://www.geoportail.fr/visu2D.do?cg=djoxLjEqYzptZXRyb3BvbGUqY3Y6MS4wKnZ2OjEuMSp4eToyLjgwNTIyNTU2MTQzMDc1fDQ1LjY2OTc1Njk0MjQxMTY5KnM6OCpwdjoxLjAqcDpkZWNvdXZlcnRlKmw6U2NhbnwxfDEwMHww&quot; hreflang=&quot;fr&quot;&gt;L'itinéraire sur Géoportail&lt;/a&gt;&amp;nbsp;: De bordas (sortie sud de Rochefort-Montagne), on suit le chemin vers le sud en direction de la Plane, puis on tourne direction la Gratade. On traverse ensuite Chez Chocol et le Deveix. Les plus courageux effectueront un petit détour vers la Roche Branlante avant de redescendre vers Rochefort-Montagne.&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/jerome.truffot/LaRocheBranlante&quot; hreflang=&quot;fr&quot;&gt;Quelques photos :&lt;/a&gt;&lt;/p&gt;

&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://picasaweb.google.com/s/c/bin/slideshow.swf&quot; width=&quot;600&quot; height=&quot;400&quot; flashvars=&quot;host=picasaweb.google.com&amp;captions=1&amp;noautoplay=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjerome.truffot%2Falbumid%2F5090385336910778673%3Fkind%3Dphoto%26alt%3Drss&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;
</description>
    
    
    
      </item>
    
  <item>
    <title>Le tour de la Pinière</title>
    <link>http://www.truffot.fr/jerome/index.php/post/2007/07/14/Le-tour-de-la-Piniere</link>
    <guid isPermaLink="false">urn:md5:3913c3d907e891c3bd3a7f9908430d75</guid>
    <pubDate>Sat, 14 Jul 2007 16:38:00 +0200</pubDate>
    <dc:creator>Léon</dc:creator>
        <category>Randonnées</category>
        <category>Auvergne</category><category>Montaigut-le-Blanc</category><category>randos</category>    
    <description>&lt;p&gt;Enfin un peu de soleil, enfin un peu de chaleur, enfin un peu de vacances, enfin un semblant d'été&amp;nbsp;! C'est décidé&amp;nbsp;! Je pars me balader&amp;nbsp;! Je m'imagine déjà en train de trémousser mon popotin sur les chemins de campagne de cette chère &lt;a href=&quot;http://www.truffot.fr/jerome/index.php/tag/Auvergne&quot;&gt;Auvergne&lt;/a&gt; &lt;img src=&quot;/jerome/themes/default/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; .&lt;/p&gt;


&lt;p&gt;Voilà un moment que je ne m'étais pas accordé un peu de temps pour randonner. J'ai donc essayé de choisir quelque chose de pas trop long, ni trop dur. Je feuillette joyeusement mon guide &lt;a href=&quot;http://www.chamina.com&quot; hreflang=&quot;fr&quot;&gt;chamina&lt;/a&gt; à la recherche de ma première randonnée de l'été, première d'une longue liste si le temps le permet. Bon, pour une reprise, on va laisser de coté l'ascension du Sancy. Oh&amp;nbsp;! Des petites randos de 2h, ça a l'air gentil ... Mais on ne sait pas ce que l'été nous réserve. Et si c'était la seule rando que je puisse faire avant le retour de la pluie&amp;nbsp;? Allez, soyons courageux, 3-4h me semble un minimum. Ah&amp;nbsp;! Voilà&amp;nbsp;! &lt;em&gt;Le tour de la Pinière&lt;/em&gt;&amp;nbsp;: petite randonnée bucolique d'une dizaine de kilomètres pour un temps annoncé de 3h45. Parfait, ça consiste à faire le tour du plateau de la Pinière qui surplombe Montaigut-le-blanc, charmante bourgade à coté de Champeix, situé à une petite demi-heure de Clermont-Ferrand. Parfait, vraiment parfait&amp;nbsp;! Et un plateau, c'est tout plat, non&amp;nbsp;?&lt;/p&gt;    &lt;p&gt;Tout plat&amp;nbsp;? Bougre d'imbécile !! Un plateau, c'est plat, forcément, mais seulement une fois qu'on est grimpé sur la table !!! J'ai pourtant le plateau de Gergovie juste en face de chez moi. Je n'aurais pas du être si surpris une fois arrivé à Montaigut-le-Blanc. Donc le plateau, il est plat mais il est posé tout là haut !! Pour y aller, il va falloir grimper&amp;nbsp;!&lt;/p&gt;


&lt;p&gt;Je sors donc les cordes, les piolets et les chaussures à crampon ... Ah, on me fait signe que ce n'est pas la peine. Il y aurait un chemin et ce ne serait même pas la peine d'avoir peur&amp;nbsp;! Fichtre, étrange rumeur. Il y a tout de même 300 mètres de dénivelé. Courageux comme jamais, je file vérifier la dite rumeur. Et c'est parti&amp;nbsp;! Je suis les mystérieuses marques jaunes qui bordent le dit chemin. Et le chemin grimpe, et ça monte, et la pente est forte, et le chemin n'est même pas droit. Une fois arriver en haut d'un chemin, on en prend un autre qui monte tout autant. Bah, ce n'est pas grave, Un pied devant l'autre, le b-a-ba de la marche me mènera jusqu'au bout du chemin (qui se trouve être le point de départ, principe primordiale de la petite randonnée intitulé &quot;Principe de conservation de la voiture&quot; ;-)). Bien sûr, sur un tel chemin, il faut pousser un peu plus fort que d'habitude sur la jambe droite pour faire passer le pied droit devant le pied gauche, et un peu plus fort encore sur la jambe gauche pour effectuer l'opération inverse.&lt;/p&gt;


&lt;p&gt;Cette compétition puérile entre mes deux pieds a du inquiéter mon coeur qui s'est emballé. Il fallait donc rester concentrer pour ne pas oublier de respirer. Inspiration, expiration&amp;nbsp;! 400 fois par seconde !!! Les yeux qui sortent des orbites, la sueur qui gicle de chaque pore de mon être. Bon, il est temps de faire une pause. Boire un coup. Admirer ... La vue bien sûr, magnifique&amp;nbsp;: le massif du Sancy, le massif des Monts Dore, des Puys par-ci, des couzes par-là. Le bruit aussi&amp;nbsp;: le vent dans les arbres, les papillons (celui qui n'a jamais entendu un papillon voler n'a aucune imagination !! :D). Et la balade continue.&lt;/p&gt;


&lt;p&gt;A force de monter, j'y suis arriver sur ce fichu plateau. Et là haut, c'est le bonheur. Bon oui, c'est plat, mais pas que ça. Il y a encore plus de vent, rafraichissant. Il y a plus de soleil, plus de paysage et plus de silence, de calme, de paix. Un bonheur simple porté par mes deux pieds martyrisés mais, forcément, passionnés ...&lt;/p&gt;




&lt;p&gt;&lt;a href=&quot;http://www.geoportail.fr/visu2D.do?cg=djoxLjEqYzptZXRyb3BvbGUqY3Y6MS4wKnZ2OjEuMSp4eTozLjA2OTIxMzMyNTk3NDQxNXw0NS41ODk5MzcyMzM0OTI4OSpzOjcqcHY6MS4wKnA6ZGVjb3V2ZXJ0ZSpsOlNjYW58MXwxMDB8Mg%3D%3D&quot; hreflang=&quot;fr&quot;&gt;Le plateau de la Pinière sur Géoportail.&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://picasaweb.google.com/jerome.truffot/LeTourDeLaPiniRe&quot; hreflang=&quot;fr&quot;&gt;Quelques photos :&lt;/a&gt;&lt;/p&gt;
&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://picasaweb.google.com/s/c/bin/slideshow.swf&quot; width=&quot;600&quot; height=&quot;400&quot; flashvars=&quot;host=picasaweb.google.com&amp;captions=1&amp;noautoplay=1&amp;RGB=0x000000&amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Fjerome.truffot%2Falbumid%2F5088897679969865409%3Fkind%3Dphoto%26alt%3Drss&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;
</description>
    
    
    
      </item>
    
</channel>
</rss>

