<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Blog Xebia France &#187; Devoxx</title> <atom:link href="http://blog.xebia.fr/tag/devoxx/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Wed, 08 Feb 2012 09:23:16 +0000</lastBuildDate> <language>fr</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <copyright>CC BY-NC-ND 2.0 http://creativecommons.org/licenses/by-nc-nd/2.0/fr/</copyright> <managingEditor>blog-france@xebia.com (Xebia France)</managingEditor> <webMaster>blog-france@xebia.com (Xebia France)</webMaster> <ttl>1440</ttl> <image> <url>http://blog.xebia.fr/videos/xebia-podcast.png</url><title>Blog Xebia France</title><link>http://blog.xebia.fr</link> <width>144</width> <height>144</height> </image> <itunes:new-feed-url>http://blog.xebia.fr/feed/podcast/</itunes:new-feed-url> <itunes:subtitle>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agi[...]</itunes:subtitle> <itunes:summary>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agile.</itunes:summary> <itunes:keywords>Xebia, Java, JEE, SOA, Agile, Méthodes, Agiles</itunes:keywords> <itunes:category text="Technology" /> <itunes:category text="Technology"> <itunes:category text="Software How-To" /> </itunes:category> <itunes:category text="Technology"> <itunes:category text="Tech News" /> </itunes:category> <itunes:author>Xebia France</itunes:author> <itunes:owner> <itunes:name>Xebia France</itunes:name> <itunes:email>blog-france@xebia.com</itunes:email> </itunes:owner> <itunes:block>no</itunes:block> <itunes:explicit>no</itunes:explicit> <itunes:image href="http://blog.xebia.fr/videos/xebia-podcast.png" /> <item><title>Devoxx &#8211; The evolution of Java &#8211; Past, Present and Future</title><link>http://blog.xebia.fr/2011/12/01/devoxx-the-evolution-of-java-past-present-and-future/</link> <comments>http://blog.xebia.fr/2011/12/01/devoxx-the-evolution-of-java-past-present-and-future/#comments</comments> <pubDate>Thu, 01 Dec 2011 07:36:29 +0000</pubDate> <dc:creator>Olivier Michallat</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9618</guid> <description><![CDATA[Pour cette avant-dernière session de la conférence, l&#8217;incontournable Joshua Bloch remplit comme à son habitude la grande salle de Devoxx. Il nous présente aujourd&#8217;hui une rétrospective des meilleures et des pires fonctionnalités ajoutées au fil des versions de Java. Sa critique est objective et sans détours, d&#8217;autant qu&#8217;il a participé de près ou de loin [...]]]></description> <content:encoded><![CDATA[<p>Pour cette avant-dernière session de la conférence, l&#8217;incontournable Joshua Bloch remplit comme à son habitude la grande salle de Devoxx. Il nous présente aujourd&#8217;hui une rétrospective des meilleures et des pires fonctionnalités ajoutées au fil des versions de Java. Sa critique est objective et sans détours, d&#8217;autant qu&#8217;il a participé de près ou de loin à bon nombre des sujets abordés.</p><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/12/dukes.jpeg" style="border: 0px solid black" /></span></p><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Java1.1"></a>Java 1.1</h3><ul><li><b>Les classes internes (</b><b><em>nested classes</em></b><b>) : pas mal, mais auraient pu être bien mieux</b>. Elles auraient sans doute du être statiques par défaut, et avec une syntaxe plus concise. Par ailleurs, elles ne sont pas réellement supportées par la machine virtuelle (si vous aimez compiler avec tous les warnings activés, le terme <a
href="http://stackoverflow.com/questions/921025/eclipse-warning-about-synthetic-accessor-for-private-static-nested-classes-in-ja" rel="nofollow">synthetic accessor method</a> vous est sans doute familier).</li><li><b>La sérialisation : la pire fonctionnalité jamais ajoutée au langage</b>. Joshua ne mâche pas ses mots, on se souvient que la sérialisation fait l&#8217;objet d&#8217;un chapitre complet dans <a
href="http://java.sun.com/docs/books/effective/" rel="nofollow">Effective Java</a>. Elle ouvre de nombreuses failles dans la correction, la sécurité et parfois la performance des programmes.</li></ul><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Java1.2"></a>Java 1.2</h3><ul><li><b>Le modifieur</b> <code><b><a
href="http://en.wikipedia.org/wiki/Strictfp" rel="nofollow">strictfp</a></b></code> <b>: une petite &laquo;&nbsp;verrue&nbsp;&raquo; qui aurait pu être évitée</b>. À l&#8217;origine, il garantissait la consistance des calculs flottants entre toutes les plateformes. En pratique, il est obsolète sur la plupart des architectures modernes, qui renvoient le même résultat avec et sans ce mot-clé. Dans toute sa carrière, Joshua n&#8217;a rencontré qu&#8217;une paire de cas où il avait une importance.</li></ul><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Java1.4"></a>Java 1.4</h3><ul><li><b>Les assertions : gagnant, mais de peu.</b> Joshua est un grand amateur d&#8217;assertions (il nous révèle que le compilateur Java contient tellement d&#8217;assertions qu&#8217;il s&#8217;exécute 4 fois moins vite quand elles sont activées). Il a tenté de prêcher la bonne parole, mais a peu été entendu. En résumé, certaines personnes utilisent et adorent les assertions, le reste les ignore.</li></ul><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Java5"></a>Java 5</h3><ul><li><b>Les types génériques : une évolution incontournable, mais mal pensée</b>. Sans aucun doute la fonctionnalité la plus controversée de Java. Elle a indéniablement renforcé le typage et favorisé l&#8217;expressivité, mais les <em>wildcards</em>, ajoutés à la dernière minute, ont été un désastre. Introduisant en plus des incompatibilités avec les tableaux et des messages d&#8217;erreur cryptiques, les types génériques ont désorienté les développeurs les plus aguerris. Joshua nous rappelle quelques commentaires désabusés de l&#8217;époque, qui font sourire avec le recul :</li></ul><div
style="border: dotted 1px #6A205F; background: #F0EDF1; padding:10px 30px; margin-left:50px;"><p>I am completely and totally humbled. Laid low. I realize now that I am simply not smart at all. I made the mistake of thinking that I could understand generics. I simply cannot. I just can&#8217;t. This is really depressing. It is the first time that I&#8217;ve ever not been able to understand something related to computers, in any domain, anywhere, period. &#8212; A Java Programmer, 2006</p></blockquote></div><ul><li><b>Les annotations : un succès, anecdotique pour beaucoup de cas d&#8217;usages, mais vital pour d&#8217;autres</b>. Joshua se réjouit de pouvoir implémenter en trois diapositives de code un framework de test rudimentaire, basé sur des annotations <code>@Test</code> comme TestNG et JUnit.</li><li><b>Les</b> <b><em>enums</em></b> <b>: un franc succès.</b> Elles ont révélé très peu de défauts en pratique. L&#8217;absence d&#8217;héritage est un choix délibéré, il aurait conduit à des incohérences (par exemple, le fait que la méthode <code>values()</code> de l&#8217;enum parente ne renvoie pas les constantes de l&#8217;enum fille).</li><li><b>La boucle</b> <b><em>for-each</em></b> <b>: une des évolutions les plus réussies à ce jour.</b> Elle a simplifié les parcours de boucle et éliminé toute une classe d&#8217;erreurs <em>off-by-one</em>.</li><li><b>L&#8217;</b><b><em>autoboxing</em></b> <b>: il aurait mieux valu étendre la généricité aux types primitifs.</b> Mal utilisée, cette fonctionnalité peut entraîner des problèmes de performances (dans les boucles <em>for</em> par exemple) mais également des bugs assez tordus. Les amateurs de <em>puzzlers</em> apprécieront l&#8217;exemple suivant (solution en bas de l&#8217;article) :<pre class="brush: java; gutter: true; title: ; notranslate">
public class Searching {
    public static void main(String[] args) {
        String[] strings = { &quot;1&quot;, &quot;2&quot;, &quot;4&quot;, &quot;8&quot;, &quot;16&quot;, &quot;32&quot;, &quot;64&quot;, &quot;128&quot; };
        // Translate String array into List of Integer
        List&lt;Integer&gt; integers = new ArrayList&lt;Integer&gt;();
        for (String s : strings)
            integers.add(Integer.valueOf(s));
        System.out.println(Collections.binarySearch(integers, 32, cmp));  // OK
        System.out.println(Collections.binarySearch(integers, 128, cmp)); // KO
    }
    static Comparator&lt;Integer&gt; cmp = new Comparator&lt;Integer&gt;() {
        public int compare(Integer i, Integer j) {
            return i &lt; j ? -1 : (i == j ? 0 : 1);
        }
    };
}
</pre></li><li><b>Les</b> <b><em>varargs</em></b> <b>: un succès mitigé, entaché par les interférences avec les génériques</b>. Ils sont très utiles pour quelques fonctionnalités comme <code>printf</code>. Mais le pouvoir de nuisance des warnings de compilation &laquo;&nbsp;<em>A generic array of Xxx is created for a varargs parameter</em>&nbsp;&raquo; a été sous-estimé. Ceci devrait être résolu avec les <em><a
href="http://out-println.appspot.com/posts/simplified_varargs_101" rel="nofollow">simplified varargs</a></em> de Java 7.</li><li><b>Les imports statiques : un gain modeste.</b> Ils sont utiles pour les constantes d&#8217;énumérations et les classes utilitaires. Heureusement, ils n&#8217;ont pas été sur-utilisés, comme on aurait pu le craindre initialement.</li></ul><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Java7"></a>Java 7</h3><p>Vu la jeunesse de cette version, il s&#8217;agit plus ici de prévisions. Les <em>puzzlers</em> de Java 7 ne sont pas encore connus.</p><ul><li><b>Le</b> <b><em>switch</em></b> <b>sur les chaînes de caractères : un gain modeste</b> en terme de concision, et vraisemblablement de performances. Son seul défaut est qu&#8217;il encouragera peut-être une sur-utilisation des chaînes de caractères, qu&#8217;il vaut mieux encapsuler dans des types personnalisés le plus tôt possible.</li><li><b>Les littéraux binaires, les</b> <b><em>underscores</em></b> <b>dans les littéraux numériques : un gain modeste.</b> Les <em>underscores</em> seront aimés et beaucoup utilisés, <a
href="http://img.ly/aAiL" rel="nofollow">peut-être trop <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </a>.</li><li><b>Le</b> <b><em>multicatch</em></b> <b>: un gain assez conséquent.</b> Il élimine les blocs <em>catch</em> redondants.</li><li><b>La transmission d&#8217;exception sans perte de type (</b><b><em><a
href="http://fahdshariff.blogspot.com/2011/07/java-7-precise-rethrow.html" rel="nofollow">more precise rethrow</a></em></b><b>) : un gain modeste.</b> La fonctionnalité fait ce que l&#8217;on attend d&#8217;elle, reste à voir sa valeur ajoutée à l&#8217;usage. Le problème subsistera quand on veut stocker l&#8217;exception et la relancer dans un autre thread.</li><li><a
href="http://fahdshariff.blogspot.com/2011/07/java-7-diamond-operator.html" rel="nofollow"><b>L&#8217;opérateur</b> <b><em>diamond</em></b></a> <b>: un gain important.</b> Complexe en interne, mais transparent pour les développeurs, il simplifie l&#8217;écriture du code, et supprime surtout du bruit inutile à la lecture.</li><li><b>Le</b> <b><em>try-with-resources</em></b> <b>: un gain énorme.</b> Sans compliquer le language, il simplifie la syntaxe et résout un problème sérieux et fréquent : Joshua nous révèle que le code du JDK 6 gérait mal les ressources dans 70% des cas !</li><li><b>Les</b> <b><em>varargs</em></b> <b>simplifiés : un gain modeste.</b> Comme indiqué ci-dessus, il élimine un warning pénible lié à l&#8217;utilisation d&#8217;arguments variables d&#8217;un type générique. Il sera surtout utilisé par les développeurs de librairies.</li></ul><h3><a
name="DRAFT-Devoxx-TheevolutionofJava-Past%2CPresentandFuture-Conclusion"></a>Conclusion</h3><ul><li>La plupart des changements des premières versions étaient assez bons, mais une meilleure conception des classes internes aurait sans doute limité le besoin d&#8217;intégrer les lambdas dans Java 8. La sérialisation a fait plus de mal que de bien.</li><li>Le bilan de Java 5 est mitigé. En particulier, les erreurs de conception des types génériques ont dilapidé le &laquo;&nbsp;budget de complexité&nbsp;&raquo; du langage, ce qui lui a fait beaucoup de mal sur le long terme. &laquo;&nbsp;L&#8217;esprit de Java&nbsp;&raquo;, insufflé initialement par James Gosling, s&#8217;est détérioré au fil des versions.</li><li>Les changements dans Java 7 sont plus prometteurs. Apparemment, la leçon de Java 5 a été retenue, les évolutions ont été introduites avec plus de prudence.</li><li>Joshua est plus inquiet à propos de Java 8 : pour lui, le projet Lambda actuel a réussi à tempérer les excès de ses premières propositions, mais reste trop complexe. Les évolutions des versions suivantes lui font également peur (dans sa conférence du mercredi, Mark Reinhold a mentionné entre autres : une JVM auto-optimisée, la réification et l&#8217;unification des types primitifs, un protocole méta-objet&#8230;).</li></ul><p>Pour finir, l&#8217;auteur de <a
href="http://lcsd05.cs.tamu.edu/slides/keynote.pdf" rel="nofollow"><em>How to Design a Good API and Why it Matters</em></a> nous délivre son &laquo;&nbsp;sermon&nbsp;&raquo; (selon ses propres termes) :</p><ul><li>&laquo;&nbsp;More is not better&nbsp;&raquo; : avant d&#8217;ajouter une nouvelle fonctionnalité, démontrer son utilité avec de solides arguments (typiquement, une analyse statique du code existant).</li><li>Résister aux sirènes et aux effets de mode : &laquo;&nbsp;Java va mourir si nous n&#8217;ajoutons pas X&nbsp;&raquo;, &laquo;&nbsp;Tous les autres langages ont Y&nbsp;&raquo;&#8230;</li><li>Rendre les changements les plus simples possibles, éviter les modifications importantes du système de types.</li><li>Et enfin&#8230; ne jamais ajouter une fonctionnalité au dernier moment (on repense bien sûr aux <em>wildcards</em> dans les génériques, que Joshua semble considérer comme sa <a
href="http://qconlondon.com/london-2009/presentation/Null+References:+The+Billion+Dollar+Mistake" rel="nofollow"><em>billion-dollar mistake</em></a>).</li></ul><p>Néanmoins, Joshua termine sa présentation en nous témoignant son attachement au langage Java.</p><hr
/><p><em>Solution du puzzler :</em> le comparateur manipule des objets <code>Integer</code>. Or il utilise <code>==</code>, qui se base sur les références et non les valeurs. Le cache de <code>Integer.valueOf</code> masque le problème pour les valeurs entre -128 et 127 ; au delà, le 128 passé en paramètre de <code>binarySearch</code> n&#8217;est pas le même objet que le 128 stocké dans la liste, donc le comparateur les considère comme différents et la recherche échoue.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/12/01/devoxx-the-evolution-of-java-past-present-and-future/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Devoxx &#8211; Ceylon</title><link>http://blog.xebia.fr/2011/11/22/devoxx-ceylon/</link> <comments>http://blog.xebia.fr/2011/11/22/devoxx-ceylon/#comments</comments> <pubDate>Tue, 22 Nov 2011 10:43:08 +0000</pubDate> <dc:creator>Nicolas Jozwiak</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Ceylon]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9304</guid> <description><![CDATA[Après avoir assisté à la session sur Kotlin, nous ne pouvions pas faire l&#8217;impasse sur la présentation du langage Ceylon animée par Emmanuel Bernard et Stéphane Epardaud. Cette session était focalisée sur les motivations qui ont poussé à développer ce langage et devait nous montrer les possibilités de ce dernier. Le projet Ceylon a été [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/ceylon.png" style="border: 0px solid black" /></span><br
/> Après avoir assisté à la session sur Kotlin, nous ne pouvions pas faire l&#8217;impasse sur la présentation du langage Ceylon animée par Emmanuel Bernard et Stéphane Epardaud. Cette session était focalisée sur les motivations qui ont poussé à développer ce langage et devait nous montrer les possibilités de ce dernier.</p><p>Le projet Ceylon a été initié par Gavin King dont nous connaissons tous la renommée. Emmanuel explique que pour des raisons de frustrations avec le langage Java, Gavin et son équipe ont décidé de monter ce projet. Ils souhaitent développer un langage avec l’esprit Java et étant aussi pratique que ce dernier.</p><p>Les buts du développement du langage Ceylon sont les suivants :</p><ul><li>facile à apprendre,</li><li>moins verbeux tout en restant lisible,</li><li><em>type safety</em> améliorée,</li><li>avoir un nouveau SDK (plateforme),</li><li>possibilité de faire du meta-programming.</li></ul><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/ebernard-separdaud.jpg" height="311" width="510" style="border: 0px solid black" /></span></p><p>Emmanuel poursuit par du code, dont voici quelques exemples.</p><h3><a
name="Devoxx-Ceylon-Lespointsquichangentparrapport%C3%A0Javaou%C3%A0d%27autreslangagesdelaJVM"></a>Les points qui changent par rapport à Java ou à d&#8217;autres langages de la JVM</h3><h4><a
name="Devoxx-Ceylon-Lagestiondelavisibilit%C3%A9"></a>La gestion de la visibilité</h4><p>Toutes les classes, variables et méthodes sont par défaut avec une visibilité private. Seules deux visibilités existent : <em>private</em> (par défaut) et <em>shared</em> (public).  Une classe privée n’est visible que par les autres classes du même module. Une méthode <em>shared</em> est visible par toutes les classes qui peuvent accéder à sa propre classe.</p><h4><a
name="Devoxx-Ceylon-Surcharge"></a>Surcharge</h4><p>Par défaut, toutes les méthodes, attributs et classes ne peuvent pas être surchargés. À la place, Ceylon fournit dans sa syntaxe deux mots-clés permettant de gérer la surcharge de méthodes en plus du qualifieur par défaut.</p><ul><li><b>default</b> : peut être surchargée. On définit l’implémentation par défaut.</li><li><b>formal</b> : doit être surchargée.</li><li><b>actual</b> : indique la surcharge. Plus ou moins équivalent à <em>@Override</em> en java.</li></ul><pre class="brush: java; gutter: true; title: ; notranslate">
abstract class Shape() {
 shared formal Natural area() ;
shared actual default String string {
  return &quot;Abstract area : &quot; area.string &quot; m^2 ;
}
class Square(Natural width) extends Shape() {
  shared actual Natural area() {
    return width * width ;
  }
  shared actual String string = &quot;Square area : &quot; area.string &quot; m^2&quot; ;
}
</pre><p>Dans cet exemple, la méthode <em>string</em> est équivalente à <em>toString</em> en Java. Elle est surchargée dans <em>Shape</em>, elle doit donc être préfixée avec <em>actual</em>.</p><h4><a
name="Devoxx-Ceylon-Overloading"></a>Overloading</h4><p>Pas d’<em>overloading</em> que ce soit pour les méthodes standards ou le constructeur. Un seul constructeur est donc possible par classe. Mais il fournit en contrepartie des attributs optionnels. Emmanuel propose, pour le constructeur, d’utiliser un switch sur le type de l’argument.</p><pre class="brush: java; gutter: true; title: ; notranslate">
void workWithRectange(Rectangle rect) { }
void workWithCircle(Circle rect) { }
void workWithFigure2D(Figure2D rect) { }
void supportsSubTyping(Shape fig) {
  switch(fig)
  case(is Rectangle) {
    workWithRectangle(fig) ;
  }
  case(is Circle) {
    workWithCircle(fig) ;
  }
  case(is Figure2D) {
    workWithFigure2D (fig) ;
  }
}
</pre><p><em>Rectangle</em>, <em>Circle</em> et <em>Figure2D</em> sont ici des sous-classes de <em>Shape</em>.</p><h4><a
name="Devoxx-Ceylon-Gestiondunull"></a>Gestion du <em>null</em></h4><p>De la même manière que Kotlin, Ceylon utilise le caractère ‘?’ pour définir si une variable peut être nulle ou pas.</p><pre class="brush: java; gutter: true; title: ; notranslate">
void typeSafety() {
  Cube? cubeOrNull() { return null; };
  Cube? Cube = cubeOrNull() ;
  print(cube.area.string) ;
}
</pre><p>Cet exemple génère une erreur de compilation. Il convient d&#8217;utiliser la forme ci-dessous.</p><pre class="brush: java; gutter: true; title: ; notranslate">
void typeSafety() {
  Cube? cubeOrNull() { return null; };
  Cube? Cube = cubeOrNull() ;
  if (exists cube) {
    print(cube.area.string) ;
  } else {
    print(&quot;No cube&quot;) ;
  }
}
</pre><h4><a
name="Devoxx-Ceylon-Uniontype"></a>Union type</h4><pre class="brush: java; gutter: true; title: ; notranslate">
class Apple() {
  shared void eat() {}
}
class Snail() {
  shared void throwAway() {}
}
void unions() {
  Sequence&lt;Apple|Snail&gt; plate = {Apple(), Snail()};
  for (Apple|Snail food in plate) {
    print(food.string);
    if (is Apple food) {
      food.eat();
    } else if (is Snail food) {
      feed.throwAway();
    }
  }
}
</pre><p>L&#8217;union de types permet d&#8217;être sûr d&#8217;avoir un objet de type Apple ou Snail. Le mot-clé <b>is</b> permet de vérifier le type.</p><h4><a
name="Devoxx-Ceylon-Autresfonctionnalit%C3%A9s"></a>Autres fonctionnalités</h4><p>Dans les autres fonctionnalités et syntaxes plus classiques, on retrouve :</p><ul><li>les closures,</li><li>les annotations,</li><li>un système d&#8217;<em>interceptor</em> pour la programmation par aspect,</li><li>un système de modules.</li></ul><p>Concernant l’outillage, Stéphane nous montre du code en live avec le plugin Eclipse. Ce dernier est assez avancé et nous retrouvons la coloration syntaxique, le refactoring, le <em>type checking</em> ainsi que le debugger.</p><h3><a
name="Devoxx-Ceylon-Conclusion"></a>Conclusion</h3><p>Emmanuel termine la présentation en nous annonçant la mise en ligne du <a
href="http://ceylon-lang.org/blog/2011/11/17/welcome/" rel="nofollow">site sur Ceylon</a>. N’hésitez pas à le consulter : la documentation est bien fournie (fonctionnement du langage, spécifications, etc…) et les exemples sont nombreux.</p><p>Enfin il ajoute que tout le monde est bienvenu sur le projet. Un <a
href="https://github.com/ceylon/ceylon-lang.org" rel="nofollow">github</a> est disponible et il est possible de contribuer au projet dès à présent.</p><p>La séance s’est terminée par des questions/réponses. Nous avons notamment eu la question suivante : &laquo;&nbsp;Où se situe Ceylon par rapport à Kotlin ou à d’autres langages (Scala, Fantom) ?&nbsp;&raquo; Emmanuel explique que Ceylon se trouve entre le monde Kotlin et Fantom. Il justifie cela par le fait que le langage Fantom a pris le parti de supprimer certaines notions du langage Java et que dans Kotlin on ne retrouve pas la notion d’Union type.</p><p>À travers cette conférence, nous constatons que les nouveaux langages sont à la « mode ». Ceylon tente de se faire un chemin dans la bataille aux « successeurs de Java » avec d’autres challengers comme Kotlin. Il ne nous reste plus qu’à surveiller les évolutions de ces différents langages et de voir lequel proposera les meilleures approches de programmation dans les mois à venir.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/22/devoxx-ceylon/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Devoxx &#8211; Rules for Good UI Design</title><link>http://blog.xebia.fr/2011/11/18/devoxx-rules-for-good-ui-design/</link> <comments>http://blog.xebia.fr/2011/11/18/devoxx-rules-for-good-ui-design/#comments</comments> <pubDate>Fri, 18 Nov 2011 12:34:15 +0000</pubDate> <dc:creator>Olivier Michallat</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9263</guid> <description><![CDATA[La conception des interfaces utilisateur tient une place importante, même dans une conférence très technique comme Devoxx. En témoigne l&#8217;affluence à cette session où Joe Nuxoll, principalement connu en tant que membre du célèbre Java Posse, se propose d&#8217;inculquer aux développeurs quelques notions issues du monde du design. Joe a débuté sa carrière comme architecte logiciel, mais [...]]]></description> <content:encoded><![CDATA[<p>La conception des interfaces utilisateur tient une place importante, même dans une conférence très technique comme Devoxx. En témoigne l&#8217;affluence à cette session où <a
href="http://www.devoxx.com/display/DV11/Joe+Nuxoll" rel="nofollow">Joe Nuxoll</a>, principalement connu en tant que membre du célèbre <a
href="http://javaposse.com" rel="nofollow">Java Posse</a>, se propose d&#8217;inculquer aux développeurs quelques notions issues du monde du design.</p><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/IMG_4055_2.jpg" style="border: 0px solid black" /></span></p><p>Joe a débuté sa carrière comme architecte logiciel, mais nous explique avec enthousiasme qu&#8217;il a découvert sa passion pour les interfaces utilisateur en travaillant sur des toolkits graphiques. Adepte de course automobile, il occupe aujourd&#8217;hui le poste de ses rêves : <a
href="http://www.teslamotors.com" rel="nofollow">Tesla motors</a> l&#8217;a chargé de concevoir le panneau de contrôle intérieur du futur <a
href="http://www.teslamotors.com/models" rel="nofollow">Modèle S</a>.</p><p>Comme on pouvait s&#8217;y attendre, sa présentation est très professionnelle, avec des diapositives minimalistes mais efficaces, qui rappellent <a
href="http://www.presentationzen.com" rel="nofollow">Presentation Zen</a>. Il s&#8217;attache surtout à définir des principes directeurs, à la façon de <a
href="http://en.wikipedia.org/wiki/Don&#39;t_Make_Me_Think" rel="nofollow">Don&#8217;t make me think</a>, qu&#8217;il citera d&#8217;ailleurs comme référence.</p><p>Avant <em>l&#8217;interface</em> utilisateur, il faut s&#8217;intéresser à <em>l&#8217;expérience</em> utilisateur : peaufiner l&#8217;interface est la dernière étape. Il faut avant tout définir ce que fait le produit, comment il rend service à une personne. Le processus de design suit les étapes suivantes :</p><ul><li>L&#8217;expression du concept, c&#8217;est à dire du besoin métier ;</li><li>L&#8217;architecture de l&#8217;information et la conception des interactions, qui se caractérisent par des itérations sur des prototypes de bas niveau (diagrammes de flux ou modèles en &laquo;&nbsp;fil de fer&nbsp;&raquo;) ;</li><li>La conception visuelle, qui itère cette fois-ci sur des <em>mockups</em> très fidèles au rendu final ;</li><li>Enfin, le plan de mise en production.</li></ul><p>Le design est subjectif : il n&#8217;y a pas de réponse objectivement correcte à un problème donné. Cependant, l&#8217;interaction homme-machine repose sur quelques principes de base, qu&#8217;il faut respecter. Pour Joe, le design par comité ne marche pas : les discussions sont bénéfiques dans les phases d&#8217;itération, mais une seule personne doit prendre la décision finale. De même, il estime que le design par heuristique (mesurer les temps de réflexion, le nombre de clics&#8230;) fonctionne mais ne donne pas de bons résultats visuels (&laquo;&nbsp;looks assy&nbsp;&raquo; selon ses propres termes).</p><p>La seconde partie de la présentation est plus pratique, Joe nous livre ses &laquo;&nbsp;règles d&#8217;or&nbsp;&raquo; du design :</p><ol><li><b>La structure des données sous-jacentes ne doivent pas influencer l&#8217;interface utilisateur.</b> Inversement, l&#8217;interface ne doit pas non plus influencer l&#8217;implémentation.  Souvent, une bonne interface évite ces problèmes grâce à une couche de transformation de données.</li><li><b>Le besoin doit primer sur la technologie.</b> Il faut résister à la tentation de se &laquo;&nbsp;faire plaisir&nbsp;&raquo; sur la technique. Idéalement, les choix techniques doivent être repoussés le plus tard possible, une fois que le besoin est bien cerné.</li><li><b>Démarrer le processus avec de</b> <b><em>vrais</em></b> <b>cas d&#8217;utilisation</b>. Voir comment les utilisateurs répondaient au besoin précédemment, ce qui marchait et ne marchait pas.</li><li><b>Identifier les catégories d&#8217;utilisateurs qui vont utiliser le produit.</b> Les incarner sous forme de <em>personnages</em> avec un nom, une photo, qui aidera à les identifier. Envisager de leur proposer des interfaces différentes.</li><li><b>Penser en terme de</b> <b><em>flux</em></b><b>, pas de fonctionnalités.</b> Une interface est vivante, en mouvement. Par exemple, ne pas penser en terme d&#8217;écran de connexion, mais de processus de connexion. Ceci facilitera les retours des utilisateurs dès les premières itérations.</li><li><b>Prototyper souvent, jeter les prototypes souvent.</b> Ne pas trop investir, construire rapidement et jeter sans regret.</li><li><b>Rendre la prochaine étape évidente.</b> Joe nous donne l&#8217;exemple de la page principale de Google, où les boutons &laquo;&nbsp;Recherche&nbsp;&raquo; et &laquo;&nbsp;J&#8217;ai de la chance&nbsp;&raquo; sont côte à côte et ont exactement le même style. Si vous découvriez cette page pour la première fois, la différence entre ces deux boutons serait-elle évidente ?</li><li><b>Réduire le nombre d&#8217;éléments perçus.</b> Face à un écran, le cerveau perçoit une charge cognitive, sur laquelle il se base pour estimer le travail nécessaire pour &laquo;&nbsp;gagner&nbsp;&raquo; l&#8217;écran. Il évalue dans l&#8217;ordre :<ul><li>les formes négatives et l&#8217;esthétique, qui produisent une réponse émotionnelle ;</li><li>le nombre d&#8217;éléments, qui détermine la charge de travail perçue ;</li><li>et enfin l&#8217;emplacement du premier élément, qui déclenche l&#8217;exécution.<br
/>  Joe montre un exemple avec les mêmes champs organisés de deux manières différentes, le résultat est frappant : le premier écran, avec tous ses champs en colonne, est complètement rébarbatif ; le second, utilisant quelques regroupements et des titres de section, paraît beaucoup plus simple à remplir.</li></ul></li><li><b>Utiliser la mémoire musculaire, être consistant.</b></li><li><b>Penser à ce qui peut être fait sans rechargement de page.</b> Par exemple, une liste chargée progressivement en AJAX peut être plus efficace qu&#8217;une liste paginée : l&#8217;utilisateur se souviendra mieux de la position approximative d&#8217;un élément que d&#8217;un numéro exact de page.</li><li><b>Utiliser des transitions pour changer d&#8217;état.</b> Montrer à l&#8217;utilisateur où il va, et comment revenir. Joe nous montre la <a
href="http://www.teslamotors.com/models/features" rel="nofollow">page descriptive de la Tesla Modèle S</a>, où la transition vers les sections se fait avec un défilement automatique vers le bas.</li><li><b>Itérer et raffiner, itérer et raffiner.</b> Joe valorise les designers qui cherchent continuellement à améliorer leur produit.</li><li><b>Et avant tout, fournir une expérience de qualité à l&#8217;utilisateur.</b> Ne pas juste &laquo;&nbsp;livrer cette fichue interface&nbsp;&raquo;.</li></ol><p>Une présentation remarquable par la qualité de son orateur, et fourmillant de conseils utiles.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/18/devoxx-rules-for-good-ui-design/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Devoxx &#8211; Performance comparison of Java Web frameworks</title><link>http://blog.xebia.fr/2011/11/18/devoxx-performance-comparison-of-java-web-frameworks/</link> <comments>http://blog.xebia.fr/2011/11/18/devoxx-performance-comparison-of-java-web-frameworks/#comments</comments> <pubDate>Fri, 18 Nov 2011 10:52:26 +0000</pubDate> <dc:creator>Nicolas Jozwiak</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Performance]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9257</guid> <description><![CDATA[Après une intervention controversée de Matt Raible à Devoxx 2010 concernant la comparaison de frameworks Web, cette année trois personnes ont choisi de remettre le couvert :  Stijn Van den Enden, Guy Veraghert et Ward Vijfeijken. Stijn débute la présentation en nous rassurant : leur recherche concerne une poignée de frameworks Web et est basée sur [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/webComparison1.jpg" height="280" width="340" style="margin: 1em 1em 1em 1em; border: 0px solid black" /></span></p><p>Après une <a
href="http://raibledesigns.com/rd/entry/my_comparing_jvm_web_frameworks" rel="nofollow">intervention controversée de Matt Raible à Devoxx 2010</a> concernant la comparaison de frameworks Web, cette année trois personnes ont choisi de remettre le couvert :  Stijn Van den Enden, Guy Veraghert et Ward Vijfeijken.</p><p>Stijn débute la présentation en nous rassurant : leur recherche concerne une poignée de frameworks Web et est basée sur la scalabilité. Pour lui cette dernière est une notion importante :</p><ul><li>Elle influe sur l’infrastructure</li><li>Elle assure une qualité de service</li><li>Elle a un coût non négligeable</li></ul><p>Stijn nous explique qu’ils ont pris le parti de baser leur expérience sur les frameworks Web suivants :</p><ul><li>GWT</li><li>JSF</li><li>Wicket</li><li>Spring MVC</li></ul><p>Il poursuit avec le type d’application qui les intéresse :</p><ul><li>Ecrans détaillés</li><li>Navigation de pages</li><li>Autocompletion</li><li>Ajax validation</li><li>Mise à jour du DOM</li></ul><p>Ensuite pour tester la scalabilité de ces frameworks, l’expérience a porté sur :</p><ul><li>Les temps de réponse</li><li>Think time (temps d’attente par un utilisateur avant de pouvoir effectuer une autre action)</li><li>Throughput (nombre de requêtes en succès par secondes)</li></ul><p>Concernant la plateforme, les tests ont été effectués sur Amazon Web Server avec un Tomcat et une base de donnée MySQL.</p><p>Avant de nous dévoiler les résultats, Stijn nous explique que pour les analyser son équipe s’est basée sur le modèle théorique de la <a
href="http://en.wikipedia.org/wiki/Little%27s_law" rel="nofollow">loi de Little</a> afin d’avoir une référence pour faire parler les données. En résumé, le principe est de trouver un optimum concernant les temps de réponse et le nombre de threads supportés.</p><p>Ayant collecté énormément de données (plus de 300 millions de mesures), l’équipe a mis en place une application Web permettant de tracer des graphiques basés sur un bon nombre de paramètres activables / désactivables (CPU data, Memory data, nombre d’utilisateurs, etc..)</p><p>Après toutes ces explications sur l’environnement de tests, les résultats tombent enfin :</p><p>GWT est le grand gagnant suivi de très près par Spring MVC. Un peu plus loin nous avons Vaadin et dans les plus mauvais élèves nous retrouvons dans l’ordre JSF/Wicket et MyFaces. L’équipe a choisi d’intégrer Vaadin et MyFaces car ils n’avaient pas beaucoup de modifications à apporter.</p><p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/webComparison3.jpg" height="280" width="330" style="margin: 1em 1em 1em 1em; border: 0px solid black" /></span></p><p>A ce stade de la présentation, l’équipe nous dévoile qu&#8217;elle a été plus loin : la réalisation de tests sur le rendu des navigateurs.</p><p>Leur principal problème était que JMeter ne permet pas ce genre de tests. Ward nous présente alors leur solution: des plugins sur les navigateurs (firebug + network, Chrome developpment tool, HTTPWatcher) permettent d’extraire les données. Il nous parle ensuite de l’outil <a
href="http://www.softwareishard.com/blog/har-viewer/" rel="nofollow">HAR Viewer</a> qui permet d’interpréter et analyser ces données exportées, et nous explique l&#8217;automatisation de ces processus avec <a
href="http://seleniumhq.org/" rel="nofollow">Selenium Web Server</a>.</p><p>Encore une fois les résultats tombent : Wicket est le gagnant suivi de JSF, GWT et Spring MVC.</p><p>Néanmoins, Ward nous explique que les résultats sont légèrement biaisés : HAR déclenche son analyse trop tôt pour GWT. En effet, ce dernier a besoin de télécharger les javascripts avant de pouvoir effectuer un rendu. Des solutions en cours de développement peuvent y remédier (W3C Navigation timing API et W3C Resource timing API), mais ne sont pas encore disponibles.</p><p>Ward finit par nous présenter rapidement l’outil <a
href="http://code.google.com/intl/fr/webtoolkit/speedtracer/" rel="nofollow">SpeedTracer</a>, capable d’analyser les points de contentions sur les navigateurs (disponible seulement sous Chrome).</p><p>A travers tous ces tests, nous voyons que l’équipe a réalisé un travail réfléchi : mise en place d’un bon environnement de test, modèle théorique d’analyse des données, etc…, rendant les résultats justifiés et pertinents. Nous pouvons cependant regretter qu’ils n’aient pas intégré d’autres frameworks Web.</p><p>L’équipe conclue par le palmarès des frameworks en terme de coût de scaling pour 10000 utilisateurs avec des temps de réponse moyen à 200 ms</p><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/coutScale.jpg" height="280" width="350" style="border: 0px solid black" /></span></p><p>Le résultat final est GWT en premier, Spring MVC et JSF/Wicket.</p><p>Pour finir, Stijn ouvre le débat et pose la question suivant : c’est bien d’être rapide, mais le framework Web est-il vraiment le point de contention ? A méditer.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/18/devoxx-performance-comparison-of-java-web-frameworks/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Devoxx &#8211; Spring, le futur Spring 3.1 et Spring Social</title><link>http://blog.xebia.fr/2011/11/18/devoxx-spring-le-futur-spring-3-1-et-spring-social/</link> <comments>http://blog.xebia.fr/2011/11/18/devoxx-spring-le-futur-spring-3-1-et-spring-social/#comments</comments> <pubDate>Fri, 18 Nov 2011 09:02:41 +0000</pubDate> <dc:creator>François Marot</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Spring]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9247</guid> <description><![CDATA[Plusieurs conférences sur Spring et son écosystème ont logiquement eu lieu à Devoxx cette année. C&#8217;était hier &#171;&#160;Productivity Enhancements in Spring 3.1&#160;&#187; et aujourd&#8217;hui &#171;&#160;Spring Social&#171;&#160;. Voyons de quoi elles parlaient. Productivity Enhancements in Spring 3.1 Costin Leau a commencé par remettre Spring dans le contexte actuel: l&#8217;évolution de Java EE tend vers une adoption [...]]]></description> <content:encoded><![CDATA[<p>Plusieurs conférences sur Spring et son écosystème ont logiquement eu lieu à Devoxx cette année. C&#8217;était hier &laquo;&nbsp;<a
href="http://www.devoxx.com/display/DV11/Productivity+Enhancements+in+Spring+3.1" rel="nofollow">Productivity Enhancements in Spring 3.1</a>&nbsp;&raquo; et aujourd&#8217;hui &laquo;&nbsp;<a
href="http://www.devoxx.com/display/DV11/Socializing+Your+Spring+Applications" rel="nofollow">Spring Social</a>&laquo;&nbsp;. Voyons de quoi elles parlaient.</p><p><span
style="display: block; text-align: center"><img
src="http://www.springsource.org/sites/all/themes/s2org11/images/home-video-big_shadow.png" style="border: 0px solid black" /></span></p><h3><a
name="Devoxx-Spring%2ClefuturSpring3.1etSpringSocial-ProductivityEnhancementsinSpring3.1"></a>Productivity Enhancements in Spring 3.1</h3><p><a
href="https://twitter.com/#!/costinl" rel="nofollow">Costin Leau</a> a commencé par remettre Spring dans le contexte actuel: l&#8217;évolution de Java EE tend vers une adoption rapide de EE6, Tomcat 7 apporte le support des Servlet 3 (de JEE 6) et le Cloud propose des solutions très diverses, de GAE basé sur Jetty à Amazon Elastic Cloud en passant par VMWare CloudFoundry proposant Tomcat. Bref les solutions sont multiples et Spring entend s&#8217;imposer en tant qu&#8217;élément commun permettant les bonnes pratiques facilitant le passage d&#8217;un environnement à l&#8217;autre.</p><p>Costin est ensuite entré dans le vif du sujet en détaillant les nouveautés qu&#8217;apportera Spring 3.1. Mais une précision s&#8217;imposait d&#8217;abord. Spring est souvent critiqué pour la verbosité de ses appplicationContext.xml, mais Costin a tenu à rappeler que depuis plusieurs années on peut configurer entièrement le conteneur en Java. Et c&#8217;est même disponible en Spring 2.0, grâce à un add-on ! Les critiques envers le xml ne sont donc pas fondées: comme toujours, Spring offre le choix.</p><p>Les nouveautés de Spring 3.1 sont les suivantes:</p><p>Nos applications doivent pouvoir être déployées dans différents environnements (serveur local, Cloud) ainsi que différents contextes. 2 fonctionnalités aident à cela:</p><ul><li>Afin de disposer des MEMES artefacts à déployers dans les  différents environnements, il faut être capable de savoir dans quel environnement se trouve l&#8217;application pour qu&#8217;elle puisse adapter son comportement. On ne veut pas avoir à contruire des war/jar/ear/etc  spécifiques à un environnement donné ! <b>Une abstraction des propriétés</b> a donc été effectuée (plus de détails <a
href="http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/" rel="nofollow">ici</a>) et elles peuvent donc être accédées de façon quasi-transparente tout en étant stockées dans:<ul><li>JNDI</li><li>des propriétés systèmes</li><li>des fichiers .properties.</li></ul></li><li>Des <b>profiles de beans</b> permettant d&#8217;activer ou non certains beans seulement dans certains contextes. Par exemple en dev, vous n&#8217;utiliserez que qu&#8217;un mock d&#8217;authentification alors qu&#8217;en production le vrai service sera appelé. Couplé avec la configuration Java-based, on se contentera d&#8217;annoter un bean @Profile(&laquo;&nbsp;dev&nbsp;&raquo;) par exemple.</li><li>Le <b>c-namespace</b> permet de simplifier légerement ses ApplicationContexts. Ainsi un bean pourra s&#8217;écrire<pre class="brush: java; gutter: true; title: ; notranslate">
&lt;bean id=&quot;foo&quot; class=&quot;x.y.Foo&quot; c:bar-ref=&quot;bar&quot; c:baz-ref=&quot;baz&quot; c:email=&quot;foo@bar.com&quot;&gt;
&lt;!-- au lieu de: --&gt;
&lt;bean id=&quot;foo&quot; class=&quot;x.y.Foo&quot;&gt;
  &lt;constructor-arg ref=&quot;bar&quot;/&gt;
  &lt;constructor-arg ref=&quot;baz&quot;/&gt;
  &lt;constructor-arg value=&quot;foo@bar.com&quot;/&gt;
&lt;/bean&gt;
</pre></li><li>L&#8217;utilisation d&#8217;un <b>cache</b> se fera de manière aisée, de façon déclarative. Cette fonctionnalité est basée sur les paramètres d&#8217;entrée de la méthode et le principe est &laquo;&nbsp;même entrée, même sortie&nbsp;&raquo;. Les annotations @Cacheable et @CacheEvict parlent d&#8217;elle-même. Pour cacher les données, EHCache est prévu (ainsi qu&#8217;une ConcurrentMap pour le dev) mais on pourra aussi se brancher aisément sur GemFire ou Redis.<pre class="brush: java; gutter: true; title: ; notranslate">
// ici on utilise seulement la valeur brute de l'ISBN comme clef
@Cacheable(value=&quot;book&quot;, key=&quot;#isbn.rawNumber&quot;)
public Book findBook(ISBN isbn, boolean checkWarehouse, boolean includeUsed)
// Suppression des entrées du cache avant de le recharger
@CacheEvict(value = &quot;books&quot;, allEntries=true)
public void loadBooks(InputStream batch)
</pre></li><li>Les <b>servlet en version 3.0</b> seront de la partie avec un support de l&#8217;upload asynchrone grâce au nouveau <a
href="http://static.springsource.org/spring/docs/3.1.0.RC1/javadoc-api/org/springframework/web/multipart/support/StandardServletMultipartResolver.html" rel="nofollow">MulitpartResolver</a>.</li><li>Spring sera à jour pour supporter de <b>nouvelles versions de librairies</b>:<ul><li>Hibernate 4, pas encore sorti, déjà supporté.</li><li>Quartz 2.0 et 2.1. Mais leurs API n&#8217;étant pas compatible avec les précédentes versions, il faudra sans doute écrire du code spécifique. La compatibilité Quartz 1.5+ est de toutes façons conservée.</li><li>JDBC 4.1 apporté par Java 7</li><li>le framework fork-join lui aussi dans Java 7</li></ul></li></ul><p>Et la question qui vous brûle les lèvres est de savoir quand vous pourrez enfin mettre la main sur toutes ces bonnes choses: la RC1 est déjà disponible, la RC2 devrait débarquer la semaine prochaine et la version finale, Spring 3.1 GA &laquo;&nbsp;soon after&nbsp;&raquo;. Courage, ça ne va pas tarder !</p><p>Pour une description exhaustive des nouveautés de Spring 3.1, rien de mieux que <a
href="http://static.springsource.org/spring/docs/3.1.0.RC1/spring-framework-reference/html/new-in-3.1.html" rel="nofollow">la doc officielle</a>.</p><h3><a
name="Devoxx-Spring%2ClefuturSpring3.1etSpringSocial-SpringSocial"></a>Spring Social</h3><p><span
style="float: right"><img
src="http://www.springsource.org/files/imagefield_thumbs/project/images/Project_Social.png" style="margin: 1em 1em 1em 1em; border: 0px solid black" /></span></p><p><a
href="http://joshlong.com/jl/about.html" rel="nofollow">Josh Long</a> nous a quant à lui présenté <b>Spring Social</b>, une librairie qui fournit des abstractions pour faciliter les interactions avec les réseaux sociaux.</p><p>Comme nous le savons tous, les réseaux sociaux de nos jours sont fondamentaux: nombre de marques comptent sur eux pour leur marketing, pour assurer un support et suivi des utilisateurs, pour obtenir du trafic qualifié sur leur site&#8230; Même si vous n’êtes pas vous-même sur ces réseaux, tôt ou tard, vous travaillerez sur des projets où vous devrez interagir avec eux.</p><p>Tous ces réseau offrent des API HTTP/REST, ce qui est bien. Ce qui est mal par contre, c&#8217;est qu&#8217;ils disposent tous de formats et particularités qui nécessitent d&#8217;écrire du code spécifique à chacun.</p><h4><a
name="Devoxx-Spring%2ClefuturSpring3.1etSpringSocial-Seconnecter"></a>Se connecter</h4><p>Avant d’interagir avec les réseaux sociaux, il faut commencer par s&#8217;y connecter. Là intervient la notion de <a
href="http://static.springsource.org/spring-social/docs/1.0.x/reference/html/serviceprovider.html" rel="nofollow">service provider</a>.</p><h4><a
name="Devoxx-Spring%2ClefuturSpring3.1etSpringSocial-Param%C3%A9trerlaConnection"></a>Paramétrer la Connection</h4><p>Mais encore faut il que votre webapp soit autorisée à manipuler le compte de votre utilisateur sur le réseau social. Pour cela, il faut que celui-ci l&#8217;y autorise. Et comme la suite des étapes, notamment pour l&#8217;authentification OAuth n&#8217;est pas triviale, Spring Social fournit le nécessaire pour faciliter et rendre générique ces étapes dans Spring MVC: c&#8217;est <a
href="http://static.springsource.org/spring-social/docs/1.0.x/reference/html/connecting.html" rel="nofollow">le ConnectController</a>.</p><h4><a
name="Devoxx-Spring%2ClefuturSpring3.1etSpringSocial-Interragir"></a>Interragir</h4><p>Et pour utiliser toute la puissance de chaque réseau social, <a
href="http://static.springsource.org/spring-social/docs/1.0.x/reference/htmlsingle/#table-spring-social-client-modules" rel="nofollow">un module client</a> spécifique est implémenté pour chacun et vous permettra d&#8217;accéder à vos listes d&#8217;amis (Facebook), de twitter (Twitter) ou d&#8217;autoriser un énième chasseur de tête à vous parler du poste extraordinaire qu&#8217;il a pour vous ou vos collègues (LinkedIn).</p><p>L&#8217;avantage d&#8217;un tel système est que si Facebook, par exemple, décide du moindre changement  de comportement de son API, le module client spécifique fournit par Spring sera rapidement mis à jour de façon à ce que vous puissiez continuer de façon transparente à y accéder.</p><p>Bien sûr un tel système d’abstraction a un certain coût et si vous souhaitez seulement interagir avec Twitter par exemple, vous feriez peut être mieux de passer directement par une librairie spécifique comme <a
href="http://twitter4j.org" rel="nofollow">Twitter4J</a>. Mais si vos besoin évoluent et que vous pouvez être amené à ajouter Facebook ou TripIt, la petite plomberie requise par Spring Social sera bien négligeable face au gain apporté par l&#8217;API unifiée.</p><p>Pour terminer, Josh a parlé de l’intégration de Spring Social avec Spring Intégration. Ce dernier apporte tout particulièrement le <a
href="http://en.wikipedia.org/wiki/Hollywood_Principle" rel="nofollow">principe d&#8217;Hollywood</a> (&laquo;&nbsp;don&#8217;t call us we&#8217;ll call you&nbsp;&raquo;) permettant de définir des callback qui seront appelés lorsque certains critères (plus de x mails reçus, arrivé d&#8217;un tweet, etc&#8230;) seront vérifiés. L&#8217;intégration se fait aisément avec des flux comme Twitter, RSS/Atom, l&#8217;envoi et la réception de mails POP3, SMTP, IMAP&#8230;</p><p>Bref, en plus du stand CloudFoundry, Spring était bien présent cette année sur le salon au travers de plusieurs conférence. Le framework continue à évoluer et à abstraire les accès à d&#8217;autres APIs. On regrettera juste ne pas avoir eu la moindre présentation sur Grails à se mettre sous la dent, d&#8217;autant que la version 2.0 ne saurait tarder.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/18/devoxx-spring-le-futur-spring-3-1-et-spring-social/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Devoxx &#8211; Cracking clojure</title><link>http://blog.xebia.fr/2011/11/17/devoxx-cracking-clojure/</link> <comments>http://blog.xebia.fr/2011/11/17/devoxx-cracking-clojure/#comments</comments> <pubDate>Thu, 17 Nov 2011 18:23:26 +0000</pubDate> <dc:creator>Nicolas Jozwiak</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[clojure]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Programmation fonctionnelle]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9238</guid> <description><![CDATA[Clojure est un dialecte de Lisp fonctionnant sur la JVM. Dans cette présentation, Alex Miller s&#8217;adresse aux développeurs sans expérience préalable du langage. Son but est d&#8217;en présenter les concepts de base et de montrer la puissance et l&#8217;expressivité qui lui ont fait choisir Clojure comme langage principal chez son employeur actuel. Alex revient sur [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/clojure.gif" style="border: 0px solid black; padding-left: 20px;padding-right: 20px;" /></span></p><p><a
href="http://clojure.org/" rel="nofollow">Clojure</a> est un dialecte de Lisp fonctionnant sur la JVM. Dans cette présentation, <a
href="http://devoxx.com/display/DV11/Alex+Miller" rel="nofollow">Alex Miller</a> s&#8217;adresse aux développeurs sans expérience préalable du langage. Son but est d&#8217;en présenter les concepts de base et de montrer la puissance et l&#8217;expressivité qui lui ont fait choisir Clojure comme langage principal chez son employeur actuel.</p><p>Alex revient sur les paradigmes de base du langage :</p><ul><li>fonctionnel</li><li>dynamique</li><li>compilé</li><li>favorisant l&#8217;immutabilité et l&#8217;évaluation paresseuse.</li></ul><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/clojure.jpg" style="border: 0px solid black; padding: 20px;" /></span></p><p>Il ouvre le capot du langage en nous expliquant le fonctionnement du compilateur :</p><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/compilateur.jpg" style="border: 0px solid black; padding: 20px;" /></span></p><p>En particulier, Clojure dispose d&#8217;un système de <a
href="http://clojure.org/macros" rel="nofollow">macros</a>, qui seront détectées et transformées en un bloc de code par le <em>reader</em>.</p><h3><a
name="Devoxx-Crackingclojure-Typesdebase"></a>Types de base</h3><p>On retrouve sans surprise les équivalents des types Java : booléens, entiers et flottants. Parmi les particularités du langage, on peut noter que Clojure gère de manière transparente la conversion vers des types de précision arbitraire quand cela est nécessaire. Comme en Javascript, n&#8217;importe quel type peut être utilisé en tant qu&#8217;expression booléenne. Mais seuls <code>nil</code> et <code>false</code> sont considérés comme valeurs <em>falsy</em>, toutes les autres valeurs sont évaluées à <code>true</code> (y compris 0 et la liste vide <code>()</code>).</p><h3><a
name="Devoxx-Crackingclojure-Collections"></a>Collections</h3><p>Clojure fournit un ensemble de structures de base, que le développeur est encouragé à réutiliser au maximum :</p><pre class="brush: java; gutter: true; title: ; notranslate">
(def myList '(1 2 3 4))        ;; liste chaînée, l'apostrophe est expliquée plus loin
(def myVector [1 2 3 4])
(get myVector 1)               ;; accès par index (renvoie 2)
(def mySet #{1 2 3 4})
(def myMap {:a 1, :b 2, :c 3}) ;; les clés sont des symboles (préfixés par ':' comme en Ruby)
(get myMap :a)                 ;; récupération par clé (renvoie 1)
(myMap :a)                     ;; notation plus concise
(:a myMap)                     ;; les symboles peuvent également se comporter comme des fonctions d'extraction
</pre><p>Au-dessus de tous ces types, on trouve la notion de <em>séquence</em>. Une séquence correspond à une liste logique composée d&#8217;un premier élément et d&#8217;une séquence contenant les éléments restants :</p><pre class="brush: java; gutter: true; title: ; notranslate">
(first '(1 2 3 4)) ;; renvoie 1
(rest  '(1 2 3 4)) ;; renvoie (2 3 4)
</pre><p>Cette abstraction est très utilisée dans Clojure et ne se limite pas aux collections : ainsi, un fichier est une séquence de lignes, un répertoire une séquence de fichiers, un <code>ResultSet</code> une séquence d&#8217;enregistrements dans une base de données, etc.</p><p>La puissance des séquences réside dans les fonctions d&#8217;ordre supérieur qu&#8217;elles fournissent, comme nous allons le voir ci-dessous.</p><h3><a
name="Devoxx-Crackingclojure-Fonction"></a>Fonction</h3><p>Nous avons déjà vu quelques exemples d&#8217;applications de fonctions :</p><pre class="brush: java; gutter: true; title: ; notranslate">
(+ 41 1) ;; renvoie 42
</pre><p>Un point intéressant à noter est qu&#8217;une expression est elle-même une liste : par défaut, Clojure invoque le premier élément en lui passant les valeurs issues de l&#8217;évaluation des éléments restants (il est possible de désactiver cette évaluation en précédant l&#8217;expression d&#8217;une apostrophe, comme nous l&#8217;avons fait pour écrire les listes littérales dans les exemples précédents).</p><p>Le code est donc écrit comme des données et les données comme du code ; on dit que le language est <em>homoiconique</em> (un mot à retenir pour briller lors de votre prochain dîner geek).</p><p>La définition de fonctions se fait avec le mot-clé <code>fn</code> :</p><pre class="brush: java; gutter: true; title: ; notranslate">
(def square (fn [x] (* x x)))
;; ou sous forme raccourcie :
(defn square [x] (* x x))
</pre><p>Les séquences fournissent des fonctions d&#8217;ordre supérieur, c&#8217;est-à-dire auxquelles on peut passer d&#8217;autres fonctions (généralement des fonctions anonymes définies à la volée) :</p><pre class="brush: java; gutter: true; title: ; notranslate">
;; Applique une fonction à tous les éléments d'une séquence
(map (fn [x] (+ x 1)) '(1 2 3 4))    ;; retourne (2 3 4 5)
;; Filtre les éléments d'une séquence selon un prédicat
(filter (fn [x] (&gt; x 2)) '(1 2 3 4)) ;; retourne (3 4)
</pre><p>Au passage, les structures de données sont généralement immuables (les expressions ci-dessus renvoient une nouvelle liste). Clojure favorise également l&#8217;évaluation paresseuse et est capable de travailler avec des séquences infinies.</p><p>Alex dispose maintenant de suffisamment d&#8217;éléments pour nous présenter un exemple un peu plus concret :</p><pre class="brush: java; gutter: true; title: ; notranslate">
;; Compte les lignes d'un fichier:
(defn line-count [file]
  (count (line-seq  (reader file))))
;; Compte les lignes de chaque fichier d'un répertoire:
(defn file-counts [dir]
  (map line-count
    (filter #(. % isFile)
      (file-seq (file dir)))))
;; Compte le nombre de lignes total dans le répertoire
(defn total-count [dir]
  (reduce + (file-counts dir)))
</pre><p>Sans expliquer en détail le code, on retrouve la concision et l&#8217;expressivité communément présentées comme des avantages clés des langages fonctionnels.</p><h3><a
name="Devoxx-Crackingclojure-Objet"></a>Objet</h3><p>Dans les cas les plus simples, un objet peut être une simple <em>map</em>, mais Clojure permet également de créer un type d&#8217;enregistrement spécifique :</p><pre class="brush: java; gutter: true; title: ; notranslate">
;; Un exemple de circonstance à Devoxx:
(defrecord Beer [name brewery])
;; Instanciation et affectation à une variable
(def beer (-&gt;Beer &quot;Tremens&quot; &quot;Delirium&quot;))
;; Accès à une propriété (comme pour les maps, plusieurs syntaxes)
(get beer :name)
(:name beer)
(beer :name)
</pre><p>Alex présente trois méthodes pour faire du polymorphisme :</p><ol><li>dans le cas le plus simple, donner le même nom aux propriétés communes à plusieurs types, elles seront ainsi accédées de manière transparente quel que soit le type ;</li><li>les <em>multimethods</em> permettent de définir une fonction et de spécifier des implémentations différentes selon le type sur lesquels elle est invoquée ;</li><li>enfin, les <em>protocoles</em> définissent un contrat, qu&#8217;il faut implémenter pour chaque type participant :</li></ol><pre class="brush: java; gutter: true; title: ; notranslate">
(defprotocol Beverage
  (source [beverage]))
;; Pour une bière, la fonction source est implémentée en invoquant le getter de la propriété 'brewery'
(extend-protocol Beverage Beer
  (source [beer] (:brewery beer)))
;; Pour un vin, il s'agit de la propriété 'winery'
(extend-protocol Beverage Wine
  (source [wine] (:winery wine)))
</pre><p>On remarque ici une différence importante avec la notion d&#8217;objet en Java : la déclaration des données est séparée de celle des comportements. Bien que cette approche réduise l&#8217;encapsulation, elle est aussi plus flexible : ainsi, le développeur peut créer un protocole et le faire implémenter par des types qui ne sont pas forcément sous son contrôle (y compris les types de base de Clojure). Les amateurs de Haskell reconnaîtront ce mécanisme : les protocoles sont les équivalents des <em>typeclasses</em>.</p><h3><a
name="Devoxx-Crackingclojure-Concurrence"></a>Concurrence</h3><p>Alex aborde rapidement les fonctionnalités offertes pour la programmation concurrente :</p><ul><li>les <em>atoms</em> sont similaires aux <em>AtomicReferences</em> de Java ;</li><li>les <em>refs</em> sont utilisées uniquement à l&#8217;intérieur de transactions (Clojure dispose d&#8217;une mémoire transactionnelle logicielle) ;</li><li>les <em>agents</em> sont des composants isolés communiquant à travers des files de messages, comme les <em>acteurs</em> d&#8217;Erlang ou Scala.</li></ul><h3><a
name="Devoxx-Crackingclojure-D%C3%A9mo"></a>Démo</h3><p>La session se termine par une session de coding pré-enregistrée, montrant <a
href="http://clj-me.cgrand.net/2011/08/19/conways-game-of-life/" rel="nofollow">l&#8217;implémentation du jeu de la vie de Conway</a>. Les résultats intermédiaires sont affichés après chaque fonction développée, ce qui explicite bien comment l&#8217;application est assemblée en combinant des blocs de base.</p><p>L&#8217;affichage des résultats est un peu austère, mais Alex nous révèle qu&#8217;il a codé une interface graphique basée sur <a
href="http://processing.org" rel="nofollow">Processing</a> pendant la keynote du matin (comment ça, la keynote n&#8217;était pas intéressante ?) et nous la démontre sous les applaudissements de la foule.</p><h3><a
name="Devoxx-Crackingclojure-PourquoiClojure%3F"></a>Pourquoi Clojure ?</h3><p>Au final, Alex a réussi son pari en offrant un tour d&#8217;horizon de Clojure sans perdre son audience. La présentation donne envie d&#8217;aller plus loin dans l&#8217;expérimentation du langage.</p><p>Cependant, beaucoup des aspects présentés rappellent d&#8217;autres langages fonctionnels, en particulier Scala. Interrogé après la présentation, Alex explique que son équipe avait effectivement préselectionné Scala et Clojure sur la base des critères suivants :</p><ul><li>un langage sur la JVM ;</li><li>permettant un niveau d&#8217;abstraction élevé ;</li><li>avec un bon support pour la programmation concurrente.</li></ul><p>Après quelques tests, c&#8217;est finalement Clojure qui l&#8217;a emporté, principalement car c&#8217;est le langage avec lequel l&#8217;équipe a ressenti le plus d&#8217;affinité.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/17/devoxx-cracking-clojure/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Devoxx &#8211; Kotlin</title><link>http://blog.xebia.fr/2011/11/17/devoxx-kotlin/</link> <comments>http://blog.xebia.fr/2011/11/17/devoxx-kotlin/#comments</comments> <pubDate>Thu, 17 Nov 2011 09:17:32 +0000</pubDate> <dc:creator>Julien Buret</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[JetBrains]]></category> <category><![CDATA[Kotlin]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9228</guid> <description><![CDATA[Depuis quelques mois, Kotlin fait parler de lui. Rien de tel qu&#8217;une conférence comme Devoxx pour prendre la température de ce nouveau langage. Lors de cette session, Andrey Breslav nous a expliqué d&#8217;abord les motivations qui ont poussé JetBrains à investir dans le développement de Kotlin : se détacher des limitations du langage Java dues [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/Kotlin.png" height="311" width="273" style="border: 0px solid black" /></span></p><p>Depuis quelques mois, Kotlin fait parler de lui. Rien de tel qu&#8217;une conférence comme Devoxx pour prendre la température de ce nouveau langage.</p><p>Lors de cette session, Andrey Breslav nous a expliqué d&#8217;abord les motivations qui ont poussé JetBrains à investir dans le développement de Kotlin :</p><ul><li>se détacher des limitations du langage Java dues à la compatibilité ascendante,</li><li>avoir un outillage performant. Notamment, une intégration de qualité dans les IDE, un debugger et un compilateur au moins aussi rapide que celui de Java. Pour garantir cela, JetBrains développe en parallèle du langage et du compilateur, un plugin pour l’intégration dans leur IDE IntelliJ ainsi qu&#8217;un plugin simple pour Eclipse,</li><li>avoir une syntaxe plus expressive.</li></ul><p>&nbsp;<br
/> <br
/>&nbsp;<br
/> <br
/>&nbsp;</p><p>Ensuite, il nous a expliqué les choix de design du langage :</p><ul><li>entièrement compatible avec java,</li><li>code concis,</li><li>statiquement typé.</li></ul><p>Ces choix ont été fait de manière à limiter les erreurs à l’exécution de l&#8217;application.</p><p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/Andrey_Breslav.jpg" height="253" width="412" style="border: 0px solid black" /></span></p><p>Pour cela, ils ont implémenté différentes fonctionnalités.</p><p>Pour les plus classiques :</p><ul><li><em>Closure</em>,</li><li><em>Pattern matching</em>,</li><li><em>Inférence de type</em>,</li><li><em>Simplification des accesseurs sur les propriétés</em>,</li><li><em>Les Traits</em>.</li></ul><p>Et pour les plus innovantes :</p><ul><li><em>Extensions Function</em>,</li><li><em>Casting &#8216;intelligent&#8217;</em>,</li><li><em>Static null safety guarantees</em>,</li><li><em>Inline function</em>,</li><li><em>Reified Generics</em>,</li><li><em>Build infrastructure</em>.</li></ul><p>Andrey nous a montré ensuite un grand nombre d&#8217;exemples notamment :</p><ul><li><em>Hello world</em> avec le parcours d&#8217;une itération :<pre class="brush: java; gutter: true; title: ; notranslate">
namespace demo
fun main(args : Array&lt;String&gt;) {
  for (name in args)
    println(&quot;Hello, $name!&quot;)
}
</pre></li></ul><ul><li><em>Extensions Function</em> qui peut notamment permettre d&#8217;étendre les fonctions d&#8217;une classe. Ici, on ajoute la fonction <em>plusAssign</em> que l&#8217;on peut appeler par + ou += à <em>StringBuilder</em> :<pre class="brush: java; gutter: true; title: ; notranslate">
namespace demo
fun main(args : Array&lt;String&gt;) {
  val names = new StringBuilder()
  for (i in args.indices) {
    names += args[i]
    if(i+1 &lt; args.size) {
      names += &quot;,&quot;
    }
  }
  println(&quot;Hello, $name!&quot;)
}
fun StringBuilder.plusAssign(s : String) {
  this.append(s)
}
</pre></li></ul><ul><li><em>Smart Cast</em> pour ne pas caster l&#8217;objet si le type est déjà testé. Il peut être aussi utilisé dans un <em>pattern matching</em> comme dans l&#8217;exemple suivant :<pre class="brush: java; gutter: true; title: ; notranslate">
namespace demo
fun foo(obj : Any?) {
  if(obj is String) {
    obj.substring(2)
  }
  when (obj) {
    is String =&gt; obj[0]
    is Int =&gt; obj + 1
    !is Boolean =&gt; null
    else =&gt; ...
  }
}
</pre></li></ul><ul><li>Le <em>pattern matching</em> accepte des expressions ou un ensemble de valeurs :<pre class="brush: java; gutter: true; title: ; notranslate">
fun bar(x : Int) {
  when (x) {
    0 =&gt; &quot;Zero&quot;
    1, 2, 3 =&gt; &quot;1, 2 or 3&quot;
    x + 1 =&gt; &quot;Really strange&quot;
    in 10...100 =&gt; &quot;In range&quot;
    !in 100...1000 =&gt; &quot;Out of range&quot;
  }
}
</pre></li></ul><p>Cerise sur le gâteau, Andrey nous a montré le compilateur et le debuggeur sous IntelliJ parfaitement fonctionnels.</p><p>Cette session était surtout participative avec pas mal de questions dans la salle. À chaque fois, Andrey répondait à ces dernières de manière pertinente et nous avons constaté que l&#8217;équipe JetBrains a bien réfléchi pour faire un langage simple. Kotlin possède une syntaxe proche de celle de Java et de Scala, tout en les allégeant.</p><p>Kotlin est encore en phase de développement et les discussions sont encore vives sur les choix de conception du langage. Pour preuve, la <a
href="http://confluence.jetbrains.net/display/Kotlin/Welcome" rel="nofollow">page de Kotlin</a> contient énormément de commentaires sur les améliorations ou évolutions à lui apporter. Un langage de plus à surveiller de près.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/17/devoxx-kotlin/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Devoxx &#8211; HTML5 à l&#8217;honneur</title><link>http://blog.xebia.fr/2011/11/17/devoxx-html5-a-lhonneur/</link> <comments>http://blog.xebia.fr/2011/11/17/devoxx-html5-a-lhonneur/#comments</comments> <pubDate>Thu, 17 Nov 2011 08:45:20 +0000</pubDate> <dc:creator>François Marot</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[Web]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9213</guid> <description><![CDATA[HTML 5 est définitivement à l&#8217;honneur de ce Devoxx 2011. Pour preuve les salles de 3 conférences dédiées au sujet étaient pleines. Nous vous avons déjà parlé de &#171;&#160;Devoxx &#8211; Les nouvelles applications HTML 5 et DART&#160;&#187; et nous allons maintenant évoquer les 2 autres sessions que nous avons vues: Working Off the Grid: HTML5 [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/html5.jpg" style="border: 0px solid black; padding: 20px;" /></span><br
/> HTML 5 est définitivement à l&#8217;honneur de ce Devoxx 2011. Pour preuve les salles de 3 conférences dédiées au sujet étaient pleines. Nous vous avons déjà parlé de &laquo;&nbsp;<a
href="http://blog.xebia.fr/2011/11/17/devoxx-les-nouvelles-applications-html-5-et-dart/" rel="nofollow">Devoxx &#8211; Les nouvelles applications HTML 5 et DART</a>&nbsp;&raquo; et nous allons maintenant évoquer les 2 autres sessions que nous avons vues:</p><ul><li><a
href="http://www.devoxx.com/display/DV11/Working+Off+the+Grid++HTML5+Offline" rel="nofollow">Working Off the Grid: HTML5 Offline</a></li><li><a
href="http://www.devoxx.com/display/DV11/Bleeding+Edge+HTML5" rel="nofollow">Bleeding Edge HTML5</a></li></ul><p>Elles ont toutes été réalisées par des personnes de Google, preuve de l&#8217;implication de la compagnie dans le futur du HTML.</p><p>Il y avait aussi un sujet &laquo;&nbsp;Intro to HTML5 Game Programming &#8211; WebGL Edition&nbsp;&raquo; mais auquel aucun Xebian n&#8217;a pu assister: il faut bien faire un choix lorsque plusieurs sessions intéressantes sont en parallèle !</p><h3><a
name="Devoxx-HTML5%C3%A0l%27honneur-WorkingOfftheGrid%3AHTML5Offline"></a>Working Off the Grid: HTML5 Offline</h3><p><a
href="https://twitter.com/#!/sw12" rel="nofollow">Sam Dutton</a> de Google nous <a
href="http://www.samdutton.com/offlinePresentation/#1" rel="nofollow">a présenté</a> les différentes solutions de stockage hors ligne. Les problématiques adressées par ces technologies sont multiples:</p><ul><li>Problèmes de bande passante.</li><li>Connexions peu stables.</li><li>Amélioration des performances des applications web.</li><li>Diminution de la consommation de ressources sur le serveur.</li><li>Amélioration générale de l’expérience utilisateur.</li></ul><p>Auparavant, nous ne disposions que de méthodes peu satisfaisantes: cookies, flash&#8230;</p><p>Maintenant, des solutions plus adaptées sont à notre disposition:</p><ul><li>Web Storage (localStorage/sessionStorage): permet de stocker de façon simple des paires clef/valeur.</li><li>IndexedDB/WebSQL: stockage de structures plus complexes et support des transactions (utile si plusieurs onglets ou sessions ouverts simultanément).</li><li><a
href="http://www.html5rocks.com/en/tutorials/appcache/beginner/" rel="nofollow">AppCache</a>: l&#8217;utilisation d&#8217;un fichier manifeste permet de déclarer des ressources (images, CSS&#8230;) à mettre en cache.</li></ul><p>Bref, les possibilités s&#8217;annoncent énormes mais des problématiques fondamentales demeurent: quid de la compatibilité entre navigateurs ? Tous ne supportent pas toutes les APIs et cela peut augurer de belles galères. C&#8217;est malheureusement un aspect sur lequel la présentation n&#8217;a pas du tout insisté.</p><p>Pour plus de renseignements sur les possibilités de stockages hors ligne, le site html5Rocks en offre <a
href="http://www.html5rocks.com/en/tutorials/offline/whats-offline/" rel="nofollow">un vaste aperçu</a>.</p><h3><a
name="Devoxx-HTML5%C3%A0l%27honneur-BleedingEdgeHTML5"></a>Bleeding Edge HTML5</h3><p>Paul Kinlan (dont voici <a
href="http://paul.kinlan.me/" rel="nofollow">le blog</a>) a effectué une présentation assez généraliste sur nombre de nouveautés apportées par HTML 5. Les slides sont <a
href="http://bleedinghtml5.appspot.com" rel="nofollow">en ligne</a> et voici les points marquants:</p><p><span
style="display: block; text-align: center"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/Paul-Kinlan.jpg" style="border: 0px solid black" /></span></p><ul><li>Début en douceur avec <a
href="http://www.w3schools.com/html5/tag_mark.asp" rel="nofollow">la nouvelle balise</a> &lt;mark /&gt; qui s&#8217;utilise pour mettre en avant, de façon sémantique, une partie de texte. Bon, ce n&#8217;est pas cela qui changera la face du web ﻿!</li><li>Les champs susceptibles d’être remplis par la voix, les <a
href="http://www.sitepoint.com/html5-speech-input-fields/" rel="nofollow">speech input</a>, sont aussi une nouveauté: un attribut x-webkit-speech, pour l&#8217;instant disponible seulement sur Chrome, permet d&#8217;offrir la possibilité de saisir du texte avec un micro. On peut se demander pourquoi laisser au développeur le choix d&#8217;activer ou non cette possibilité: il serait peut être plus simple de laisser le choix au niveau du navigateur, ce qui permettrait à tous les champs texte de bénéficier de cette fonctionnalité.</li><li>On passe ensuite à des nouveautés plus impressionnantes concernant les animations. On en profitera pour remarquer que Google a en ce moment un intérêt certain pour les jeux videos: que ce soit avec Angry Birds dans Chrome ou le nouveau framework avec lequel il a été réalisé, <a
href="http://playn-2011.appspot.com/slides/index.html" rel="nofollow">PlayN</a>, Google a envie de réussir dans ce domaine. Pour revenir aux animations, donc, au lieu de coder en dur un timeout définissant le framerate à une valeur fixe, les navigateurs proposent maintenant la notion de &laquo;&nbsp;<a
href="http://www.html5rocks.com/en/tutorials/speed/html5/#toc-request-ani-frame" rel="nofollow">RequestAnimationFrame</a>&nbsp;&raquo; qui appelle un callback définit par l&#8217;utilisateur quand le navigateur le juge utile. Ainsi le CPU ne travaillera pas pour rien: d&#8217;une part, pas besoin de calculer 100 images secondes si le rafraichissement de l&#8217;écran est de 60Hz, et d&#8217;autre part le callback ne sera pas appelé si l&#8217;onglet de l&#8217;animation n&#8217;est pas l&#8217;onglet actif. Cette fonctionnalité fait aussi partie de la &laquo;&nbsp;<a
href="http://updates.html5rocks.com/2011/06/Page-Visibility-API-Have-I-got-your-attention" rel="nofollow">page visibility API</a>&laquo;&nbsp;: les vidéos ou sons pourront être mis en pause lors du changement d&#8217;onglet.</li><li>Les &laquo;&nbsp;<a
href="http://bleedinghtml5.appspot.com/#8" rel="nofollow">prerendered pages</a>&nbsp;&raquo; sont des pages liées à d&#8217;autres par un lien spécial permettant leur chargement en arrière plan pour un rendu immédiat lors du clic sur le lien. On peut imaginer Google utiliser ce type de liens pour précharger les 2 ou 3 premiers résultats affichés lors d&#8217;une recherche. Par contre, on voit mal comment ce type de liens pourra se passer d&#8217;augmenter virtuellement le traffic des sites même s&#8217;ils n&#8217;ont pas été visités réellement par des utilisateurs.</li><li>Un attribut &laquo;&nbsp;online&nbsp;&raquo; de l&#8217;objet js navigator permet maintenant de connaitre l&#8217;état de l&#8217;ordinateur, connecté ou non à un réseau. Un callback permet d’être notifié sur un changement d&#8217;état (connexion/déconnexion).</li><li>Après le succès qu&#8217;on leur connait dans Android, les &laquo;&nbsp;intents&nbsp;&raquo; débarquent sur le web. On pourra grâce à eux partager du contenu entre plusieurs sites. Il suffira que les sites fournisseurs se déclarent au navigateur pour que l&#8217;on puisse les sélectionner comme tel et, par exemple, importer directement des photos en provenance de Picasa lors de la rédaction de son mail sur gmail.com. Plus de détails dans <a
href="http://bleedinghtml5.appspot.com/#19" rel="nofollow">les slides</a>.</li><li>Le projet <a
href="http://www.webrtc.org/" rel="nofollow">WebRTC</a> a pour but de donner la possibilité de réaliser des chats vidéos sans flash, directement avec les API javascript fournies par le navigateur. Le but avoué est de casser le paradigme de la numérotation en permettant des communications instantanées en un clic. Mais du coté software, cela suppose bien sûr des notions de:<ul><li>Capture/rendu de flux audios/vidéos.</li><li>Énumération des périphériques matériels de capture.</li></ul></li><li>Pour finir, nous avons eu droit à une démonstration plutôt impressionnante de génération dynamique de sons, en temps réel et en javascript. Des filtres successifs peuvent être appliqués pour déformer le son original.</li></ul><p>Dès demain, de nouvelles présentations sur HTML5 devraient avoir lieu, notamment en relation avec JavaFX et Play!/Scala. Il n&#8217;y a pas de mystère, HTML5 gagne ces temps-ci une crédibilité énorme, avec notamment les soutiens récents de Microsoft et Adobe, qui incitent nombre d&#8217;entre nous à s&#8217;intéresser de près au projet qui est en perpétuelle évolution.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/17/devoxx-html5-a-lhonneur/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Devoxx &#8211; Les nouvelles applications HTML 5 et DART</title><link>http://blog.xebia.fr/2011/11/17/devoxx-les-nouvelles-applications-html-5-et-dart/</link> <comments>http://blog.xebia.fr/2011/11/17/devoxx-les-nouvelles-applications-html-5-et-dart/#comments</comments> <pubDate>Thu, 17 Nov 2011 06:19:18 +0000</pubDate> <dc:creator>Nicolas Jozwiak</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[CSS3]]></category> <category><![CDATA[Dart]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[HTML 5]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9205</guid> <description><![CDATA[HTML 5 est sans conteste un des sujets phare de ce Devoxx 2011. Pour preuve la salle est bien remplie. Lors de cette présentation David Chandler commence par nous  montrer comment HTML 5 peut nous aider à simplifier la conception et l’utilisation des applications Web. Il nous rappelle également que les versions récentes des navigateurs [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: left;"><img
style="border: 0px solid black; margin: 1em 1em 1em 1em;" src="http://blog.xebia.fr/wp-content/uploads/2011/11/dart_scene.jpeg" alt="" width="400" /></span><br
/> HTML 5 est sans conteste un des sujets phare de ce Devoxx 2011. Pour preuve la salle est bien remplie. Lors de cette présentation David Chandler commence par nous  montrer comment HTML 5 peut nous aider à simplifier la conception et l’utilisation des applications Web. Il nous rappelle également que les versions récentes des navigateurs prennent en charge le HTML 5, mis à part Internet Explorer (étonnant non ?)</p><p>&nbsp;<br
/> <br
/>&nbsp;<br
/> <br
/>&nbsp;<br
/> <br
/>&nbsp;<br
/> <br
/>&nbsp;</p><p><span
style="float: right;"><img
style="border: 0px solid black; margin: 1em 1em 1em 1em;" src="http://blog.xebia.fr/wp-content/uploads/2011/11/html5.jpg" alt="" width="320" height="250" /></span></p><p>David commence par poser la question suivante : comment créer une application Web avec le comportement d’une application desktop ? La réponse réside dans de petites démonstrations des possibilités d’HTML 5 :</p><ul><li>Sauvegarde de fichiers du navigateur vers le filesystem et inversement.</li><li>Sauvegarde des données saisies localement</li><li>Détection des déconnexions et reconnexions automatique.</li></ul><p>Assez bluffantes, ces fonctionnalités se mettent en place en seulement quelques lignes !</p><p>David poursuit avec le CSS3 et nous parle des possibilités de transitions et d’animations. Pour les fans de jeux, la version Web d’<a
href="http://chrome.angrybirds.com/" rel="nofollow">Angry Birds</a> est basée sur CSS3 et lorsque nous voyons le résultat, nous ne pouvons qu’être admiratifs.</p><p>Vient ensuite une discussion autour de la conception des applications. David nous explique que les frameworks MVC (Backbone, ExtJS, etc) nous impose une limitation de par leur structure.</p><p>Une première solution réside dans l’utilisation du triplet HTML, javascript et CSS, mais cette dernière pose un certain nombre de problèmes :</p><ul><li>Manque de performances.</li><li>Difficulté de debugging.</li><li>Pas de typage fort, rendant le développement d’outils difficile.</li></ul><p>La seconde solution est l’utilisation du framework GWT. Le principe est de coder du Java qui est automatiquement « traduit » en javascript. Ce dernier permet d’adresser les problèmes précédemment cités, mais GWT reste difficile à maîtriser et peut se révéler lourd à mettre en place.</p><p><span
style="float: left;"><img
style="border: 0px solid black; margin: 1em 1em 1em 1em;" src="http://blog.xebia.fr/wp-content/uploads/2011/11/dart-logo.png" alt="" height="100" /></span><br
/> David nous présente alors DART. Ce dernier est né de la volonté d’avoir un langage de scripting plus léger tout en utilisant la structure d’un langage orienté objet. Dart est un langage construit pour plaire à la fois aux personnes fluides en Java ou en JavaScript. La courbe d&#8217;apprentissage devrait être particulièrement courte pour ces deux populations. Aujourd&#8217;hui Dart est un langage qu&#8217;il faut &laquo;&nbsp;compiler&nbsp;&raquo; pour produire du javascript, dans la même veine que <a
href="http://jashkenas.github.com/coffee-script/" rel="nofollow">coffeescript</a>.</p><p>Voici un exemple de code en DART :</p><pre class="brush: java; gutter: true; title: ; notranslate">
interface Shape {
  num perimeter();
}
class Rectangle implements Shape {
  final num height, width;
  Rectangle(num this.height, num this.width);  // Compact constructor syntax.
  num perimeter() =&gt; 2*height + 2*width;       // Short function syntax.
}
class Square extends Rectangle {
  Square(num size) : super(size, size);
}
</pre><p>Nous retrouvons ainsi les notions de classes, interfaces et méthodes entre autres.</p><p>Concernant l’outillage, nous avons à disposition Dart VM, dartc (compilateur javascript écrit en java), frog (compilateur javascript écrit en Dart, qui fait figure de futur compilateur) et le dartboard. Un début d&#8217;IDE Dart (appelé <a
href="http://www.dartlang.org/docs/getting-started/editor/index-macos.html" rel="nofollow">Dart Editor</a>) existe également pour Eclipse. Tous ces éléments peuvent être retrouvés sur le site du <a
href="http://dartlang.org" rel="nofollow">langage</a>. Il est à noter que Dart est encore en version alpha, et que des changements dans le langage vont encore intervenir. Il n&#8217;existe pas non plus de binaire disponible en téléchargement pour toutes les plateformes, mais nous sommes invités à télécharger les <a
href="http://dart.googlecode.com" rel="nofollow">sources</a> et à construire les différents outils (VM, compilateur etc..)</p><p>David termine sa présentation en nous expliquant qu’il reste encore du travail sur ce langage, mais que Google travaille d’arrache pied pour nous donner la possibilité de développer du javascript avec une syntaxe allégée. Notamment ils discutent avec l&#8217;équipe en charge de Google Chrome pour une intégration native de Dart dans le navigateur, poussant pour que demain, les navigateurs du marchés embarquent une vm dart, comme ils embarquent aujourd&#8217;hui une vm javascript.</p><p>Nul doute que l’évolution de ce langage est à surveiller et que ce dernier fera parler de lui dans les mois à venir.</p><p>Les slides de cette présentation sont <a
href="http://www.dartlang.org/slides/2011/11/devoxx/index.html#1" rel="nofollow">disponibles</a>, en html5 bien sur.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/17/devoxx-les-nouvelles-applications-html-5-et-dart/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia sponsor platinium de Devoxx France !</title><link>http://blog.xebia.fr/2011/11/16/xebia-sponsor-platinium-de-devoxx-france/</link> <comments>http://blog.xebia.fr/2011/11/16/xebia-sponsor-platinium-de-devoxx-france/#comments</comments> <pubDate>Wed, 16 Nov 2011 10:06:22 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Tech Events]]></category> <category><![CDATA[Conference]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9177</guid> <description><![CDATA[Xebia a le plaisir de continuer à supporter la communauté Java, comme elle le fait depuis 4 ans, en étant sponsor platinum de ce qui va devenir une conférence majeure java en France : Devoxx France. Cette annonce vient d&#8217;être faite à Devoxx à Anvers en Belgique, sous la forme d&#8217;une vidéo. Nous serons donc [...]]]></description> <content:encoded><![CDATA[<p><center><a
href="http://blog.xebia.fr/wp-content/uploads/2011/11/FR12.png" ><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/FR12.png" alt="" title="Devoxx France" width="222" height="92" class="aligncenter size-full wp-image-9178" /></a></center></p><p><b>Xebia</b> a le plaisir de continuer à supporter la communauté Java, comme elle le fait depuis 4 ans, en étant sponsor platinum de ce qui va devenir une conférence majeure java en France : <b>Devoxx France</b>.</p><p>Cette annonce vient d&#8217;être faite à <b>Devoxx</b> à Anvers en Belgique, sous la forme d&#8217;une <a
href="http://www.youtube.com/watch?v=II6XiGGlJX0">vidéo</a>.</p><p>Nous serons donc présents les 18,19 et 20 avril 2012 pour <a
href="http://www.devoxx.fr">Devoxx France</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/16/xebia-sponsor-platinium-de-devoxx-france/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia en route pour Devoxx</title><link>http://blog.xebia.fr/2011/11/15/xebia-en-route-pour-devoxx-3/</link> <comments>http://blog.xebia.fr/2011/11/15/xebia-en-route-pour-devoxx-3/#comments</comments> <pubDate>Tue, 15 Nov 2011 12:53:40 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Cloud / NoSQL]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Tech Events]]></category> <category><![CDATA[Conference]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[HTML5]]></category> <category><![CDATA[JDK8]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=9165</guid> <description><![CDATA[L’événement incontournable de la communauté Java arrive enfin ! Devoxx, un des plus grands salons européens, fête ses 10 ans et se déroule cette semaine à Anvers en Belgique. Comme chaque année, Xebia sera présent. A travers les conférences et les rencontres, ce rendez vous annuel majeur est l&#8217;occasion de prendre la température de l&#8217;écosystème [...]]]></description> <content:encoded><![CDATA[<p><span
style="float: right"><img
src="http://blog.xebia.fr/wp-content/uploads/2011/11/devoxx.png" style="border: 0px solid black; margin: 1em 1em 1em 1em;"  /></span></p><p>L’événement incontournable de la communauté Java arrive enfin ! <a
href="http://www.devoxx.com" rel="nofollow">Devoxx</a>, un des plus grands salons européens, fête ses 10 ans et se déroule cette semaine à Anvers en Belgique. Comme chaque année, Xebia sera présent.</p><p>A travers les conférences et les rencontres, ce rendez vous annuel majeur est l&#8217;occasion de prendre la température de l&#8217;écosystème Java. Les thèmes de cette année sont une fois de plus assez variés avec une plus forte tendance vers de nouveaux langages :</p><ul><li><b>Fantom, Ceylon et Kotlin</b> : ces langages proposent des approches de programmation différentes et tentent de se faire une place dans notre écosystème entre les langages Java et Scala.</li><li><b>HTML5</b> : il s&#8217;agit d&#8217;un des sujets majeurs de cette édition avec pas mal de sessions sur les possibilités offertes par ce dernier.</li><li><b>NoSQL</b> : encore représenté cette année, des sessions sur la communication avec des frameworks de l’écosystème Java seront présentées.</li><li><b>JDK 8</b> : à peine remis de la sortie du JDK 7, la prochaine version aura droit à son lot d&#8217;annonces.</li></ul><p>Bien entendu, d&#8217;autres sujets seront présentés comme les nouveautés du langage Scala, Android, JavaEE, Spring&#8230; Pour vous donner envie, voici <a
href="http://www.devoxx.com/display/DV11/Schedule" rel="nofollow">le programme complet des réjouissances</a>.</p><p>Comme les années précédentes, vous retrouverez sur le <a
href="http://blog.xebia.fr" rel="nofollow">blog</a> nos retours des principales sessions qui se tiendront à Anvers cette semaine, ou sur nos twitters respectifs <a
href="https://twitter.com/#!/FrancoisMarot" rel="nofollow">@francoismarot</a>, <a
href="https://twitter.com/#!/njozwiak" rel="nofollow">@njozwiak</a>, <a
href="https://twitter.com/#!/julienBuret" rel="nofollow">@JulienBuret</a>, <a
href="https://twitter.com/#!/olim7t" rel="nofollow">@olim7t</a>, <a
href="https://twitter.com/#!/cyrilleleclerc" rel="nofollow">@cyrilleleclerc</a> &amp; <a
href="https://twitter.com/#!/morlhon" rel="nofollow">@morlhon</a> pour une activité live.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2011/11/15/xebia-en-route-pour-devoxx-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Tous réunis chez Xebia pour le XKE !</title><link>http://blog.xebia.fr/2010/12/03/tous-reunis-chez-xebia-pour-le-xke/</link> <comments>http://blog.xebia.fr/2010/12/03/tous-reunis-chez-xebia-pour-le-xke/#comments</comments> <pubDate>Fri, 03 Dec 2010 16:15:32 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Divers]]></category> <category><![CDATA[Acceptance Test Tools]]></category> <category><![CDATA[BDD]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[jBehave]]></category> <category><![CDATA[XKE]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=6070</guid> <description><![CDATA[Comme tous les premiers jeudi du mois, l’ensemble des consultants de Xebia était réuni hier, boulevard Haussmann, pour notre journée mensuelle XKE (Xebia Knowledge Exchange). La culture du partage de la connaissance étant la valeur fondatrice de Xebia, ces journées mensuelles réunissent nos passionné(e)s qui discutent, entre autres, des dernières technologies de l’écosystème Java JEE [...]]]></description> <content:encoded><![CDATA[<p>Comme tous les premiers jeudi du mois, l’ensemble des consultants de Xebia était réuni hier, boulevard Haussmann, pour notre journée mensuelle XKE (Xebia Knowledge Exchange).</p><p><a
href="http://blog.xebia.fr/2010/10/27/xebia-une-sociologie-de-craftsmen-ou-crafstmen-en-devenir/|http://blog.xebia.fr/2010/10/27/xebia-une-sociologie-de-craftsmen-ou-crafstmen-en-devenir/" title="La culture du partage de la connaissance tant la valeur fondatrice de Xebia" >La culture du partage de la connaissance étant la valeur fondatrice de Xebia</a>, ces journées mensuelles réunissent nos passionné(e)s qui discutent, entre autres, des dernières technologies de l’écosystème Java JEE et font partager leurs retours d’expérience sur des sujets techniques <em>(mais pas seulement)</em> choisis à l&#8217;avance.</p><p>C’est donc à travers des présentations formelles, des sessions de travaux pratiques, des débats, que chacun peut faire profiter de son point de vue et de son expérience.</p><p>Après un vote collégial sur les sujets qui seront abordés au cours de cette journée, les volontaires ont plusieurs semaines pour travailler seuls ou en groupe sur leurs sujets plébiscités par l&#8217;ensemble de leurs collègues.</p><p>Xebia souhaitait vous en dévoiler un peu plus sur ces journées, au coeur de l&#8217;ADN et des synergies de Xebia.</p><p><strong>Au programme ce mois ci :</strong></p><p>Après le café du matin, qui aide à oublier le grand froid, la journée commence avec une session News / Actus au cours de laquelle les 45 consultants de Xebia échangent librement sur les actualités qui ont retenu leur attention ce mois-ci.</p><p>Pour continuer, les consultants ont eu le choix entre deux sessions parallèles :</p><ul><li>Une présentation sur la collecte de logs sur des architectures massivement distribuées, par <a
href="http://blog.xebia.fr/author/plopez/" title="Pablo Lopez" >Pablo Lopez</a>.</li><li>Un slot Acceptance Test Tools Contest, par <a
href="http://blog.xebia.fr/author/nrichand/" title="Nathaniel Richand" >Nathaniel Richand</a>.</li></ul><p>Après le déjeuner, qui est l&#8217;occasion de poursuivre les débats et discussions de la matinée et de faire connaissance avec les invités autour d&#8217;une pizza, nous accueillons <a
href="http://www.riagora.com/" title="Michal Chaize" >Michaël Chaize</a> évangéliste de la plateforme Flash qui nous présente les nouveautés des plateformes Flash et Flex d&#8217;Adobe.</p><p>L&#8217;après midi, se poursuit avec deux Hands On en parallèle :</p><ul><li>Un Hands On &laquo;&nbsp;<a
href="http://fr.wikipedia.org/wiki/Behavior_Driven_Development" title="BDD (Behaviour Driven Development)" >BDD <em>(Behaviour Driven Development)</em></a> avec <a
href="http://jbehave.org/" title="jBehave" >&laquo;&nbsp;jBehave&nbsp;&raquo;</a>, animé par <a
href="http://blog.xebia.fr/author/hbenmansour/" title="Hamza Benmansour" >Hamza Benmansour</a> et Aurélien Masse.</li><li>Un Hands On &laquo;&nbsp;Développement iPhone&nbsp;&raquo;, animé par <a
href="http://blog.xebia.fr/author/afathallah/" title="Amin Fathallah" >Amin Fathallah</a>.</li></ul><p>La dernière session de la journée est un retour complet sur <a
href="http://blog.xebia.fr/tag/devoxx/" title="Devoxx" >Devoxx</a>, par <a
href="http://blog.xebia.fr/author/edijoux/" title="Ellène Dijoux" >Ellène Dijoux</a>, <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a> et <a
href="http://blog.xebia.fr/author/mfiguiere/" title="Michael Figuire" >Michael Figuière</a>, nos reporters pour l&#8217;évènement !</p><p>Le XKE s&#8217;est terminé, comme à son habitude, par un apéritif improvisé pour célébrer une nouvelle journée d&#8217;émulation technique et de partage de connaissances&#8230; <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/12/03/tous-reunis-chez-xebia-pour-le-xke/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Devoxx &#8211; L&#8217;avenir de Java</title><link>http://blog.xebia.fr/2010/12/03/devoxx-lavenir-de-java/</link> <comments>http://blog.xebia.fr/2010/12/03/devoxx-lavenir-de-java/#comments</comments> <pubDate>Fri, 03 Dec 2010 06:59:11 +0000</pubDate> <dc:creator>Michaël Figuière</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[java]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=6064</guid> <description><![CDATA[La keynote de Mark Reinhold, Chief Architect de la plate-forme Java chez Oracle, était particulièrement attendue après une actualité très riche sur le JDK ces derniers mois. L&#8217;année dernière, l&#8217;annonce d&#8217;un nouveau délai pour la sortie de JDK 7, afin de permettre la ré-intégration des closures, avait provoqué la surprise. L&#8217;été arrivant, la communauté se [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/12/mark-reinhold.jpg" border="0" alt="" style="margin: 1em 1em 1em 2em; float: right;" /></p><p>La <em>keynote</em> de Mark Reinhold, <em>Chief Architect</em> de la plate-forme Java chez Oracle, était particulièrement attendue après une actualité très riche sur le JDK ces derniers mois.</p><p>L&#8217;année dernière, l&#8217;annonce d&#8217;un nouveau délai pour la sortie de JDK 7, afin de permettre la ré-intégration des <em>closures</em>, avait provoqué la surprise. L&#8217;été arrivant, la communauté se rendait alors compte que le <em>planning</em> initial prévoyant un JDK 7 <em>features complete</em> pour juin était déjà dépassé et irréaliste. Quelques mois plus tard, Mark Reinhold <a
href="http://blogs.sun.com/mr/entry/plan_b" title="annonait" >annonçait</a> sur son blog un &laquo;&nbsp;plan B&nbsp;&raquo; : on ne conserverait alors dans JDK 7 que les fonctionnalités déjà implémentées pour repousser celles qui sont encore en cours d&#8217;élaboration, telles que les <em>closures</em> ou la modularité, au JDK 8.</p><p>Plus récemment l&#8217;actualité était marquée par l&#8217;annonce de nouveaux entrants dans le projet OpenJDK : IBM dans un premier temps, s&#8217;étant résigné à mutualiser ses efforts de développements avec Oracle, et Apple qui après l&#8217;annonce de l&#8217;arrêt du support de Java dans Mac OS X avait décidé de léguer les développements spécifiques à son OS au projet OpenJDK.</p><p>Dans ce contexte rempli de rebondissements et d&#8217;incertitudes, Mark Reinhold a apporté quelques clarifications et une visibilité appréciable sur l&#8217;avenir de Java.</p><h3><a
name="Productivit"></a>Productivité</h3><h4><a
name="ProjectCoin"></a>Project Coin</h4><p>Le <a
href="http://openjdk.java.net/projects/coin/" title="projet Coin" >projet Coin</a> fait partie de l&#8217;actualité Java depuis de nombreux mois maintenant et l&#8217;on a pu se familiariser avec la plupart des évolutions du langage qu&#8217;il va apporter. Aucun ajout n&#8217;a été annoncé aujourd&#8217;hui. Rappelons qu&#8217;il contient les évolutions suivantes :</p><ul><li>L&#8217;opérateur <code><></code> permettant d&#8217;instancier facilement des classes génériques en ne répétant pas le(s) paramètre(s). On obtient ainsi (<code>Map&lt;String, String&gt; map = new HashMap<>();</code>).</li><li>La gestion des ressources via la structure de contrôle <code>try..catch</code>, qui simplifie grandement l&#8217;écriture de code d&#8217;E/S et résout la confusion autour de la fermeture de flux lançant de multiples exceptions.</li><li>La prise en charge des <code>string</code> dans les structures <code>switch</code>.</li><li>Une notation plus lisible pour les constantes numériques.</li><li>Le multi-<code>catch</code> permettant de capturer en une seule structure plusieurs types d&#8217;exceptions.</li><li>La simplification de l&#8217;invocation des méthodes utilisant des <em>varargs</em>.</li></ul><h4><a
name="Larificationausecoursdelrasure"></a>La réification au secours de l&#8217;érasure</h4><p>Pour des raisons de compatibilité ascendante, les <em>generics</em> ont été ajoutés à Java 5 en procédant par <em>type erasure</em>. Cette technique consiste à ne manipuler les <em>generics</em> que dans le code source et à les faire disparaître du <em>bytecode</em> compilé. Les <em>generics</em> permettent alors uniquement d&#8217;effectuer diverses vérifications de typage lors de la compilation mais n&#8217;ont aucun apport à <em>runtime</em>. Il est donc impossible d&#8217;écrire</p><pre class="brush: java; title: ; notranslate">
Object list = new ArrayList&lt;String&gt;();
if (list instanceof List&lt;String&gt;)
...
</pre><p>De même, la surcharge de méthodes ne se différenciant que par leur type de paramètre <em>generics</em> est impossible.</p><p>Très rapidement après l&#8217;arrivée de Java 5, ces limitations <a
href="http://gafter.blogspot.com/2006/11/reified-generics-for-java.html" title="ont t critiques" >ont été critiquées</a>. Mark Reinhold affirmait aujourd&#8217;hui son souhait de voir la réification de type intégrée dans une future version de Java. La réification consiste en l&#8217;ajout du typage <em>generics</em> dans le <em>bytecode</em> rendant ainsi cette précieuse information disponible à <em>runtime</em>.</p><p>L&#8217;absence de connaissance sur le typage des <em>generics</em> à <em>runtime</em> est également la raison pour laquelle les paramètres ne pouvaient pas être des types natifs. Ignorante du typage des paramètres, la JVM ne pouvait en effet qu&#8217;émettre l&#8217;hypothèse que ceux-ci héritaient de la classe <code>Object</code>. On peut alors se prendre à rêver à la possibilité d&#8217;écrire :</p><pre class="brush: java; title: ; notranslate">
List&lt;int&gt; list = new ArrayList&lt;&gt;;
</pre><p>Et ainsi de se passer de classes de collections spécialement écrites pour ces types natifs. Mais de nombreux défis devront toutefois être relevés pour en arriver là : le passage en paramètre d&#8217;un objet est différent de celui d&#8217;un type natif, ce qui pourrait mener à des comportements inattendus pour les classes développées avant l&#8217;arrivée de la réification et qui supposeraient donc que la modification d&#8217;une variable serait propagée au-delà du contexte des méthodes. Ce type de défi lié à l&#8217;exigence historique de compatibilité ascendante entre versions de Java est courant pour l&#8217;équipe en charge du JDK.</p><p>Aucune version de Java n&#8217;a été précisée pour la réification, classant donc cette fonctionnalité comme étant &laquo;&nbsp;à l&#8217;étude&nbsp;&raquo; pour le moment.</p><h4><a
name="Lesvalueclass"></a>Les value class</h4><p>Les <em>value class</em> constituerait une nouvelle famille de types dans Java que l&#8217;on peut formaliser comme un <em>javabean</em> intégré au langage. Les différents champs seraient alors exposés sous forme de propriétés. Ce type de classe pourrait prendre la forme suivante :</p><pre class="brush: java; title: ; notranslate">
value class Node {
    Node property parent;
    Node property leftChild;
    Node property rightChild;
}
</pre><p>Le retour des propriétés dans le radar de l&#8217;équipe en charge du JDK ravira sans nul doute tous ceux qui sont lassés de devoir s&#8217;en remettre à leur IDE pour la génération des <em>getters</em> / <em>setters</em> !</p><p>Aucune version n&#8217;a malheureusement été spécifiée pour l&#8217;intégration de cette fonctionnalité.</p><h3><a
name="Performance"></a>Performance</h3><p>On le sait depuis quelques années, l&#8217;amélioration des performances des applications passe dorénavant par l&#8217;utilisation du <em>multithreading</em> pour bénéficier de l&#8217;augmentation du nombre de cœurs sur les serveurs. Java est armé face à ce défi grâce aux apports liés à <code>java.util.concurrent</code> dans Java 5. L&#8217;enjeu est maintenant de rendre ces fonctionnalités plus simples et productives à utiliser.</p><h4><a
name="Lesextensionsdejavautilconcurr"></a>Les extensions de <code>java.util.concurrent</code></h4><p>Java 5 avait introduit un ensemble de classes facilitant l&#8217;écriture de programmes parallèles dans le <em>package</em> <code>java.util.concurrent</code>. La JSR-166 <em>(Concurrency Utilities)</em> les avait standardisées. Java 6 avait amené de légères évolutions à ce <em>package</em> qui avait été noté JSR-166x. Java 7 apportera à son tour des avancées dans ce domaine crucial pour l&#8217;avenir, sous la forme de la JSR-166y. On compte parmi elles :</p><ul><li>La très attendue API <em>Fork / Join</em> mais sans le <a
href="http://java.sun.com/javaone/sf/2008/articles/concurrency.jsp" title="ParallelArray" ><code>ParallelArray</code></a>,</li><li>Une API donnant accès à des possibilités atomiques de bas niveau, permettant à terme la disparition de la classe interne non-standard <code>sun.misc.Unsafe</code></li><li>Une <code>TransferQueue</code> et une <code>LinkedTransferQueue</code> pour faciliter la communication entre <em>threads</em>,</li><li>Une <code>ConcurrentReferenceHashMap</code> permettant la manipulation concurrente de références fortes ou faibles <em>(weak references)</em>.</li></ul><h4><a
name="Lesclosures"></a>Les closures</h4><p>Novembre 2009, Devoxx. Une session de Mark Reinhold sur JDK 7 crée l&#8217;évènement, il y annonce le retour des <em>closures</em> justifié par le besoin de simplifier le développement <em>multithread</em>. Aujourd&#8217;hui les <em>closures</em> sont toujours sur la <em>roadmap</em>, mais décalées au JDK 8.</p><p>Le lien qu&#8217;Oracle fait entre programmation parallèle et <em>closures</em> s&#8217;explique par l&#8217;exemple suivant. Ici on souhaite étendre l&#8217;API <code>Collection</code> pour offrir des méthodes <code>filter()</code>, <code>map()</code>, ou encore <code>max()</code> qui de manière transparente délègueront au besoin le travail à plusieurs <em>threads</em> :</p><pre class="brush: java; title: ; notranslate">
Collection&lt;Student&gt; students = ...;
double max = students.filter(new Predicate&lt;Student&gt;() {
    public boolean op(Student s) {
        return s.gradYear == 2010;
    }
}).map(new Extractor&lt;Student, Double&gt;() {
    public Double extract(Student s) {
        return s.score;
    }
}).max();
</pre><p>Pour obtenir ce type d&#8217;exécution parallèle implicite, il est ici bien entendu nécessaire de fournir une classe anonyme implémentant le code à exécuter. Cette approche est verbeuse et rapidement inadaptée à une application d&#8217;entreprise complexe ; suffisamment tout du moins pour éloigner les développeurs de ce type d&#8217;API.</p><p>Mark Reinhold montre alors ce que pourrait devenir l&#8217;exemple précédent avec les <em>closures</em> :</p><pre class="brush: java; title: ; notranslate">
double max = students.filter(#{ Student s -&gt; s.gradYear == 2010 })
                     .map(   #{ Student s -&gt; s.score })
                     .max();
</pre><p>Le code est concis, et une fois la syntaxe basée sur les symboles <code>#</code> et <code>-></code> assimilée, il s&#8217;avère tout à fait lisible.</p><h4><a
name="Lesmthodesdextensions"></a>Les méthodes d&#8217;extensions</h4><p>L&#8217;ajout des <em>closures</em> étant destiné à améliorer la programmation parallèle, il doit forcément être accompagné de nouvelles méthodes sur les collections permettant de leur soumettre du code.</p><p>Le problème est que l&#8217;interface <code>java.util.Collection</code> a été mainte fois implémentée dans diverses librairies et applications. Lui ajouter une méthode casserait donc le code existant.</p><p>Les méthodes d&#8217;extensions viennent résoudre ce problème en permettant d&#8217;adjoindre à la nouvelle méthode une implémentation par défaut. Ainsi dans l&#8217;exemple de la classe <code>java.util.Collection</code> on obtiendrait :</p><pre class="brush: java; title: ; notranslate">
Collection&lt;T&gt; filter(Predicate&lt;T&gt; p) default Collections.&lt;T&gt;filter;
</pre><p>L&#8217;implémentation par défaut est alors une méthode statique définie dans une classe tierce et qui prend en premier argument l&#8217;objet sur lequel s&#8217;applique la méthode. Dans l&#8217;exemple précédent, le prototype de la méthode d&#8217;extension <code>filter()</code> serait donc :</p><pre class="brush: java; title: ; notranslate">
static &lt;T&gt; Collection&lt;T&gt; filter(Collection&lt;T&gt; collection, Predicate&lt;T&gt; p);
</pre><h3><a
name="Modularit"></a>Modularité</h3><h4><a
name="Jigsawrestelavenirdelamodulari"></a>Jigsaw reste l&#8217;avenir de la modularité</h4><p>Le besoin pour un mécanisme de modularité intégré au langage se fait ressentir pour assurer la logique d&#8217;encapsulation au-delà des frontières des classes. Parallèlement, Maven a montré l&#8217;intérêt d&#8217;une gestion de versions pour ces modules.</p><p>A l&#8217;heure actuelle, il semble qu&#8217;OSGi peinera a être accepté comme solution de modularisation pour Java. Sa complexité a probablement contribué à rendre SpringSource dm Server trop peu attractif pour attirer un large public. Dès lors, la voie est libre pour Jigsaw pour proposer une solution simple et efficace à cette problématique.</p><p>Mark Reinhold ne s&#8217;est pas étendu en détails sur Jigsaw mais a exprimé fermement son souhait de le voir remplacer à terme la notion de <em>classpath</em> aujourd&#8217;hui inadaptée aux applications complexes et denses que l&#8217;on connaît.</p><h4><a
name="Gestiondesdpendances"></a>Gestion des dépendances</h4><p>Maven est de nos jours omniprésent dans les entreprises. Cet outil s&#8217;est imposé au fil des années comme un standard dans la gestion des dépendances Java : même ses concurrents tels qu&#8217;Ivy ou Gradle sont basés sur le système de définition des modules de Maven et sur son réseau de dépôts.</p><p>Java se dotant d&#8217;un mécanisme de modules, une intégration intelligente se devait d&#8217;exister. Mark Reinhold a ainsi expliqué que Maven serait pris en compte pour la gestion et le téléchargement des modules Java sur la machine.</p><p>Là encore, aucune version n&#8217;est spécifiée pour l&#8217;intégration de Maven avec Jigsaw, mais on peut logiquement imaginer (ou tout du moins espérer) son arrivée pour le JDK 8.</p><h4><a
name="DautresformatsqueleJar"></a>D&#8217;autres formats que le Jar</h4><p>Mark Reinhold a surpris l&#8217;audience avec cette annonce. Il s&#8217;agirait de permettre d&#8217;autres formats de <em>packaging</em> pour les applications Java que le <code>jar</code>. On parle tout d&#8217;abord d&#8217;un nouveau format baptisé <code>jmod</code> qui serait basé sur une autre compression que <code>zip</code>, telle que <a
href="http://download.oracle.com/javase/6/docs/api/java/util/jar/Pack200.html" title="pack200" >pack200</a>.</p><p>Mais la réflexion va plus loin en envisageant d&#8217;étendre les formats de <em>packaging</em> jusqu&#8217;aux archives propres aux systèmes d&#8217;exploitation de production tels que <code>rpm</code> ou <code>deb</code>. Ceci simplifierait grandement les déploiements et les interactions avec les équipes d&#8217;exploitation !</p><h3><a
name="Laroadmap"></a>La <em>roadmap</em></h3><p>Après avoir énoncé les différentes évolutions, il fallait forcément aborder l&#8217;épineuse question du <em>planning</em>. Les retards successifs de JDK 7 laissent planer le doute quant à la date de finalisation effective, mais reconnaissons que l&#8217;allègement de la liste des fonctionnalités de JDK 7 rend cette fois la <em>roadmap</em> plus réaliste ; la plupart des fonctionnalités restantes étant en effet déjà implémentées. Le calendrier présenté par Mark Reinhold et <a
href="http://openjdk.java.net/projects/jdk7/" title="post sur le site du projet OpenJDK" >posté sur le site du projet OpenJDK</a> quelques heures plus tard est le suivant :</p><ul><li>16/12/2010 : <em>Feature Complete</em></li><li>12/04/2011 : <em>Rampdown start: P1-P3 bugs only</em></li><li>28/04/2011 : <em>API/interface changes: Showstoppers only</em></li><li>11/05/2011 : <em>All targeted bugs addressed, First release candidate built</em></li><li>18/05/2011 : <em>Bug fixes: Showstoppers only</em></li><li>08/06/2011 : <em>Final test cycle starts</em></li><li>28/07/2011 : <em>General Availability</em></li></ul><h3><a
name="Lesaspectspolitiques"></a>Les aspects politiques</h3><h4><a
name="OracleetJava"></a>Oracle et Java</h4><p>Mark Reinhold a également consacré quelques instants pour évoquer les aspects politiques qui entourent Java. Les inquiétudes sont en effet nombreuses au sein de la communauté : on reproche souvent à Oracle son comportement très agressif vis-à-vis des autres acteurs du marché ainsi que de sa vision parfois éloignée du monde de l&#8217;Open Source.</p><p>Son message se voulait clair sur cette question : l&#8217;intérêt d&#8217;Oracle est d&#8217;assurer la pérennité de Java, dans la mesure où nombre de ses produits commerciaux sont basés sur cette plate-forme.</p><h4><a
name="LesnouveauxentrantsdanslOpenJD"></a>Les nouveaux entrants dans l&#8217;OpenJDK</h4><p>L&#8217;OpenJDK a vu ses troupes s&#8217;enrichir de deux soutiens majeurs ces dernières semaines : IBM et Apple.</p><p>IBM <a
href="http://blog.xebia.fr/2010/10/12/revue-de-presse-xebia-180/#IBMrejointleprojetOpenJDK" title="avait rejoint le projet" >avait rejoint le projet</a> un mois auparavant dans un but de mutualiser les efforts de développement avec Oracle et reconnaissant par ce geste implicitement un intérêt commun à assurer l&#8217;évolution, la stabilité et la pérennité de la plate-forme Java, supportant nombre de leurs produits commerciaux.</p><p>L&#8217;annonce <a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#ApplevacollaborerauprojetOpenJ" title="du ralliement dApple" >du ralliement d&#8217;Apple</a> est encore plus récente. Apple avait en effet exprimé son souhait de ne plus assurer le support de Java dans son OS à l&#8217;avenir, puis avait annoncé léguer les développements spécifiques à Mac OS X au projet OpenJDK.</p><p>Mark Reinhold s&#8217;est logiquement montré enchanté de ces divers ralliements permettant de concentrer les différentes forces au développement futur de Java.</p><h3><a
name="Conclusion"></a>Conclusion</h3><p>Mark Reinhold s&#8217;est attaché à formaliser les objectifs qu&#8217;Oracle se fixe pour l&#8217;avenir du langage Java : conserver la facilité de lecture du langage, plus importante à leurs yeux que la productivité d&#8217;écriture. Pour cela chaque nouvelle fonctionnalité est évaluée avec soin afin de déceler les potentiels effets secondaires qu&#8217;elle pourrait provoquer. Mark Reinhold expliquait ainsi son souhait de voir Java encore présent en 2030.</p><p>Le planning à venir ne s&#8217;étalant que sur les 6 prochains mois, il sera aisé de se rendre compte de la potentielle ponctualité de Java 7. Le niveau d&#8217;avancement actuel permet toutefois d&#8217;être très confiant quant à sa finalisation courant 2011. Les fonctionnalités plus audacieuses de Java 8 pourraient par contre repousser ce dernier au-delà de 2012&#8230;</p><div
align="center"> <a
href="http://twitter.com/mfiguiere" ><br
/> <img
src="http://blog.xebia.fr/wp-content/uploads/2009/04/twitter4.png"  title="Twitter Michaël Figuière" border="0" /><br
/> </a></div> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/12/03/devoxx-lavenir-de-java/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Devoxx &#8211; Les nouveautés de la plateforme Flash</title><link>http://blog.xebia.fr/2010/11/23/devoxx-les-nouveautes-de-la-plateforme-flash/</link> <comments>http://blog.xebia.fr/2010/11/23/devoxx-les-nouveautes-de-la-plateforme-flash/#comments</comments> <pubDate>Tue, 23 Nov 2010 11:40:45 +0000</pubDate> <dc:creator>Ellène Dijoux</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[Adobe]]></category> <category><![CDATA[AIR]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Flash]]></category> <category><![CDATA[Flash Catalyst]]></category> <category><![CDATA[Flex Hero]]></category> <category><![CDATA[LiveCycle]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5997</guid> <description><![CDATA[A l&#8217;origine Michaël Chaize évangéliste de la plateforme Flash devait présenter cette session seul. Mais finalement il a obtenu le renfort de James Ward évangéliste Flex qui y a ajouté son expérience sur Flex et la plateforme Flash. &#160; &#160; &#160; L&#8217;avantage du Flash L&#8217;avantage du Flash est la possibilité de développer des applications plus [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/adobe.jpg" border="0" alt="" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> A l&#8217;origine <a
href="http://www.riagora.com/" title="Michaël Chaize" >Michaël Chaize</a> évangéliste de la plateforme Flash devait présenter cette session seul. Mais finalement il a obtenu le renfort de <a
href="http://www.jamesward.com/" title="James Ward" >James Ward</a> évangéliste Flex qui y a ajouté son expérience sur Flex et la plateforme Flash.</p><p>&nbsp;<br
/> &nbsp;<br
/> &nbsp;</p><h3><a
name="LavantageduFlash"></a>L&#8217;avantage du Flash</h3><p>L&#8217;avantage du Flash est la possibilité de développer des applications plus intuitives, efficaces et faciles à utiliser. Michael nous présente une application pour la finance réalisée pour une grande banque française. Le backend est resté le même, seul le client a été modifié pour être remplacé par du Flex. Une amélioration de la productivité des utilisateurs a pu être constatée. En effet, les données étaient plus facilement lisibles et exploitables par les utilisateurs qui prenaient donc des décisions plus rapidement.<br
/> Michael met en avant la productivité par le design. L&#8217;avantage de Flex est la facilité avec laquelle on peut réaliser des applications. Elle est productive pour le développeur et pour l&#8217;utilisateur.</p><h3><a
name="LesnouveautsdelaplateformeFlas"></a>Les nouveautés de la plateforme Flash</h3><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/platform_overview.png" border="0" alt="" /></div><p>Tout d&#8217;abord Adobe a intégré dans sa plateforme le support d&#8217;HTML5 pour que ses outils, tels que Dreamweaver et Illustrator par exemple, le supportent .<br
/> La <a
href="http://www.adobe.com/fr/flashplatform/" title="plateforme Flash" >plateforme Flash</a> est un panel complet de solutions permettant de réaliser des applications riches sur tous les supports qui vont du mobile à l&#8217;ordinateur, en passant par la télé. Cette plateforme fournit tous les outils indispensables au développement d&#8217;applications, vidéos et autres. Les applications sont natives pour tous les supports. Adobe et d&#8217;autres partenaires ont d&#8217;ailleurs créé le projet open-screen qui a pour but de travailler ensemble à l&#8217;élaboration d&#8217;un environnement consistant pour la navigation web et le lancement d&#8217;application sur n&#8217;importe quel écran. Ce projet exploite les avantages de Flash Player et d&#8217;Adobe Air.</p><h3><a
name="FlashPlayer"></a>Flash Player 10.1</h3><p>Le taux de pénétration de Flash Player 10.1 est actuellement supérieur à 70%.<br
/> Les nouvelles fonctionnalités permettent maintenant d&#8217;exploiter les avantages des mobiles :</p><ul><li>le multi-touch et les gestures,</li><li>l&#8217;acceléromètre,</li><li>la gestion de l&#8217;orientation de l&#8217;écran,</li><li>les champs textes pour mobile &#8230;</li></ul><p>La performance a également été améliorée sur l&#8217;audio, la vidéo, la gestion des ressources en général pour économiser de la batterie (surtout pour les mobiles). Une nouvelle API vidéo a été développée pour réduire la charge sur le processeur comme certains ont pu le constater sur Mac OS. Elle utilise plutôt les ressources de la carte graphique pour fonctionner. L&#8217;utilisation de la mémoire a été optimisée. Pour tester ces nouvelles fonctionnalités, vous pouvez télécharger <a
href="http://www.adobeursurvey.com/devnet/flex/tourdeflex.html" title="l'application de démonstration TourDeFlex" >l&#8217;application de démonstration TourDeFlex</a> et tester la partie <a
href="http://www.adobe.com/products/flashplayer/features/" title="Flash Player APIs" >Flash Player APIs</a>. Le multi-touch est assez bluffant si vous avez un trackpad adapté <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p><h3><a
name="ApplicationspourMobile"></a>Applications pour Mobile</h3><p>Pour développer des applications pour mobile, vous pouvez utiliser <a
href="http://www.adobe.com/fr/products/creativesuite/devicecentral/" title="Device Central CS5" >Device Central CS5</a>. Il fait partie de la Creative Suite et fournit toutes les configurations des smartphones, telles que la mémoire, le processeur &#8230; Ces dernières sont mises à jour dynamiquement. Vous trouverez une démonstration de ce que l&#8217;on peut réaliser en terme d&#8217;application mobile <a
href="http://www.riagora.com/2010/04/air-and-the-accelerometer/" title="sur le blog de Michael Chaize" >sur le blog de Michael Chaize</a> où il présente un Doodle Jump développé avec Air et qu&#8217;il a pu déployer sur son Android en version 2.2 (Froyo).</p><h3><a
name="AIR"></a>AIR 2</h3><p>Air est une application desktop, ce qui signifie qu&#8217;il exploite les ressources de l&#8217;ordinateur. Maintenant le déploiement est possible sur Android, et pour plus d&#8217;informations je vous renvoie vers <a
href="http://blog.xebia.fr/2010/11/22/devoxx-deployer-vos-applications-air-sur-android/" title="cet article" >cet article</a>.  Autre nouvelles fonctionnalités avec AIR :</p><ul><li>ouverture des fichiers avec l&#8217;application par défaut définie par l&#8217;OS,</li><li>détection de l&#8217;OS avec l&#8217;objet Capabilities.os,</li><li>exécution possible de commandes grâce à NativeProcess.</li></ul><h3><a
name="QuoideneufsurFlexHero"></a>Quoi de neuf sur Flex Hero ?</h3><p>Flex Hero est le petit nom de la release majeure 4.1 de Flex. Dans cette nouvelle version, de nouveaux composants spark sont disponibles :</p><ul><li>une datagrid spark avec :<ul><li>gestion des déplacements avec les touches,</li><li>une skin class (apparence) plus simple à personnaliser que celui de Halo</li><li>et un chargement des données dynamique au moment du scroll. Ce qui rend le chargement plus rapide grâce à la pagination.</li></ul></li><li>un formulaire spark,</li><li>des formatters spark avec gestion de l&#8217;internationalisation,</li><li>un MobileApplication pour gérer les applications mobiles,</li><li>une API pour la navigation dans les vues,</li><li>ActionBar,</li><li>MobileItemRenderer pour les rendus de liste spécifique aux applications mobiles,</li><li>gestion de la géolocalisation,</li><li>gestion de l&#8217;orientation,</li><li>génération de l&#8217;application sous forme de package Android (APK).</li></ul><h3><a
name="FlashCatalyst"></a>Flash Catalyst</h3><p>La sortie en release preview de Flash Builder &laquo;&nbsp;Burrito&nbsp;&raquo; s&#8217;accompagne aussi de celle de Flash Catalyst &laquo;&nbsp;Panini&nbsp;&raquo;. Celui-ci a été revu pour faciliter la collaboration entre le développeur et le designer. Précédemment, le problème était que le designer ne pouvait pas retravailler sur ce qu&#8217;avait réalisé le développeur. Avec cette nouvelle version de Flash Catalyst, c&#8217;est maintenant possible.</p><h3><a
name="LiveCycleCollaborationService"></a>LiveCycle Collaboration Service</h3><p>Le LiveCycle Collaboration est une solution hébergée par Adobe pour proposer aux développeurs de réaliser des applications Flex collaboratives. Ils ont à leur disposition des composants : tableau blanc pour les dessins, gestion de la webcam &#8230; pour réaliser des applications où il est possible aux utilisateurs d&#8217;échanger des informations. Michaël nous a d&#8217;ailleurs invité à accéder à une des applications qu&#8217;il a réalisé. C&#8217;était très intéressant de voir sur le grand écran de la salle une dizaine de webcams afficher le visage de quelques participants curieux.</p><p><em>Crédit photo : les images proviennent du site d&#8217;Adobe et de</em> <em><a
href="http://picasaweb.google.com/JavaPolis.com/Devoxx2010#" title="lalbum Picasa de Stephan Jaansen" ><em>l&#8217;album Picasa de Stephan Jaansen</em></a></em> <em>pour Devoxx 2010</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/23/devoxx-les-nouveautes-de-la-plateforme-flash/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Revue de presse</title><link>http://blog.xebia.fr/2010/11/23/revue-de-presse/</link> <comments>http://blog.xebia.fr/2010/11/23/revue-de-presse/#comments</comments> <pubDate>Tue, 23 Nov 2010 06:38:58 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[BigMemory]]></category> <category><![CDATA[CloudBees]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Ehcache]]></category> <category><![CDATA[Hudson]]></category> <category><![CDATA[Jdk7]]></category> <category><![CDATA[Terracotta]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5979</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Terracotta publie BigMemory en version stable L&#8217;intégration continue dans les nuages Le coin de la technique JDK7 &#038; JDK8 arrivent ! Evènements de notre communauté en France et à l&#8217;étranger Devoxx 2010 Actualité éditeurs / SSII Terracotta publie BigMemory en [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/23/revue-de-presse/#TerracottapublieBigMemoryenver">Terracotta publie BigMemory en version stable</a></li><li><a
href="http://blog.xebia.fr/2010/11/23/revue-de-presse/#Lintgrationcontinuedanslesnuag">L&#8217;intégration continue dans les nuages</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/23/revue-de-presse/#JDKJDKarrivent">JDK7 &#038; JDK8 arrivent !</a></li></ul><p><strong>Evènements  de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/23/revue-de-presse/#Devoxx">Devoxx 2010</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="TerracottapublieBigMemoryenver"></a>Terracotta publie BigMemory en version stable</h4><p><a
href="http://www.terracotta.org/bigmemory" title="BigMemory" >BigMemory</a> le nouveau module livré avec la suite <a
href="http://www.terracotta.org/ehcache/" title="Enterprise Ehcache" >Enterprise Ehcache</a> dont nous avions parlé dans une <a
href="http://blog.xebia.fr/2010/09/21/revue-de-presse-xebia-177/#AvecBigMemoryTerracottasedoted" title="revue de presse précédente" >revue de presse précédente</a>, passe en version stable. Pour mémoire, ce module permet de stocker une grande quantité de données dans la mémoire du processus Java sans impacter la heap. Le pari de BigMemory, est de diminuer la taille de la heap pour éviter la surconsommation du GarbageCollector tout en supportant un cache en mémoire vive à grande capacité. Ari Zilka le CTO de Terracotta interviewé sur <a
href="http://www.infoq.com/news/2010/11/tc-bigmemory" title="InfoQ" >InfoQ</a> évoque des capacités montant jusqu&#8217;à 350Go. Pour stocker ses données en-dehors de la heap, BigMemory utilise les <a
href="http://download.oracle.com/javase/6/docs/api/index.html?java/nio/ByteBuffer.html" title="DirectByteBuffer" >DirectByteBuffer</a> supportés depuis la version 1.4 de la JVM. Les <a
href="http://ehcache.org/documentation/offheap_store.html#Performance_Comparisons" title="tests de performances" >tests de performances</a> réalisés par Terracotta sont assez impressionnants sur les temps d&#8217;exécution du FullGC en comparaison avec le stockage habituel dans la heap. Outre certaines craintes soulignées dans notre précédente revue, un des défauts de cette solution est de reposer sur la sérialisation des objets Java qui est connu pour ajouter un surcoût non négligeable lors de l&#8217;écriture et la lecture des objets dans le cache. L&#8217;utilisation de BigMemory se configure très simplement en ajoutant deux nouveaux attributs à la configuration du cache (overFlowToHeap et maxMemoryOffHeap):</p><pre class="brush: xml; title: ; notranslate">
&lt;cache name=&quot;sample-offheap-cache&quot;
    maxElementsInMemory=&quot;10000&quot;
    eternal=&quot;true&quot;
    memoryStoreEvictionPolicy=&quot;LRU&quot;
    overflowToOffHeap=&quot;true&quot;
    maxMemoryOffHeap=&quot;1G&quot;/&gt;
</pre><p>La simplicité d&#8217;utilisation d&#8217;Ehcache ne souffrira donc pas de cette nouveauté. Avec BigMemory Terracotta semble s&#8217;armer pour concurrencer des produits comme Memcached, voir même, des produits de type noSQL avec <a
href="http://ehcache.org/documentation/search.html" title="Ehcache Search" >Ehcache Search</a> l&#8217;API de recherche pour Ehcache.</p><h4><a
name="Lintgrationcontinuedanslesnuag"></a>L&#8217;intégration continue dans les nuages</h4><p>D&#8217;un côté nous avons Hudson, la plateforme d&#8217;intégration continue qu&#8217;on ne présente plus, développé par Kohsuke Kawaguchi, qui <a
href="http://weblogs.java.net/blog/kohsuke/archive/2010/04/05/good-bye-sunoracle" title="a quitté Oracle" >a quitté Oracle</a> début avril pour fonder sa propre société, <a
href="http://infradna.com/" title="InfraDNA" >InfraDNA</a>. Comme il <a
href="http://kohsuke.org/2010/04/26/introducing-infradna-the-hudson-company/" title="l'explique" >l&#8217;explique</a> sur son blog, le nom de sa société reflète sa vision de l&#8217;intégration continue en tant que partie prenante de l&#8217;infrastructure d&#8217;un projet. Il cite d&#8217;ailleurs le <a
href="http://www.liferay.com/web/brian.chan/blog/-/blogs/improving-quality-with-100-hudson-test-servers" title="cas intressant" >cas intéressant</a> de Liferay qui s&#8217;est installé une ferme de 100 serveurs dédiés uniquement à Hudson pour apporter une vraie réactivité sur la qualité de leurs produits.</p><p>De l&#8217;autre côté, nous avons <a
href="http://www.cloudbees.com/" title="CloudBees" >CloudBees</a>, une société créée par Sacha Labourey, ancien CTO chez JBoss, qui propose depuis Août un service de <em>Platform as a Service</em>, pour les applications Java. Comme il l&#8217;est expliqué sur la &laquo;&nbsp;<a
href="http://www.cloudbees.com/vision.cb" title="vision" >vision</a>&nbsp;&raquo; de la société, CloudBees a pour objectif avant tout de proposer un environnement pour gérer les cycles de vie d&#8217;un projet pour des outils comme Maven, Git, Svn ou &#8230; Hudson !   Dans cette perspective il s&#8217;agit de promouvoir ces outils comme des <em>Software as a Service</em>, comme nous l&#8217;explique Sacha Labourey <a
href="http://blog.cloudbees.com/2010/08/welcome-to-cloudbees.html" title="ici" >ici</a>:</p><p> <em>And while CloudBees&#8217; platform will initially appeal to end-user companies, <strong>our platform is built with ISVs in mind</strong> : we envision that <strong>most ISVs will have to morph into a SaaS model</strong> if they want to outlive their SaaS competitors.</em></p><p>(<a
href="http://en.wikipedia.org/wiki/Independent_software_vendor" title="ISV" >ISV</a> signifie éditeur logiciel)</p><p>Il était donc assez naturel que les deux groupes <a
href="http://www.marketwire.com/press-release/Hudson-Leader-InfraDNA-and-Creator-Kohsuke-Kawaguchi-Join-Forces-With-CloudBees-1349551.htm" title="se rejoignent" >se rejoignent</a>. L&#8217;offre est encore en béta mais nous pouvons déjà avoir une idée du <a
href="http://cloudbees.com/dev-pricing.cb" title="prix de labonnement" >prix de l&#8217;abonnement</a>. Celui-ci se découpe en deux parties (ces prix seront peut-être réajustés avec la fin de la version béta):</p><ul><li>un abonnement mensuel de 25$ ou 35$ par mois selon le nombre d&#8217;utilisateur et de dépôts SVN ou GIT</li><li>un paiement à la carte de 1 cent par minute utilisée par Hudson pour la construction du projet</li></ul><p>L&#8217;avantage de ce mode de paiement est que cela pousse à une rationnalisation de la construction de ses projets qui ne peut qu&#8217;être bénéfique. A surveiller également si à plus long terme il est prévu une offre sur étagère qui pourrait convaincre les entreprises toujours réticentes à externaliser leurs données pour des raisons compréhensibles de sécurité.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="JDKJDKarrivent"></a>JDK7 &#038; JDK8 arrivent !</h4><p>Non, nous ne reviendrons pas sur les récentes news autour de OpenJDK et de Oracle/Google/Apache/IBM/Apple etc&#8230; car cette fois c&#8217;est bon, on sent réellement que Java 7 est sur les rails! En effet, Oracle a profité de Devoxx pour annoncer officiellement les JSRs &laquo;&nbsp;umbrella&nbsp;&raquo; pour Java 7 et Java 8. Ce sont donc des JSRs qui en regroupent d&#8217;autres, déjà existantes et sur lesquelles InfoQ nous fait <a
href="http://www.infoq.com/news/2010/11/oracle-java-jsr" title="un petit topo" >un petit topo</a>.</p><p>Java 7 est défini par la <a
href="http://jcp.org/en/jsr/detail?id=336" title="JSR 336" >JSR 336</a>, regroupant elle-même:</p><ul><li>la <a
href="http://jcp.org/en/jsr/detail?id=203" title="JSR 203" >JSR 203</a>, connue sous le nom de NIO 2 et améliorant la gestion des <em>filesystems</em> et des <em>sockets</em>. On se réfèrera à la description complète sur le blog de Masoud Kalali en 6 parties: <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-1-what-are-new-features/" title="1" >1</a>, <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-2-the-basics/" title="2" >2</a>, <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-3-file-system-attributes-and-permissions-support-in-nio-2/" title="3" >3</a>, <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-4-changing-file-system-attributes-and-permissions/" title="4" >4</a>, <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-5-watch-service-and-change-notification/" title="5" >5</a> et <a
href="http://kalali.me/introducing-nio-2-jsr-203-part-6-filtering-directory-content-and-walking-over-a-file-tree/" title="6" >6</a>.</li><li>la <a
href="http://jcp.org/en/jsr/detail?id=292" title="JSR 292" >JSR 292</a>, apportant l&#8217;instruction bytecode <code>invokedynamic</code>, très attendue par des langages comme Groovy ou JRuby afin de gagner en performances.</li><li>la <a
href="http://jcp.org/en/jsr/detail?id=334" title="JSR 334" >JSR 334</a>, connue en tant que &laquo;&nbsp;Project Coin&nbsp;&raquo;, apporte du <a
href="http://www.baptiste-wicht.com/2010/04/java-7-updates-project-coin/" title="sucre syntaxique" >sucre syntaxique</a>. Des petits détails pas fondamentaux mais contre lesquels nous pestons souvent en nous demandant &laquo;&nbsp;mais pourquoi on ne peut pas faire ca en Java ?!&nbsp;&raquo;. Avec le JDK 7, on pourra !</li></ul><p>Mais d&#8217;autres bonus pourraient aussi être inclus nous indique <a
href="http://tech.puredanger.com/2010/11/17/my-god-its-full-of-jsrs/" title="Alex Miller" >Alex Miller</a>: citons en vrac Unicode 6, des modifications des Locale, JDBC 4.1, des améliorations de Swing&#8230;</p><p>Pour le JDK 8, spécifié par la <a
href="http://jcp.org/en/jsr/detail?id=337" title="JSR 337" >JSR 337</a>, les choses commencent aussi à prendre forme avec la vraisemblable inclusion des <a
href="http://jcp.org/en/jsr/detail?id=308" title="JSR 308" >JSR 308</a> (annotations sur les types), <a
href="http://jcp.org/en/jsr/detail?id=310" title="JSR 310" >JSR 310</a> (like API <a
href="http://www.jroller.com/scolebourne/entry/why_jsr_310_isn_t" title="inspirée" >inspirée</a> de Joda-Time) et <a
href="http://jcp.org/en/jsr/detail?id=335" title="JSR 335" >JSR 335</a> (le <a
href="http://openjdk.java.net/projects/lambda/" title="projet Lambda" >projet Lambda</a> apportant les fameuses closures). Le <a
href="http://openjdk.java.net/projects/jigsaw/" title="projet Jigsaw" >projet Jigsaw</a>, qui apporte lui la modularité d&#8217;une manière plus <em>developer friendly</em> que OSGI, devrait aussi être de la partie.</p><p>Cerise sur le gâteau, ces 2 JDKs sont même datés: juillet 2011 pour le JDK 7 et fin 2012 pour le JDK 8.<br
/> Pendant ce temps, un <a
href="http://picasaweb.google.com/JavaPolis.com/Devoxx2010#5541336464330779042" title="sondage complètement informel" >sondage complètement informel</a> a permis de prendre le pouls des Devoxxiens et de leur attentes envers les futurs JDKs. Il semble que beaucoup d&#8217;entre nous, dans la communauté, seraient prêts à payer le prix d&#8217;une incompatibilité ascendante de Java pour permettre au langage de s&#8217;améliorer en réparant certaines de ses erreurs. Devrons nous en passer par là ? En tout cas ce n&#8217;est pas pour tout de suite et nous devrons nous contenter t&#8217;attendre le <a
href="http://blog.loof.fr/2010/11/next-big-java-language.html" title="Next Big Java Language" >Next Big Java Language</a> !</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements  de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="Devoxx"></a>Devoxx 2010</h4><p>La semaine dernière, se tenait à Anvers, le plus grand rassemblement <em>(un peu plus de 3000 personnes)</em> de la communauté java en Europe : <a
href="http://www.devoxx.com/display/Devoxx2K10/Home" title="Devoxx 2010" >Devoxx 2010</a>.<br
/> Si vous souhaitez avoir un aperçu de ce qui s&#8217;y est passé, voici quelques <a
href=" http://blog.xebia.fr/tag/devoxx/" title="retours des consultants Xebia prsents  Devoxx 2010" >retours des consultants Xebia présents à Devoxx 2010</a> <em>(d&#8217;autres billets devraient arriver sous peu)</em> :</p><ul><li><a
href="http://blog.xebia.fr/2010/11/16/devoxx-augmenter-votre-productivite-avec-mylyn/" title="Augmenter votre productivité avec Mylyn" >Augmenter votre productivité avec Mylyn</a> par <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/16/devoxx-productive-programmer/" title="Productive Programmer" >Productive Programmer</a> par <a
href="http://blog.xebia.fr/author/edijoux/" title="Ellène Dijoux" >Ellène Dijoux</a> et <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/17/devoxx-les-nouveautes-dhibernate-une-perspective-jpa-2/" title="Les nouveautés d'Hibernate, une perspective JPA 2" >Les nouveautés d&#8217;Hibernate, une perspective JPA 2</a> par <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/18/devoxx-la-keynote-de-bienvenue/" title="La keynote de bienvenue" >La keynote de bienvenue</a> par <a
href="http://blog.xebia.fr/author/edijoux/" title="Ellne Dijoux" >Ellène Dijoux</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/19/devoxx-java-puzzlers-par-joshua-bloch-et-william-pugh/" title="Java Puzzlers par Joshua Bloch et William Pugh" >Java Puzzlers par Joshua Bloch et William Pugh</a> par <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/19/devoxx-comparaison-des-frameworks-web-sur-jvm/" title="Comparaison des Frameworks Web sur JVM" >Comparaison des Frameworks Web sur JVM</a> par <a
href="http://blog.xebia.fr/author/rmaton/" title="Romain Maton" >Romain Maton</a> et <a
href="http://blog.xebia.fr/author/jlmorlhon/" title="JeanLaurent De Morlhon" >Jean-Laurent De Morlhon</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/22/devoxx-getting-things-done-for-programmer/" title="Getting Things Done for Programmer" >Getting Things Done for Programmer</a> par <a
href="http://blog.xebia.fr/author/edijoux/" title="Ellne Dijoux" >Ellène Dijoux</a>.</li><li><a
href="http://blog.xebia.fr/2010/11/22/devoxx-deployer-vos-applications-air-sur-android/" title="Déployer vos applications Air sur Android" >Déployer vos applications Air sur Android</a> par <a
href="http://blog.xebia.fr/author/edijoux/" title="Ellne Dijoux" >Ellène Dijoux</a>.</li></ul><p>A noter également, l&#8217;épisode 31 des <a
href="http://lescastcodeurs.com/2010/11/les-cast-codeurs-podcast-episode-31-special-devoxx-2010/" title="Cast codeurs "Spécial Devoxx 2010"" >Cast codeurs &laquo;&nbsp;Spécial Devoxx 2010&#8243;</a> enregistré sur place par <a
href="http://blog.emmanuelbernard.com/" title="Emmanuel Bernard" >Emmanuel Bernard</a> et <a
href="http://www.antoniogoncalves.org/" title="Antonio Goncalves" >Antonio Goncalves</a> avec deux invités : <a
href=" http://www.touilleur-express.fr/" title="Nicolas Martignole" >Nicolas Martignole</a> et <a
href="http://blog.xebia.fr/author/mfiguiere/" title="Michal Figuire" >Michaël Figuière</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/23/revue-de-presse/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Devoxx &#8211; Déployer vos applications Air sur Android</title><link>http://blog.xebia.fr/2010/11/22/devoxx-deployer-vos-applications-air-sur-android/</link> <comments>http://blog.xebia.fr/2010/11/22/devoxx-deployer-vos-applications-air-sur-android/#comments</comments> <pubDate>Mon, 22 Nov 2010 16:33:35 +0000</pubDate> <dc:creator>Ellène Dijoux</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Mobilité]]></category> <category><![CDATA[Adobe]]></category> <category><![CDATA[AIR]]></category> <category><![CDATA[Android]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5958</guid> <description><![CDATA[Pour ceux qui n&#8217;ont pas entendu parler d&#8217;Adobe Air, il s&#8217;agit d&#8217;une machine virtuelle permettant d&#8217;exécuter des applications Flash en dehors du navigateur. Multi-plateformes et surtout multi-écrans, le but d&#8217;Adobe est de rendre Air exécutable sur tout type de support, des terminaux mobiles aux téléviseurs. Actuellement, il est utilisable sur les mobiles équipés d&#8217;un Android [...]]]></description> <content:encoded><![CDATA[<p>Pour ceux qui n&#8217;ont pas entendu parler d&#8217;Adobe Air, il s&#8217;agit d&#8217;une machine virtuelle permettant d&#8217;exécuter des applications Flash en dehors du navigateur. Multi-plateformes et surtout multi-écrans, le but d&#8217;Adobe est de rendre Air exécutable sur tout type de support, des terminaux mobiles aux téléviseurs. Actuellement, il est utilisable sur les mobiles équipés d&#8217;un Android 2.2 ainsi que sur les BlackBerry Tablet OS et iOS. Michael Chaize et James Ward nous ont présenté dans une session d&#8217;1h les nouveautés d&#8217;Adobe Air 2.5.</p><h3><a
name="AdobeAirpouriOS"></a>Adobe Air pour iOS</h3><p>Pour le développement d&#8217;applications iPhone, Apple avait émis une restriction pour interdire l&#8217;utilisation d&#8217;outil de développement en dehors de ceux autorisés par Apple. Suite à <a
href="http://www.wired.com/gadgetlab/2010/09/apple-lifts-app-store-flash-ban-publishes-app-review-rules/" title="la levée de cette restriction" >la levée de cette restriction</a>, Adobe peut donc enfin réaliser des applications pour iPhone à partir de ses outils. Parmi les fonctionnalités d&#8217;Adobe Air, vous trouverez un <a
href="http://labs.adobe.com/technologies/packagerforiphone/" title="packager pour iOS" >packager pour iOS</a> qui permet de transformer une application Air en IPK (format des package pour l&#8217;iPhone). Ce packager est aussi disponible dans la Creative Suite 5. Le packager permet de générer une application native pouvant être exécutée pour iOS. Attention, certaines APIs n&#8217;ont pas été implémentées dans le packager.</p><h3><a
name="LesnouveautsdansAir"></a>Les nouveautés dans Air 2.5</h3><p>La grande nouveauté de Air 2.5 est la possibilité de développer des applications mobiles. Pour ce faire, deux nouvelles classes héritant d&#8217;<code>Application</code> sont disponibles : <code><a
href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/spark/components/MobileApplication.html" title="MobileApplication" >MobileApplication</a></code> et <code><a
href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/spark/components/TabbedMobileApplication.html" title="TabbedMobileApplication" >TabbedMobileApplication</a></code>. Un nouveau skin a été créé pour les applications mobiles et certains composants en bénéficient comme <code>Button</code>, <code>CheckBox</code>, <code>DataGroup</code>, <code>Label</code>, <code>List</code>, <code>Scroller</code> &#8230; Parmi les nouveaux composants dédiés, vous trouverez le <code>MobileItemRenderer</code> et le <code>MobileIconItemRenderer</code> pour les rendus de listes .</p><h3><a
name="FlashBuilderBurrito"></a>Flash Builder &laquo;&nbsp;Burrito&nbsp;&raquo;</h3><p>Burrito est le petit nom du dernier Flash Builder. Il prend en charge toutes les nouveautés disponibles dans Flex 4. La fonctionnalité mise en avant est la possibilité de développer des applications mobiles à partir de votre Flash Builder !</p><p>Flash Builder &laquo;&nbsp;Burrito&nbsp;&raquo; est disponible en version d&#8217;évaluation (pour une durée de 60 jours) ; vous pouvez le récupérer <a
href="http://labs.adobe.com/technologies/flashbuilder_burrito/" title="ici" >ici</a>. Pour ma part, très curieuse de voir ces nouvelles fonctionnalités je l&#8217;ai téléchargé et effectivement, on peut créer des applications flex mobiles.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/new-flex-mobile-project.png" border="0" alt="" /></div><p>Une fois votre projet créé, vous pouvez visualiser dans la partie Design de nouvelles options associées à votre vue.</p><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/vue-global-mobile-application-flex.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/vue-global-mobile-application-flex-300x202.png" alt="vue-global-mobile-application-flex" title="vue-global-mobile-application-flex" width="300" height="202" class="alignnone size-medium wp-image-5965" /></a></div><p>Vous pourrez sélectionner une configuration de téléphone, vous aurez le choix entre plusieurs téléphones android. <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/choix-device.png" border="0" alt="" /></p><p>Vous pourrez également modifier l&#8217;orientation du téléphone pour vérifier le bon positionnement de vos composants. <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/orientation-mobile.png" border="0" alt="" /></p><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/application-mobile-flex.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/application-mobile-flex-184x300.png" alt="application-mobile-flex" title="application-mobile-flex" width="184" height="300" class="alignnone size-medium wp-image-5968" /></a>&nbsp;&nbsp;&nbsp;<a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/configuration-execution-mobile.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/configuration-execution-mobile-300x239.png" alt="configuration-execution-mobile" title="configuration-execution-mobile" width="300" height="239" class="alignnone size-medium wp-image-5961" /></a></div><p></p><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/release-build.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/release-build-300x193.png" alt="release-build" title="release-build" width="300" height="193" class="alignnone size-medium wp-image-5964" /></a></div><p>Une fois votre application réalisée, vous pouvez l&#8217;exécuter. Celle-ci sera affichée dans une fenêtre au format du téléphone que vous avez sélectionné. Elle propose aussi un menu contenant les actions disponibles pour le téléphone que vous avez sélectionné (changement de l&#8217;orientation, menu, retour arrière &#8230;).<br
/> Il est également possible d&#8217;exécuter votre application directement sur votre Android si bien évidemment vous en avez un <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . Une simple connexion USB suffit pour cela. Malheureusement, je n&#8217;ai pas pu tester cette partie mais espérons que le père Noël m&#8217;apporte un Android 2.2 le mois prochain.</p><p>Ce n&#8217;est pas tout. Vous avez développé votre application et l&#8217;avez testée. Vous voulez maintenant la partager ? Il suffit simplement de préparer le package pour le déposer sur Android Market. Et avec Flash Builder &laquo;&nbsp;Burrito&nbsp;&raquo; rien de plus simple, exportez votre projet et sélectionnez <strong>Release Build</strong>. La seule plateforme disponible pour le moment est Google Android. Après avoir donné votre certificat et mot de passe, Flash Builder vous génère un APK contenant une application native Android que vous pouvez déposer sur Android Market.</p><p>Le déploiement semble simple et pourrait motiver de nouveaux développeurs à réaliser des applications pour mobile.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/22/devoxx-deployer-vos-applications-air-sur-android/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Devoxx &#8211; Getting Things Done for Programmer</title><link>http://blog.xebia.fr/2010/11/22/devoxx-getting-things-done-for-programmer/</link> <comments>http://blog.xebia.fr/2010/11/22/devoxx-getting-things-done-for-programmer/#comments</comments> <pubDate>Mon, 22 Nov 2010 13:04:43 +0000</pubDate> <dc:creator>Ellène Dijoux</dc:creator> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[GTD]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5951</guid> <description><![CDATA[Il semble que beaucoup des participants à Devoxx se sentent débordés dans leur quotidien car la salle était pleine à craquer pour cette session. Getting Things Done connu aussi sous le nom de GTD est une méthode de gestion des priorités quotidiennes. C&#8217;est aussi le nom du livre de Dan Allen qui fournit de bons [...]]]></description> <content:encoded><![CDATA[<p>Il semble que beaucoup des participants à Devoxx se sentent débordés dans leur quotidien car la salle était pleine à craquer pour cette session. Getting Things Done connu aussi sous le nom de GTD est une méthode de gestion des priorités quotidiennes. C&#8217;est aussi le nom du livre de Dan Allen qui fournit de bons conseils pour s&#8217;en sortir.</p><p>Et c&#8217;est <a
href="http://www.java.net/blogs/kito75/" title="Kito D Mann" >Kito D. Mann,</a> auteur de JSF In Action qui nous présente cette méthodologie qu&#8217;il a pu appliquer à son quotidien.</p><h3><a
name="Destchesencoredestchestoujours"></a>Des tâches, encore des tâches, toujours des tâches</h3><p>Il commence par demander qui se sent débordé dans sa vie quotidienne, et une bonne partie de la salle lève la main. Nous avons notre vie personnelle, le travail, nous participons aussi à la vie de diverses communautés, associations &#8230; Et il n&#8217;est pas toujours facile de tout gérer au quotidien. Plus vous avez de tâches à réaliser et moins vous savez quoi faire de vos journées. C&#8217;est ainsi que l&#8217;on tombe dans de nombreuses boucles infinies et cela consume beaucoup d&#8217;énergie. Il faut tenter de fermer ces boucles.</p><h3><a
name="Collecterlesinformations"></a>Collecter les informations</h3><p>La première étape pour s&#8217;organiser est de collecter les informations et les mettre dans une boîte. Cette boîte peut être une feuille de papier, une boite mail ou autre chose. Puis, une par une, on traite les données contenues dans cette boite. Une fois les informations collectées, il faut décider de ce que l&#8217;on va en faire. Que dois-je faire de cette information ?</p><ul><li>Je la jette ?</li><li>Je la range ?</li><li>Je la traite ?</li><li>Je la délègue ?</li><li>Je la mets de côté ?</li></ul><h3><a
name="Leprocessusdecollecte"></a>Le processus de collecte</h3><p>L&#8217;idée est donc de collecter les informations de toutes vos sources et de les centraliser à un unique endroit. Cela peut être un logiciel comme Evernote, des post-it, un agenda ou encore un outil de mind mapping par exemple. Vous pouvez aussi utiliser Gmail ou encore une boite recevant les papiers, ou votre smartphone via vos emails.<br
/> Ensuite vous pouvez les traiter en les classant en différentes catégories :</p><ul><li>A faire</li><li>A reporter</li><li>A déléguer</li><li>A supprimer</li></ul><p>Le but final est d&#8217;avoir une boîte d&#8217;entrée toujours vide.</p><h3><a
name="Lecontexte"></a>Le contexte</h3><p>Une tâche est une action unitaire qui peut prendre de quelques minutes à plusieurs heures. Pour certaines tâches vous devez vous situer dans un certain contexte. Effectivement, nettoyer le jardin n&#8217;est pas une tâche que vous pouvez réaliser au bureau&#8230;<br
/> Identifiez les projets : un projet est une action qui se réalise en plus d&#8217;une étape, comme écrire un livre, refaire sa cuisine ou travailler sur un projet open source par exemple. Organisez vous donc et classez par dossier en fonction des tâches que vous avez à réaliser. Vous pouvez aussi utiliser un gestionnaire de tâches et identifier les actions par projet.</p><h3><a
name="Larevue"></a>La revue</h3><p>Il est très important de ne pas oublier les tâches et les projets que l&#8217;on a en cours. Et pour ce faire, il est conseillé, une fois par semaine, de faire le point sur l&#8217;avancement des tâches.</p><h3><a
name="Commentslectionnerdestches"></a>Comment sélectionner des tâches ?</h3><p>Vous devez sélectionner vos tâches en fonction :</p><ul><li>du contexte,</li><li>du temps disponible,</li><li>de votre niveau d&#8217;énergie,</li><li>et de vos priorités.</li></ul><h3><a
name="Restezconcentrs"></a>Restez concentrés !</h3><p>Kito fait à nouveau un petit sondage : Qui d&#8217;entre nous regarde systématiquement ses mails tout au long de la journée. Beaucoup dans la salle lèvent la main.;. Nous avons tous la manie de vérifier trop souvent nos mails, ce qui est très mauvais pour la concentration. La solution : se fixer des moments clés dans la journée pour les vérifier.<br
/> Essayez aussi de ne travailler que sur une tâche à la fois, d&#8217;éviter les distractions et de fixer un temps de concentration en employant <a
href="http://en.wikipedia.org/wiki/Pomodoro_Technique" title="le Pomodoro" >le Pomodoro</a>.</p><h3><a
name="Lesoutilsetlogicielspourvousai"></a>Les outils et logiciels pour vous aider</h3><p>Pour gérer vos tâches, vous pouvez utiliser des outils comme une simple feuille de papier ou un fichier texte. Parmi les logiciels, vous aurez le choix dans un large panel avec entre autres <a
href="http://www.nozbe.com" title="Nozbe" >Nozbe</a> (sur le web, pour iPhone et iPad), <a
href="http://www.activeinboxhq.com" title="ActiveInBox" >ActiveInBox</a> (un plugin gmail), <a
href="http://www.rememberthemilk.com" title="RememberTheMilk" >RememberTheMilk</a>, <a
href="http://culturedcode.com/things/" title="Things" >Things</a>, ToDo, <a
href="http://www.toodledo.com/" title="ToodleDo" >ToodleDo</a> &#8230;</p><p>Pour stocker les informations, vous pouvez utiliser un cahier, ou un logiciel comme EverNote, OneNote ou encore un logiciel de Mind Mapping comme Mind Manager ou mind42.com.</p><h3><a
name="ApplicationdeGTDauquotidiendes"></a>Application de GTD au quotidien des développeurs</h3><p>Kito fait maintenant le parallèle entre GTD appliqué au quotidien et comment cela pourrait être appliqué au quotidien des développeurs.<br
/> Le meilleur moyen pour un développeur de gérer son quotidien est l&#8217;utilisation d&#8217;un <em>issue tracker</em>. Il peut être assimilé à une liste de tâches. En entrée, vous avez un nouveau problème qui vous est affecté. Lorsqu&#8217;une anomalie peut être coupé en plusieurs tâches, il s&#8217;agit d&#8217;un nouveau projet.<br
/> Les TODOs dans le code peuvent aussi être vu comme des tâches à réaliser.<br
/> Le contexte peut être défini dans une boîte commune pour toutes les équipes. Elles pourront ainsi partager les tâches et les projets et fournir une visibilité de leur progression. C&#8217;est aussi un bon moyen pour déléguer les tâches.</p><p>Pour résumer, ce qu&#8217;il faut retenir de cette conférence, c&#8217;est de fermer les boucles, collecter les informations à un seul endroit et décider de ce que l&#8217;on en fait (le faire, le déléguer, le supprimer ou le reporter). Le méthode vous intéresse ? Pour plus d&#8217;informations, vous pouvez lire <a
href="http://www.richand.info/blog/2010/11/la-methode-gtd/" title="larticle de Nathaniel Richand" >l&#8217;article de Nathaniel Richand</a> ou tout simplement acheter le livre <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/22/devoxx-getting-things-done-for-programmer/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Devoxx &#8211; Comparaison des Frameworks Web sur JVM</title><link>http://blog.xebia.fr/2010/11/19/devoxx-comparaison-des-frameworks-web-sur-jvm/</link> <comments>http://blog.xebia.fr/2010/11/19/devoxx-comparaison-des-frameworks-web-sur-jvm/#comments</comments> <pubDate>Fri, 19 Nov 2010 14:12:34 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Grails]]></category> <category><![CDATA[GWT]]></category> <category><![CDATA[Ruby on Rails]]></category> <category><![CDATA[Spring MVC]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Wicket]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5938</guid> <description><![CDATA[Nouvelle journée de Devoxx et cela commence plutôt bien avec une comparaison des Frameworks Web sur JVM par Matt Raible. Avec un accent Américain trés prononcé, et aprés une présentation &#171;&#160;lessig style&#160;&#187; trés appréciée, il présente le programme de la session : les candidats, les points de comparaison, la matrice et quelques graphiques. Comment choisir [...]]]></description> <content:encoded><![CDATA[<p> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_matt_raible.png" border="0" alt="" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> Nouvelle journée de Devoxx et cela commence plutôt bien avec une <a
href="http://www.devoxx.com/display/Devoxx2K10/Comparing+JVM+Web+Frameworks" title="comparaison des Frameworks Web sur JVM" >comparaison des Frameworks Web sur JVM</a> par <a
href="http://raibledesigns.com/" title="Matt Raible" >Matt Raible</a>. Avec un accent Américain trés prononcé, et aprés une présentation &laquo;&nbsp;<a
href="http://www.presentationzen.com/presentationzen/2005/10/the_lessig_meth.html" title="lessig style" >lessig style</a>&nbsp;&raquo; trés appréciée, il présente le programme de la session : les candidats, les points de comparaison, la <em>matrice</em> et quelques graphiques.</p><p>Comment choisir ces fameux Frameworks Web qui sont, et c&#8217;est le moins que l&#8217;on puisse dire, assez nombreux. Et bien tout d&#8217;abord, il va falloir restreindre cette liste à quelques Frameworks et, pour chacun d&#8217;entre eux, prototyper une application. A partir de ces prototypes, il sera alors possible de créer une <em>matrice</em> comprenant différents critères qui seront notés pour chaque Frameworks. De là, on pourra faire ressortir les meilleurs prétendants, un petit document et faire nos recommandations. C&#8217;est ce qu&#8217;a fait Matt Raible durant cette présentation et voici ses résultats !</p><p>&nbsp;<br
/> &nbsp;</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_web_frameworks.png" border="0" alt="" /></div><p>Matt fait un petit rappel sur les facteurs clés qui nous permettaient de choisir un Framework Web en 2007 <em>(de son expérience)</em> :</p><ul><li>composant, requête ou RIA,</li><li>facilité de développement,</li><li>communauté autour du Framework,</li><li>roadmap et futur du Framework,</li><li>maintenance,</li><li>fonctionnalités.</li></ul><p>Aujourd&#8217;hui, nous en demandons beaucoup plus à nos Frameworks Web et, pour Matt, nous passons de 6 à 20 ! Avec un peu d&#8217;exagération sur cette fulgurante croissance car certains points faisaient déjà parti de nos préoccupations en 2007 ; de là à dire que ce sont de nouveaux points&#8230; En tout cas, les voici au complet :</p><ul><li>productivité du développeur,</li><li>perception du développeur,</li><li>courbe d&#8217;apprentissage,</li><li>santé du Framework,</li><li>disponibilité des développeurs <em>(sur le marché)</em>,</li><li>offres d&#8217;emploi,</li><li>templating,</li><li>composants,</li><li>ajax,</li><li>plugins ou add-ons,</li><li>scalabilité,</li><li>support pour les tests,</li><li>i18n et l10n,</li><li>validation,</li><li>support du multi-langage (groovy, scala&#8230;),</li><li>qualité de la documentation / tutoriaux,</li><li>publications,</li><li>support de REST,</li><li>support mobile,</li><li>et degré de risque.</li></ul><p>Bien sûr, nous pouvons remettre en cause certains points de cette liste et passer plusieurs journées à en débattre mais le débat n&#8217;est pas là. Matt assume que les choix qui sont fait sont les siens et il nous invite à participer pour ajouter des éléments à la liste ou lui indiquer pourquoi il se trompe sur telle ou telle appréciation. L&#8217;idée est ici de donner une base solide afin de pouvoir comparer sur plusieurs points importants de nos projets d&#8217;entreprise ces fameux innombrables Frameworks Web.</p><p>Roulement de tambour&#8230; voici la matrice ! (<a
href="http://spreadsheets.google.com/pub?key=0AtkkDCT2WDMXdC1HOEtnUHpCejJMbUhGeGJWUmh5dVE&#038;hl=en&#038;output=html" title="google spreadsheet" >google spreadsheet</a>)</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_matrice.png" border="0" alt="" /></div><p>Les gagnants de ce &laquo;&nbsp;concours&nbsp;&raquo; sont :</p><ul><li>Spring MVC,</li><li>GWT,</li><li>Ruby on Rails <em>(non JVM mais non exclu car très présent sur le marché)</em>,</li><li>Grails,</li><li>Wicket.</li></ul><p>Vient ensuite une partie avantages / inconvénients pour chacun d&#8217;eux. Cette partie est à prendre avec des pincettes car les inconvénients relevés sont souvent surmontables <em>(certains sont même juste des comportements par défaut modifiable par configuration !)</em> mais encore une fois cela donne un overview de ce que font ou ne font pas ces Frameworks :</p><ul><li><strong>Spring MVC :</strong> configuration simple par conventions et annotations, intégration de plusieurs formats d&#8217;affichage <em>(JSP, JSTL, FreeMarker, JSON, PDF&#8230;)</em> et excellent support de REST <u>mais</u> pas de rechargement à chaud par défaut <em>(toutefois possible avec JRebel ou Spring Roo)</em>, projet non ouvert à la communauté pour contribution <em>(SpringSource mandatory)</em> et pas de librairie ajax en bundle <em>(ce qui peut aussi être vu comme un point positif car mise à jour des librairies Javascript non bloquée par le Framework)</em> ;</li><li><strong>GWT :</strong> code Java traduit en un Javascript extrêmement optimisé, apprentissage facile et rapide <em>(petit bémol car sur ce point les développeurs Web n&#8217;ont pas forcément cette compétence du code Swing-like)</em> et une communauté vibrante <u>mais</u> il faut connaître Java <em>(alors que l&#8217;on produit du Javascript)</em>, compilation très lente et code difficile à tester ;</li><li><strong>Ruby on Rails :</strong> apprentissage rapide pour tout développeur Web, documentation abondante et  communauté de passionnés <u>mais</u> moins performant que les autres langages, langage dynamique = plus de tests pour éviter les cast exceptions au runtime et  un manque d&#8217;outils de développement et de débugger comme dans le monde Java ;</li><li><strong>Grails :</strong> transition facile depuis le monde Java, utlise Groovy et nombreux plugins <u>mais</u> Groovy vise directement les développeurs Java <em>(ce qui peut bloquer d&#8217;autres développeurs)</em>, stack traces <em>affreuses</em> <em>(dans le slide</em> <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <em>)</em> et connaissances des sous-modules non nécessaires mais peut aider ;</li><li><strong>Wicket :</strong> parfait pour les développeurs Java, binding des pages et des vues et communauté active <u>mais</u> pas ou peu d&#8217;offres d&#8217;emploi, stateful par défaut et templates HTML juste à côté des classes Java <em>(ce qui ne va pas aider le graphiste)</em>.</li></ul><p>Pour finir, nous avons droit à quelques <em>jolis</em> graphiques qui nous montre à quelle point Ruby On Rails est très présent au niveau de la communauté mais ainsi en terme d&#8217;offres d&#8217;emploi.</p><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_stack_overflow.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_stack_overflow-300x225.png" alt="devoxx_stack_overflow" title="devoxx_stack_overflow" width="300" height="225" class="alignnone size-medium wp-image-5941" /></a></div><div
align="center"> <a
href="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_charts.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_charts-300x225.png" alt="devoxx_charts" title="devoxx_charts" width="300" height="225" class="alignnone size-medium wp-image-5939" /></a></div><p>Matt a insisté sur deux points importants tout d&#8217;abord sur le fait que ce sont les développeurs qui devraient choisir leur framework web, plus les développeurs sont heureux, plus ils seront productifs. D&#8217;autre part, javascript n&#8217;est pas si difficile comme on l&#8217;entend souvent de la part des développeurs java, plus on le pratique, plus on l&#8217;apprécie, et c&#8217;est vital si l&#8217;on veut être sérieux pour le développement d&#8217;application web.</p><p>Cette méthode peut être appliqué dans votre entreprise pour choisir votre framework web :</p><ol><li>priorisez les fonctionnalités importantes de votre application</li><li>sélectionnez ensuite 3 ou 4 Frameworks pour prototyper une application <em>(1 semaine chacun)</em>, documentez</li><li>calculez votre <em>matrice</em> et choisissez !</li></ol> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/19/devoxx-comparaison-des-frameworks-web-sur-jvm/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Devoxx &#8211; Java Puzzlers par Joshua Bloch et William Pugh</title><link>http://blog.xebia.fr/2010/11/19/devoxx-java-puzzlers-par-joshua-bloch-et-william-pugh/</link> <comments>http://blog.xebia.fr/2010/11/19/devoxx-java-puzzlers-par-joshua-bloch-et-william-pugh/#comments</comments> <pubDate>Fri, 19 Nov 2010 09:05:03 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[java]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5912</guid> <description><![CDATA[Pour finir cette très bonne journée de jeudi, une session exceptionnelle nous attendait : Java Puzzlers par Joshua Bloch (faut-il encore le présenter ? Chief architect chez Google, Java Collections Framework, Effective Java&#8230;) et William Pugh (créateur de FindBugs) ! Ce dernier a d&#8217;ailleurs bien préparé le terrain avec la session Defective Java : Mistakes [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_joshua_bloch.png" border="0" alt="" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> Pour finir cette très bonne journée de jeudi, une session exceptionnelle nous attendait : <a
href="http://www.devoxx.com/display/Devoxx2K10/Java+Puzzlers+-+Scraping+the+Bottom+of+the+Barrel" title="Java Puzzlers" >Java Puzzlers</a> par <a
href="http://www.devoxx.com/display/Devoxx2K10/Joshua+Bloch" title="Joshua Bloch" >Joshua Bloch</a> <em>(faut-il encore le présenter ? Chief architect chez Google, Java Collections Framework, Effective Java&#8230;)</em> et <a
href="http://www.devoxx.com/display/Devoxx2K10/William+Pugh" title="William Pugh" >William Pugh</a> <em>(créateur de FindBugs)</em> ! Ce dernier a d&#8217;ailleurs bien préparé le terrain avec la session <a
href="http://www.devoxx.com/display/Devoxx2K10/Defective+Java++Mistakes+that+matter" title="Defective Java  Mistakes that matter" >Defective Java : Mistakes that matter</a> qui précédait le Puzzlers.</p><p>C&#8217;est parti pour le show : les puzzlers en photo, et les remarques et solutions en commentaire !</p><p>&nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;<br
/> &nbsp;</p><h3><a
name="Puzzlern"></a>Puzzler n°1</h3><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_1.png" border="0" alt="" /></div><p><code>BigDecimal</code> permet un calcul de précision que l&#8217;on ne peut avoir avec des doubles donc vous pensez tout de suite à a) ou b). En même temps, ça sent le piège car nos doubles sont toujours utilisés directement donc plutôt la c). Et bien vous avez tout faux, réponse d) !</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_1_solution.png" border="0" alt="" /></div><p>En effet, le code passe par le constructeur <code>public BigDecimal(double val)</code> qui va donc représenter la valeur décimale exacte <em>(jusque là tout va bien)</em> d&#8217;un double à virgule flottante&#8230; donc incorrect. Et comme nous sommes en présence d&#8217;un double, nous avons la réponse d), la réponse c) étant la représentation pour un float. La solution est de passer par un String et d&#8217;utiliser ainsi le constructeur <code>public BigDecimal(String val)</code>.</p><h3><a
name="Puzzlern"></a>Puzzler n°2</h3><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_2.png" border="0" alt="" /></div><p>La bonne réponse est la réponse a). La solution de ce Puzzler mériterait un article complet car beaucoup de paramètres entrent en jeux. Et ça tombe bien puisque cet article existe ! Je vous laisse donc apprécier le détail chez <a
href="http://tech.puredanger.com/2009/06/11/collections-puzzler/" title="Alex Miller" >Alex Miller</a> pour ce Puzzler qui s&#8217;amuse avec la méthode <code>entrySet()</code> d&#8217;<code>EnumMap</code> <em>(même comportement pour <code>IdentityHashMap</code>, <code>ConcurrentHashMap</code> a été corrigé)</em> et le constructeur <code>addAll()</code> du <code>HashSet</code>.</p><h3><a
name="Puzzlern"></a>Puzzler n°3</h3><p>Les solutions possibles pour ce Puzzler sont : a) 99 b) 100 c) Throws an exception d) None of above.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_3.png" border="0" alt="" /></div><p>Et la réponse est d) avec un calcul qui va tourner très longtemps <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_3_solution.png" border="0" alt="" /></div><p>Nous sommes face à un <a
href="http://www.regular-expressions.info/catastrophic.html" title="catastrophic backtracking" >catastrophic backtracking</a> qui génère un calcul exponentiel pour trouver le résultat !</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_3_explication.png" border="0" alt="" /></div><p>La solution ? Retirer le <code>?</code>. Cette nouvelle RegExp <code>(aa|aab)</code> <u>fonctionne exactement comme</u> <code>(aa|aab?)</code> mais sans exposer ce <em>catastrophic backtracking</em>. Ce Puzzler n&#8217;est donc pas un bug Java mais une manière de mal écrire une RegExp.</p><p>Willian Pugh nous confirme donc que nous aurons le même problème en Ruby, Python, Perl&#8230; Joshua Bloch se demande alors <em>Even in Scala ?</em> Réponse de son partenaire : <em>Yes, even in Scala !</em> Ce qui a bien fait rire la salle <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><h3><a
name="Puzzlern"></a>Puzzler n°4</h3><p>Les solutions possibles pour ce Puzzler sont : a) <code>["null", null]</code> b) <code>[null]</code> c) <code>[null, null]</code> d) None of above.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_4.png" border="0" alt="" /></div><p>La solution est la réponse d) avec une superbe <code>ClassCastException</code> qui sort de nulle part ! Et bien, pas vraiment de nulle part quand on regarde de plus près. L&#8217;exception est levée dans la classe <code>StringSink</code>, mais il est difficile de voir quelle partie du code a pu générer une exception. En fait, ce sera même très difficile à diagnostiquer car le code qui provoque l&#8217;exception n&#8217;est pas visible ! Par contre, une fois la classe décompilée, on voit apparaître ce code non visible sous la forme d&#8217;une <em>bridge method</em> :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_4_explication.png" border="0" alt="" /></div><p>Utiliser un <code>Generic T</code> dans une méthode qui prend un <code>Varargs</code> <em>(donc un tableau de T)</em> a causé la création de cette méthode <code>void add(Object<a
href="" title="" ></a> a)</code> qui retourne notre objet casté en <code>String<a
href="" title="" ></a></code>. En effet, le compilateur ne connaissant pas le type T <em>(erasure mon amie&#8230;)</em> et devant aussi gérer ce tableau, il est obligé de créer une méthode avec <code>Object<a
href="" title="" ></a></code>. A noter que le compilateur nous a prévenu dans les logs de compilation. Donc comme le rappelle Joshua Bloch : &laquo;&nbsp;Don&#8217;t ignore warnings !&nbsp;&raquo;.</p><h3><a
name="Puzzlern"></a>Puzzler n°5</h3><p>Ce Puzzler est définitivement mon préféré :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_5.png" border="0" alt="" /></div><p>Et une fois de plus, on se retrouve face à une exception, toujours de type <code>ClassCastException</code>. Encore un problème de Generics ? Oui&#8230; Car la classe <code>Glommer()</code> a été instanciée sans préciser le type T. Donc la classe passe en <a
href="http://download.oracle.com/javase/tutorial/java/generics/erasure.html" title="Raw type" >Raw type</a>. Et ce qui se passe dans le cas présent, c&#8217;est que toutes les informations de Generics&#8230; sont supprimées de la classe !<br
/> Ainsi, les méthodes <code>glom</code> qui prenaient une <code>Collection&lt;?&gt;</code> et une <code>List&lt;Integer&gt;</code> se retrouvent désormais à recevoir une <code>Collection</code> et une <code>List</code> non typée. Comme la liste de <code>String</code> est instanciée avec <code>Arrays.asList("a","b","c")</code> qui retourne une <code>List</code>, la priorité va à la méthode qui prend en paramètre une <code>List</code>. Et devinez quoi : c&#8217;est la méthode qui initialement devait s&#8217;occuper des <code>Integer</code> ! D&#8217;où le <code>ClassCastException</code> dès la première valeur lors de la boucle <em>(qui essaie de caster un <code>String</code> en <code>int</code>)</em>.<br
/> Dans ce cas, la solution est d&#8217;enlever ce type T de la classe <em>(non utilisé dans le corps)</em>. La recommandation liée à ce Puzzler : n&#8217;utilisez pas les Raw Types et, une fois de plus, n&#8217;ignorez pas les warnings de compilation <em>(car il y en aurait eu un)</em> !</p><h3><a
name="Puzzlern"></a>Puzzler n°6</h3><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_puzzler_6.png" border="0" alt="" /></div><p>Autant le deuxième est trouvable, autant pour le premier, tout le monde dans la salle est tombé dans le panneau <em>(certains ont même crié &laquo;&nbsp;voleur, c&#8217;est pas un Puzzler ça !&nbsp;&raquo;)</em>. La bonne réponse est la réponse b) avec 17777 et 43878.</p><p>Le premier calcul et le sujet du vol : ce n&#8217;est pas écrit <code>12345+54321</code> mais <code>12345+5432l</code>.<br
/> Vous ne voyez toujours pas ? Je vous aide : <code>12345+5432L</code> ! Et là évidemment cela change tout ! Nous n&#8217;avons donc plus 54321 mais 5432 <em>(5432L en long)</em> qui donne bien 17777.</p><p>Le deuxième calcul : <code>01234+43210</code> correspond en fait à <code>668+43210</code> ! Que s&#8217;est-il encore passé sous nos yeux&#8230; et bien le premier 0 de 01234 convertit notre 1234 en base 8 ! Ce qui nous donne 668 et donne une somme de 43878.</p><p>La morale de ce Puzzler : mettez des majuscules à vos long <em>(5432L est un long et cela se voit)</em> et ne préfixez jamais vos entiers avec un 0 à moins que vous ne vouliez vraiment le convertir en base 8.</p><p>Si ces Puzzlers vous ont plu, un seul livre : <a
href="http://www.javapuzzlers.com/" title="Java Puzzlers" >Java Puzzlers</a> ! Un grand merci à Joshua Bloch et William Pugh pour cette excellente présentation !</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_joshua_bloch_william_pugh.png" border="0" alt="" /></div> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/19/devoxx-java-puzzlers-par-joshua-bloch-et-william-pugh/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Devoxx &#8211; La keynote de bienvenue</title><link>http://blog.xebia.fr/2010/11/18/devoxx-la-keynote-de-bienvenue/</link> <comments>http://blog.xebia.fr/2010/11/18/devoxx-la-keynote-de-bienvenue/#comments</comments> <pubDate>Thu, 18 Nov 2010 10:29:37 +0000</pubDate> <dc:creator>Ellène Dijoux</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5907</guid> <description><![CDATA[Cette année, Devoxx a été l&#8217;évènement le plus attendu par la communauté Java. Et mercredi matin, beaucoup de personnes se sont agglutinées devant la salle 8 pour être sûr d&#8217;avoir les bonnes places au premier rang pour la keynote de bienvenue. En attendant la prise de parole de Stephan Jaansen, beaucoup de tweets taggés #devoxx [...]]]></description> <content:encoded><![CDATA[<p>Cette année, Devoxx a été l&#8217;évènement le plus attendu par la communauté Java. Et mercredi matin, beaucoup de personnes se sont agglutinées devant la salle 8 pour être sûr d&#8217;avoir les bonnes places au premier rang pour la keynote de bienvenue. En attendant la prise de parole de Stephan Jaansen, beaucoup de tweets taggés #devoxx défilent sur l&#8217;écran  dont une bonne proportion de tweets en français, montrant la forte présence francophone à cet évènement.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_stephan_janssen_mini.png" border="0" alt="" /></div><p>La présentation débute, Stephan prend la parole. Cette année 3000 personnes sont attendues, venant de 40 pays différents. On peut aussi noter 300 étudiants pour l&#8217;Université, 67 JUGs (dont un paquet en France !) et 27 sponsors. Si on continue dans les chiffres, citons 10 modems VDSL 2 qui tournaient à 45% de leur capacité : on ne pouvait pas se plaindre du Wifi cette année, il était d&#8217;excellente qualité. Devoxx c&#8217;est aussi 13000 plateaux repas, 7200 croissants, 2000 yaourts, 1500 frites et 10 fûts de bière (pour la réception le soir même).<br
/> L&#8217;équipe Devoxx est composée de 25 techniciens pour le son, la vidéo, l&#8217;enregistrement et le wifi.</p><p>Stephan a également parlé de l&#8217;engouement qu&#8217;il y a eu autour de <a
href="http://www.devoxx.com/display/Devoxx2K10/Schedule+REST+interface" title="linterface JAXRS" >l&#8217;interface JAX-RS</a> qu&#8217;il a défini. Cette interface permet de visualiser le programme de Devoxx (avec le détail des sessions) et de se créer son agenda de la conférence. Beaucoup d&#8217;applications ont été développées autour de cette interface : Vaadin, des applications pour iPhone, pour Android et même en Scala ! Son code est open source, et d&#8217;autres personnes l&#8217;utilisent déjà pour gérer leur conférence.</p><p>Maintenant, parlons de son bébé, <a
href="http://parleys.com" title="Parleyscom" >Parleys.com</a> qui héberge toujours toutes les captures vidéo des années passées. Actuellement, il contient 800h de vidéos sur Java et possède 41 canaux de JUG. Les premières vidéos de Devoxx seront disponibles la semaine prochaine. Le site fournit aussi les vidéos en haute résolution. Vous pourrez avoir accès aux vidéos pendant un an pour 79€.<br
/> Cette keynote était disponible en <em>live streaming</em> pour ceux qui ne pouvait pas être présent. Et quelques présentations seront accessibles gratuitement tout au long de l&#8217;année. Comme par exemple celle de Joshua Bloch qui a fait salle comble mercredi.</p><p>Un nouveau client mobile est disponible, développé avec Adobe Air 2.5, où il est possible par Drag&#8217;n'Drop de récupérer ses vidéos sur son Android. L&#8217;application Parleys est disponible sur l&#8217;Android Market.<br
/> Côté iPad, Jan-Kees van Andel a réalisé un gros travail avec JSF2. Cette application est open source et disponible sur Google Code.</p><p>Beaucoup d&#8217;émotions et une belle ambiance dans la salle, Stephan nous souhaite à tous la bienvenue, même si les universités ont commencé lundi.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/18/devoxx-la-keynote-de-bienvenue/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Devoxx &#8211; Les nouveautés d&#8217;Hibernate, une perspective JPA 2</title><link>http://blog.xebia.fr/2010/11/17/devoxx-les-nouveautes-dhibernate-une-perspective-jpa-2/</link> <comments>http://blog.xebia.fr/2010/11/17/devoxx-les-nouveautes-dhibernate-une-perspective-jpa-2/#comments</comments> <pubDate>Wed, 17 Nov 2010 08:40:35 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Hibernate]]></category> <category><![CDATA[Hibernate Envers]]></category> <category><![CDATA[Hibernate Search]]></category> <category><![CDATA[Hibernate Spatial]]></category> <category><![CDATA[Hibernate Validator]]></category> <category><![CDATA[JPA 2]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5898</guid> <description><![CDATA[Nouvelle journée d&#8217;université et, comme dans toute conférence qui se respecte, nous avons droit à une session de mise au point sur les différentes nouveautés de l&#8217;écosystème d&#8217;Hibernate d&#8217;un point de vue JPA 2. La couverture est large : Hibernate Core, Search, Envers, Validator et Spatial. De nombreuses démos nous ont permis de nous familiariser [...]]]></description> <content:encoded><![CDATA[<p>Nouvelle journée d&#8217;université et, comme dans toute conférence qui se respecte, nous avons droit à une session de mise au point sur les différentes <a
href="http://www.devoxx.com/display/Devoxx2K10/What's+new+in+Hibernate++a+JPA+2+perspective" title="nouveauts de lcosystme dHibernate dun point de vue JPA 2" >nouveautés de l&#8217;écosystème d&#8217;Hibernate d&#8217;un point de vue JPA 2</a>.</p><p>La couverture est large : Hibernate Core, Search, Envers, Validator et Spatial. De nombreuses démos nous ont permis de nous familiariser avec ces nouveautés liées à JPA 2.<br
/> La session était animée, comme il se doit, par Emmanuel Bernard. Le code de la session est disponible sur <a
href="https://github.com/emmanuelbernard/hibernateuniversity-devoxx" title="GitHub" >GitHub</a> et ce pour encore une petite semaine.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_emmanuel_bernard_live_coding.png" border="0" alt="" /></div><h3><a
name="HibernateCoreORM"></a>Hibernate Core &#8211; ORM</h3><p>Après quelques nouveautés, dont le support de l&#8217;annotation <code>@MapsId</code> de JPA 2, le partial generator <em>(pour générer une clé selon un algorithme spécifique)</em> et le runtime fetch profile <em>(qui définit plusieurs stratégies de fetch)</em>, Emmanuel commence sa première démo et nous présente la nouvelle API Criteria :</p><ul><li>query building API orientée objet,</li><li>type-safe,</li><li>fortement typé,</li><li>avec la possibilité d&#8217;utiliser le méta-modèle statique <em>(par annotation processor)</em>.</li></ul><p>Et c&#8217;est sur ce dernier point qu&#8217;il insistera pendant toutes ses démos. En effet l&#8217;API est construite de telle manière que nous récupérerons des erreurs <em>compile-time</em> si un mauvais méta-modèle ou un mauvais attribut de méta-modèle est défini.</p><p>Concrètement, le méta-modèle est généré par annotation processor. Une fois celui-ci activé dans votre IDE, chaque compilation de fichier lancera le processus de génération des méta-modèles. Par exemple, une classe <code>User</code> aura un méta-modèle associé <code>User_</code> qui contiendra plusieurs attributs statiques reflétant les attributs de la classe. Ainsi, si un attribut change de nom, toutes les requêtes utilisant l&#8217;ancien nom seront en <em>compilation error</em>. Voici un exemple à partir d&#8217;une capture d&#8217;un bout de code lors de cette démo :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_hibernate_core.png" border="0" alt="" /></div><p>On remarque ainsi dans les contraintes l&#8217;utilisation de <code>User_.credits</code>, <code>credits</code> étant un attribut de la classe <code>User</code>. On voit dès lors l&#8217;intérêt d&#8217;un tel mécanisme qui justifie ainsi son appellation type-safe et fortement typé. En effet, sur le 3ème exemple, imaginons que  l&#8217;on donne un argument autre que <code>User_.gender</code> mais du même type que <code>gender</code> ; l&#8217;API nous donnera tout de même une erreur de compilation car ce qui est attendu est un <code>Path&lt;Gender&gt;</code> qui ne peut être obtenu qu&#8217;en ayant pris en paramètre un <code>gender</code>. Une fonctionnalité plutôt intéressante donc mais qu&#8217;il convient mieux de voir de ses propres yeux dans un IDE pour bien comprendre la puissance de la chose.</p><p>Cette nouvelle API criteria prend en compte toutes sortes de <code>Joins</code> et <code>Where</code>, les <code>Subquery</code> et les <code>Map</code> et <code>Like</code>. Cette API supporte ainsi tout le JP-QL : collections, maps, aggregation, order by, group by, having count, subselect, &#8230;</p><p>Le lock  mode, qui prévient entre autres des <em>dirty reads</em>,   supporte l&#8217;optimistic et le pessimistic read/write. Le cache de second niveau a été amélioré et Hibernate supporte aussi Infinispan. Enfin, CGLIB se retrouve déprécié et se voit remplacé par Javassist.</p><p>Côté packaging, Hibernate passe de plusieurs modules à un seul core module qui contient Hibernate Annotations, Entitymanager, Envers et l&#8217;ancien Core. De même, tous les modules auront le même numéro de version simplifiant ainsi la gestion des dépendances entre modules <em>(si un module est en 3.6.0, les autres devront l&#8217;être aussi)</em>.</p><h3><a
name="HibernateSearch"></a>Hibernate Search</h3><p>Le point important est une fois de plus l&#8217;API programmatique permettant de faire ses requêtes full text directement telles que :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_hibernate_search.png" border="0" alt="" /></div><p>Dans les petits plus : un error handling pour reporter dans un log ou dans une pile, des statistiques avancées, une indexation des valeurs <code>null</code>, des query timeout et bien d&#8217;autres.</p><h3><a
name="HibernateSpatial"></a>Hibernate Spatial</h3><p>Hibernate Spatial est une extension d&#8217;Hibernate permettant de gérer des données géographiques. Il s&#8217;appuie sur le package Java Topology Suite ou <a
href="http://www.vividsolutions.com/jts/jtshome.htm" title="JTS" >JTS</a> pour représenter les données géographiques dans le monde Java.</p><p>Voici ce que rajoute le projet à Hibernate :</p><ul><li>GeometryUserType.</li><li>SpatialRestrictions API.</li><li>HQL Spatial functions.</li><li>SpatialDialectProvider.</li></ul><p>Les bases de données supportées sont les suivantes :</p><ul><li>Oracle Spatial.</li><li>Postgresql/Postgis.</li><li>MySQL.</li><li>Microsoft SQL Server 2008.</li><li>H2 (GeoDB).</li><li>IBM Informatix IDS (en cours).</li><li>IBM DB2 (à planifier).</li></ul><p>Les spatial queries s&#8217;écrivent comme des requêtes criteria normales mais dans le monde spatial. Un exemple tiré du slide :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_hibernate_spatial.png" border="0" alt="" /></div><p>A noter que pour l&#8217;instant le projet est un module à part d&#8217;Hibernate 3 mais qu&#8217;il sera packagé dans Hibernate Core en version 4.</p><h3><a
name="HibernateEnvers"></a>Hibernate Envers</h3><p>Comme pour les autres modules, l&#8217;API programmatique est tout de suite mise en avant avec des requêtes Criteria par révision sur les objets :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx_hibernate_envers.png" border="0" alt="" /></div><h3><a
name="HibernateValidator"></a>Hibernate Validator</h3><p>Là encore, l&#8217;API a aussi été remaniée et l&#8217;on peut ainsi appeler directement des méthodes du type <code>.constraint(SizeDef.class).min(1)</code> dans notre requête Criteria <em>(équivalent de l&#8217;annotation @Min)</em>.</p><h3><a
name="Conclusion"></a>Conclusion</h3><p>Un bon tour d&#8217;horizon des produits Hibernate mais surtout beaucoup de démos <em>les mains dedans</em> où l&#8217;on voit le tout fonctionner en @Inject et <a
href="http://seamframework.org/Weld" title="Weld" >Weld</a> sous IntelliJ IDEA. Une bonne session !</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/17/devoxx-les-nouveautes-dhibernate-une-perspective-jpa-2/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Devoxx &#8211; Productive Programmer</title><link>http://blog.xebia.fr/2010/11/16/devoxx-productive-programmer/</link> <comments>http://blog.xebia.fr/2010/11/16/devoxx-productive-programmer/#comments</comments> <pubDate>Tue, 16 Nov 2010 10:00:19 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5891</guid> <description><![CDATA[Neal Ford nous présente pour cette première session des University, les bonnes pratiques issues de son livre Productive Programmer. Ce livre couvre les habitudes et les bonnes pratiques à adopter en tant que développeur. Accélération Taper au clavier est bien plus rapide que la navigation avec la souris. On perd beaucoup de temps à chercher [...]]]></description> <content:encoded><![CDATA[<p>Neal Ford nous présente pour cette première session des University, les bonnes pratiques issues de son livre Productive Programmer. Ce livre couvre les habitudes et les bonnes pratiques à adopter en tant que développeur.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx-ford-neal.png" border="0" alt="" /></div><h3><a
name="Acclration"></a>Accélération</h3><p><strong>Taper au clavier est bien plus rapide que la navigation avec la souris.</strong> On perd beaucoup de temps à chercher alors que les raccourcis clavier sont bien plus rapides. Chaque OS fournit ses raccourcis claviers pour ouvrir l&#8217;explorateur Windows ou le Finder. Pour naviguer sur internet, utilisez <a
href="https://addons.mozilla.org/en-US/firefox/addon/6420/" title="NumberFox" >NumberFox</a>, il numérote les liens sur les pages et permet en saisissant un numéro d&#8217;accéder à la page associée. <strong>Pour la gestion du presse papier</strong>, utilisez par exemple <a
href="http://jumpcut.sourceforge.net/" title="jumpcut" >jumpcut</a> sur MacOS X qui permet de visualiser ce que vous avez coupé ou copié avec un historique des données. Le changement de contexte prend du temps également, surtout en ligne de commande. Avec les commandes <a
href="http://www.colorconsole.de/console/fr/050.htm" title="pushdpopd" >pushd/popd</a>, vous pourrez mémoriser un répertoire avec pushd pour le réutiliser ensuite à tout moment avec popd.<br
/> <strong>Lignes de commande ou explorateur ?</strong> Les explorateurs sont intéressants dans certains cas, les lignes de commandes dans d&#8217;autres. Pour switcher facilement de l&#8217;un à l&#8217;autre, vous pouvez utiliser <a
href="http://www.codeproject.com/KB/cs/commandbar.aspx" title="cmd prompt explorer bar" >cmd prompt explorer bar</a> pour Windows et <a
href="http://www.cocoatech.com/" title="Path Finder" >Path Finder</a> pour Mac OS X. Ils proposent dans une même fenêtre la console et l&#8217;explorateur.<br
/> <strong>Quand vous codez, vous devriez toujours utiliser le clavier plutôt que la souris.</strong> Forcez vous à apprendre les raccourcis clavier. Un outil existe sur IntelliJ pour forcer les développeurs à utiliser un raccourci clavier, au bout de la troisième utilisation la fonctionnalité se grise dans le menu. Les conseils : se les répéter et se créer un aide mémoire. Accédez directement à la classe que vous cherchez par les raccourcis clavier et en utilisant les majuscules. <strong>Prenez l&#8217;habitude de créer les variables avec votre EDI.</strong> Bien que destiné au refactoring, vous pouvez aussi l&#8217;utiliser en ne déclarant que la partie gauche de la déclaration et générer le reste.</p><h3><a
name="Focus"></a>Focus</h3><p>Pour commencer, il y a des choses simples à mettre en place : une chaise confortable, un double écran, les droits admin sur son poste et un bon clavier. Ensuite la concentration doit être total. Pour être productif, il faut supprimer toutes distractions tels que les pop-ups Windows de mis à jour ou autres notifications. Il existe par exemple <a
href="http://www.downloadsquad.com/2006/10/04/jedi-concentrate/" title="Jedi Concentrate" >Jedi Concentrate</a> qui permet de mettre en noir toutes les fenêtres pour se concentrer sur une en particulier le plus longtemps possible. Désactivez toutes les notifications d&#8217;emails et de messageries instantanées, mettez des écouteurs et créez des &laquo;&nbsp;moments de silence&nbsp;&raquo; dans votre bureau.<br
/> L&#8217;idée n&#8217;est pas de s&#8217;isoler des autres mais de créer des conditions idéales à la concentration.</p><h3><a
name="Focustechnique"></a>Focus technique</h3><p>Utilisez un outil de recherche tel que <a
href="http://www.google.com/quicksearchbox/" title="Google Desktop Search" >Google Desktop Search</a> pour rechercher sur votre poste au lieu de naviguer dans votre explorateur. Utilisez un virtual desktop pour séparer votre espace de travail du reste. Cela permet d&#8217;éviter l&#8217;empilement de fenêtres sur un unique bureau.</p><h3><a
name="Canonicit"></a>Canonicité</h3><p>Faire les choses simples en évitant les répétitions. Neal Ford a un sigle de référence : DRY (Don&#8217;t Repeat Yourself).</p><ul><li>DRY o/r mapping : il s&#8217;agit d&#8217;une tâche assez répétitive dans le développement d&#8217;application. Optimisez la partie mapping avec la base de données en construisant celui-ci à partir des méta-données en base. Puis générez les POJOs correspondant.</li><li>DRY documentation : Neal Ford a utilisé SVN2Wiki un petit utilitaire de SVN qui relève tous les commentaires de commits des développeurs pour les aggréger dans un wiki.</li></ul><h3><a
name="Automatisation"></a>Automatisation</h3><p>Les aspects visiblement automatisables sont le build en une commande, l&#8217;intégration continue, le contrôle de version et la documentation. Il recommande Selenium pour les tests automatisés. Ce dernier permet au développeurs de tester plus rapidement les applications suite à une modification.<br
/> Sa philosophie est : &laquo;&nbsp;Ne perdez plus de temps à faire à la main ce que vous pouvez faire automatiquement&nbsp;&raquo;.<br
/> Pour déterminer si une tâche est automatisable ou pas, il faut mesurer le temps qu&#8217;elle prend et analyser le retour sur investissement. Il faut éviter également d&#8217;en faire trop.</p><h3><a
name="Pratique"></a>Pratique</h3><p>Neal Ford nous propose ensuite 10 bonnes pratiques pour améliorer notre productivité et notre qualité de code.</p><h4><a
name="PatternComposedMethods"></a>1. Pattern <em>Composed Methods</em></h4><p>Celui-ci est directement tiré du livre <a
href="http://www.amazon.com/Smalltalk-Best-Practice-Patterns-Kent/dp/013476904X" title="Smalltalk Best Practice Patterns" >Smalltalk Best Practice Patterns</a> de Kent Beck. L&#8217;idée est de diviser son programme en plusieurs méthodes, chacune ayant un et un seul rôle bien défini. De même, chaque opération dans la méthode devra avoir le même niveau d&#8217;abstraction. Le résultat : des méthodes avec un rôle précis écrites en très peu de lignes de code. Cela a pour avantage de favoriser et simplifier les tests unitaires. Cela permettra aussi de vraiment mettre en avant la <em>vraie</em> réutilisabilité du code.</p><h4><a
name="TDD"></a>2. TDD</h4><p>Couplé avec le pattern <em>Composed Methods</em>, TDD nous oblige à réfléchir à notre design objet, à définir de quels objets dépend mon objet et ainsi à <em>mocker</em> ces objets dépendants. Un premier constat est que l&#8217;on obtient très souvent de meilleurs métriques de manière globale.</p><h4><a
name="Analysedecode"></a>3. Analyse de code</h4><p>Les outils d&#8217;analyse de code, ce n&#8217;est pas <a
href="http://blog.xebia.fr/2008/03/26/ajouter-un-detecteur-personnalise-a-findbugs/" title="quelque" >quelque</a> <a
href="http://blog.xebia.fr/2007/07/23/revue-de-presse-xebia-15/#PMD" title="chose de" >chose de</a> <a
href="http://blog.xebia.fr/2008/10/29/controles-de-qualite-avec-sonar/" title="nouveau" >nouveau</a>. Mais un petit rappel ne fait jamais de mal <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Passer par ce type d&#8217;outils va nous permettre de détecter des bugs de type mauvaise pratique, code mort ou bien encore du code violemment copier-coller. 2 types d&#8217;analyse :</p><ul><li>byte code : à l&#8217;aide de FindBugs qui nous range nos bugs par catégorie comme la mauvaise pratique, le problème de performance ou du code douteux ;</li><li>source code : par PMD qui lui nous détectera le code mort ou bien encore le fameux algorithme CPD pour Copy/Paste Detector.</li></ul><h4><a
name="Bonnecitoyennet"></a>4. Bonne citoyenneté</h4><p>Avec une formule : <code>getters + setters != encapsulation</code> ! Le speaker insiste alors : ne générez pas automatiquement sans réfléchir ces fameux getters et setters. Et si vous en avez réellement besoin, il faudra peut-être les tester.<br
/> Et un exemple d&#8217;API <em>worst citizenship in the java world</em> selon lui : <code>java.util.Calendar</code> ! Et un exemple très saisissant : que donne une instance de <code>Calendar</code> avec 31 février ? Et bien une instance de <code>Calendar</code> au 1er mars ! Alors que l&#8217;on ne serait pas surprit de se prendre une petite exception à la figure&#8230; Avec un constructeur sans paramètre, un autre avec tout, encore un autre avec seulement la moitié des paramètres demandés&#8230; En bref : prenez JodaTime <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /></p><h4><a
name="YAGNI"></a>5. YAGNI</h4><p>L&#8217;idée est simple : si vous n&#8217;en avez pas besoin tout de suite, pourquoi le faire ? Et oui, <em>You Ain&#8217;t Gonna Need It</em> !</p><h4><a
name="Remettreencauselautorit"></a>6. Remettre en cause l&#8217;autorité</h4><p>J&#8217;ai beaucoup aimé l&#8217;exemple cité : le nom des méthodes en Java. La norme est en effet d&#8217;utiliser le <a
href="http://fr.wikipedia.org/wiki/CamelCase" title="CamelCase" >CamelCase</a> pour le nom de nos méthodes. Mais prenons par exemple les test unitaires et par exemple ce test :<br
/> <code>testUserCannotAccessThisPageWithHisActualGrantedAuthorities</code><br
/> Pourquoi, pour une question de lisibilité, ne pas le nommer :<br
/> <code>test_user_cannot_access_this_page_with_his_actual_granted_authorities</code><br
/> Le nom de la méthode devient alors plus lisible et on obtient plus facilement l&#8217;information de ce que fait le test.<br
/> Autre cas : le chainage de méthode. Là où l&#8217;on écrirait des appels successifs de méthodes <code>setXXX</code> avec un retour de type <code>void</code>, pourquoi ne pas revoir l&#8217;API et utiliser le <em>Chaining Pattern</em> pour avoir quelque chose du type : <code>Car.describedAs().box().length(12).includes(Equipment.LADDER);</code>. Neal Ford insiste sur cet exemple car celui-ci remet directement en cause  la spécification Java Beans.<br
/> Il ne faut donc pas forcément s&#8217;arrêter sur des phrases telle que <em>c&#8217;est comme ça qu&#8217;il faut faire, un point c&#8217;est tout</em> !</p><h4><a
name="Slap"></a>7. Slap</h4><p>Slap pour <em>Single Level of Abstraction Principle</em>, ce principe rejoint fortement le <em>Composed Pattern</em> puisque le concept est d&#8217;avoir plusieurs lignes de code dans une méthode ayant le même niveau d&#8217;abstraction.</p><h4><a
name="Polyglotte"></a>8. Polyglotte</h4><p>Java n&#8217;est pas le seul et, pour certaines problématiques ou certains environnements, il est peut-être préférable de partir sur d&#8217;autres langages. Exemple : JRuby pour faire de l&#8217;interface graphique ou <a
href="http://jaskell.codehaus.org/" title="Jaskell" >Jaskell</a> pour écrire du code fonctionnelle. En bref, ne pas se limiter à Java.</p><h4><a
name="ChaqueNuance"></a>9. Chaque Nuance</h4><p>Java traîne avec lui des idées reçues bien fausse comme par exemple que l&#8217;API <code>reflection</code> est lente, certes vrai en fin des années 90 mais plus aujourd&#8217;hui. Il faut donc nuancer les propos, ne garder que ce qui est vrai et ne pas hésiter à faire passer le message pour que toutes ces choses ne soit plus dites !</p><h4><a
name="Antiobjets"></a>10. Anti-objets</h4><p>Neal Ford nous explique qu&#8217;un anti-objet peut-être vu comme un objet qui fait exactement l&#8217;opposé de ce pourquoi il a été créé. L&#8217;exemple du <a
href="http://www.google.fr/images?q=vase+ou+visage&#038;um=1&#038;ie=UTF-8&#038;source=og&#038;sa=N&#038;hl=fr&#038;tab=wi" title="vase ou visage" >vase ou visage</a> nous permet ainsi de voir qu&#8217;un objet vase peut voir sa réelle existence complètement détournée.</p><h3><a
name="Conclusion"></a>Conclusion</h3><p>Une session extrêmement riche et un <a
href="http://www.amazon.fr/Productive-Programmer-Neal-Ford/dp/0596519788" title="livre  lire de toute urgence" >livre à lire de toute urgence</a> !</p><p><em>NB : Les slides de Neal Ford sont disponibles sur son site : <a
href="http://nealford.com/mypastconferences.htm" title="Devoxx 2010  Neal Ford  The Productive Programmer" >Devoxx 2010 &#8211; Neal Ford &#8211; The Productive Programmer</a>.</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/16/devoxx-productive-programmer/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Devoxx &#8211; Augmenter votre productivité avec Mylyn</title><link>http://blog.xebia.fr/2010/11/16/devoxx-augmenter-votre-productivite-avec-mylyn/</link> <comments>http://blog.xebia.fr/2010/11/16/devoxx-augmenter-votre-productivite-avec-mylyn/#comments</comments> <pubDate>Tue, 16 Nov 2010 06:35:01 +0000</pubDate> <dc:creator>Romain Maton</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[Eclipse]]></category> <category><![CDATA[Mylyn]]></category> <category><![CDATA[Spring]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5883</guid> <description><![CDATA[Et c&#8217;est parti pour les Tools in action avec pour ma part la session Augmenter votre productivité avec Mylyn de Oliver Gierke, SpringSource. Mylyn, c&#8217;est le framework ALM (Application Lifecycle Management) d&#8217;Eclipse. Il réorganise tout l&#8217;IDE autour de tâches. Celles-ci seront ensuite traduites par Mylyn pour nos différents outils comme notre gestionnaire de sources, notre [...]]]></description> <content:encoded><![CDATA[<p>Et c&#8217;est parti pour les <a
href="http://www.devoxx.com/display/Devoxx2K10/Tools+in+Action" title="Tools in action" >Tools in action</a> avec pour ma part la session <a
href="http://www.devoxx.com/display/Devoxx2K10/Increasing+developer+productivity+with+Mylyn" title="Augmenter votre productivité avec Mylyn" >Augmenter votre productivité avec Mylyn</a> de <a
href="http://www.devoxx.com/display/Devoxx2K10/Oliver+Gierke" title="Oliver Gierke" >Oliver Gierke</a>, SpringSource.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx-oliver-gierke.png" border="0" alt="" /></div><p>Mylyn, c&#8217;est le framework ALM (Application Lifecycle Management) d&#8217;Eclipse. Il réorganise tout l&#8217;IDE autour de tâches. Celles-ci seront ensuite traduites par Mylyn pour nos différents outils comme notre gestionnaire de sources, notre intégration continue ou bien encore notre bugtracker. Le développeur pourra ainsi ne se préoccuper que de ses tâches, Mylyn s&#8217;occupant du reste.</p><p>Oliver Gierke nous oriente vers 3 grands domaines concernant cette fameuse productivité recherchée du développeur : <em>focus</em>, <em>productivity</em> et <em>traceability</em>.</p><h3><a
name="Focus"></a>Focus</h3><p>Tout se passe dans l&#8217;onglet <em>Task List</em> d&#8217;Eclipse avec une liste de tâches à effectuer. A noter qu&#8217;on ne peut activer qu&#8217;une seule tâche à la fois.</p><p>Le concept : chaque tâche aura son propre contexte de travail.</p><p>Ainsi, dès lors que l&#8217;on a activé une tâche, l&#8217;onglet <em>Task List</em> se vide et laisse apparaître tous les fichiers sur lesquels nous sommes en train de travailler. L&#8217;intérêt est que si l&#8217;on change en cours de route de tâche, la nouvelle tâche repartira d&#8217;un contexte vide et, en revenant sur notre première tâche, on récupérera notre contexte avec tous nos fichiers modifiés.</p><h3><a
name="Productivity"></a>Productivity</h3><p>L&#8217;idée ici est de gagner du temps en ayant tout de suite à sa disposition les bons outils intégrés dans son environnement de travail. En effet, avoir plus d&#8217;une dizaine d&#8217;outils répartis sur son IDE, dans son navigateur, sur son desktop&#8230; cela donne des alertes un peu n&#8217;importe où <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Il faut donc passer d&#8217;un <em>patchwork</em> à un <em>integrated toolset</em>.</p><p>Par défaut, Mylyn gère un nombre assez important de bugtrackers et d&#8217;outils en tout genre avec dans le désordre : Bugzilla, Jira, Bamboo, Crucible, Trac, Mantis, Hudson, Egit, CVS&#8230;</p><p>Pour la récupération des informations de l&#8217;outil, prenons par exemple Jira, il est possible de définir ses propres requêtes afin de ne récupérer qu&#8217;une certaine partie des bugs. Pour la saisie d&#8217;un bug, on dispose d&#8217;un éditeur <em>Rich Task Editor</em> pour la saisie des informations liées au bug <em>(OS, version&#8230;)</em> et pour la partie commentaire on dispose de l&#8217;éditeur <em>WikiText</em> qui nous permet d&#8217;écrire de la syntaxe Wiki.</p><p>Toujours en terme de productivité, il est possible d&#8217;organiser ses requêtes ou ses outils en <em>Working Sets</em>. On pourra aussi exporter ses contextes avec de les partager avec toute l&#8217;équipe.</p><h3><a
name="Traceability"></a>Traceability</h3><p>Ce concept découle du point précédent. On peut ainsi pour une tâche donnée récupérer toute les informations utiles du type <em>qui</em>, <em>quoi</em> et <em>pourquoi</em>, tout étant regroupé en un seul point.</p><h3><a
name="Dmo"></a>Démo</h3><p>Vient ensuite une petite démo avec un projet directement connecté sur le bugtracker de SpringSource :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/11/devoxx-demo-mylin.png" border="0" alt="" /></div><h3><a
name="CodeCloud"></a>Code2Cloud</h3><p>Pour terminer, Oliver nous parle de <a
href="http://tasktop.com/connectors/code2cloud.php" title="Code2Cloud" >Code2Cloud</a>, la solution complète de SpringSource pour simplifier la vie du développeur <em>(<a
href="http://blog.xebia.fr/2010/11/02/revue-de-presse-xebia-183/#SpringOneGXLesannoncesdeSpring" title="annonce faite au SpringOne2GX 2010" >annonce faite au SpringOne2GX 2010</a>)</em>.</p><p>Pourquoi parler de Code2Cloud ? Bugzilla, Git, Hudson, STS mais surtout&#8230;. Mylyn ! Olivier propose l&#8217;exemple de son intégration avec <a
href="http://blog.springsource.com/2010/05/26/spring-insight-1-0-0-m3-released/" title="Spring Insight" >Spring Insight</a>. On pourra ainsi configurer Spring Insight pour créer automatiquement un bug dans le bugtracker pour toute exception levée par l&#8217;application. Le bug sera bien sûr rempli avec la <em>stack trace</em> dans le bon champ, les classes impactées, OS/versions&#8230; Tout ceci toujours prévu pour le premier trimestre 2011.</p><h3><a
name="Pourconclure"></a>Pour conclure</h3><p>A noter enfin que <a
href="http://www.eclipse.org/mylyn/" title="Mylyn" >Mylyn</a> sous-projet de l&#8217;IDE <a
href="http://www.eclipse.org/" title="Eclipse" >Eclipse</a> est devenu <a
href="http://tasktop.com/blog/eclipse/mylyn-top-level-eclipse-project" title="top level Eclipse project" >top level Eclipse project</a> depuis mi-Septembre. Il rejoint entres autres WTP et EMF dans cette <em>short list</em> de projets qui représentent les secteurs clés d&#8217;Eclipse.</p><p>L&#8217;outil est bon mais pour ma part un point très gênant réside toujours : Un changement de contexte ne met pas de côté les changements effectués à la manière d&#8217;un <code>git stash</code> que l&#8217;on pourrait récupérer plus tard avec un <code>pop</code>. Si vous connaissez un plugin ou une petite commande qui fait ça, n&#8217;hésitez pas à commenter !</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/16/devoxx-augmenter-votre-productivite-avec-mylyn/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Xebia en route pour Devoxx !</title><link>http://blog.xebia.fr/2010/11/15/xebia-en-route-pour-devoxx-2/</link> <comments>http://blog.xebia.fr/2010/11/15/xebia-en-route-pour-devoxx-2/#comments</comments> <pubDate>Mon, 15 Nov 2010 07:57:56 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Cloud / NoSQL]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[java]]></category> <category><![CDATA[Jdk7]]></category> <category><![CDATA[JEE]]></category> <category><![CDATA[JEE 6]]></category> <category><![CDATA[JPA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5873</guid> <description><![CDATA[Le rendez-vous annuel incontournable de la communauté Java européenne est arrivé ! 3000 participants inscrits et une centaine de speakers pour 5 jours de conférences à Anvers en Belgique : Devoxx s&#8217;annonce cette année comme grandiose après une édition 2009 en léger retrait en raison du contexte économique. Xebia sera présent à cet évènement pour [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://www.devoxx.com/"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/11/logo.jpeg" alt="Devoxx" style="margin: 1em 1em 1em 1em; float: right;" /></a></p><p>Le rendez-vous annuel incontournable de la communauté Java européenne est arrivé ! 3000 participants inscrits et une centaine de <em>speakers</em> pour 5 jours de conférences à Anvers en Belgique : <a
href="http://www.devoxx.com" title="Devoxx" >Devoxx</a> s&#8217;annonce cette année comme grandiose après une édition 2009 en léger retrait en raison du contexte économique. Xebia sera présent à cet évènement pour vous retransmettre l&#8217;information qui y sera véhiculée.</p><p>Au-delà des connaissances techniques qui y circulent, des échanges et des rencontres qui s&#8217;y font, Devoxx est aussi un formidable baromètre de l&#8217;éco-système Java actuel. Il est donc intéressant d&#8217;observer les sujets les plus en vogue cette année :</p><ul><li><strong>NoSQL</strong> : il s&#8217;agit clairement du sujet majeur dont il sera question cette année. Très peu représenté l&#8217;année dernière (2 sessions seulement), on compte pour cette édition pas moins d&#8217;une douzaine de sessions dédiées à ce thème. Il sera ainsi question de Cassandra, HBase, Hadoop, Hive, Pig, MongoDB ou encore Voldemort.</li><li><strong>Java EE 6 et JPA 2</strong> : déjà très représenté l&#8217;année dernière, ce sujet sera encore d&#8217;actualité cette année à Devoxx, ces APIs n&#8217;ayant pas encore été digérées par les entreprises.</li><li><strong>JDK 7</strong> : le sujet devient récurrent, mais <a
href="http://blog.xebia.fr/2010/10/12/revue-de-presse-xebia-180/#IBMrejointleprojetOpenJDK" title="la rcente actualit" >la récente actualité</a> le concernant le rend incontournable dans une conférence Java de cette envergure. Cette semaine à Anvers sera l&#8217;occasion de faire le point sur les dernières avancées et orientations avec l&#8217;équipe responsable du JDK chez Oracle.</li></ul><p>Outres ces sujets majeurs, on retrouve de nouveaux venus tels que DevOps, ce mouvement prônant le rapprochement des équipes de développement et d&#8217;exploitation, ainsi que des sujets maintenant plus classiques qui présenteront leurs dernières évolutions tels que Grails, Android, Scala, ou HTML5.</p><p>Comme l&#8217;année dernière, vous retrouverez jour après jour sur ce blog et <a
href="http://jduchess.org/duchess-france/" title="celui de Duchess France" >celui de Duchess France</a> nos retours des principales sessions qui se tiendront à Anvers cette semaine. Retrouvez également l&#8217;information en <em>live</em> sur nos comptes Twitter : <a
href="http://twitter.com/dijouxellene" title="dijouxellene" >dijouxellene</a>, <a
href="http://twitter.com/mfiguiere" title="mfiguiere" >mfiguiere</a>, <a
href="http://twitter.com/morlhon" title="morlhon" >morlhon</a> et <a
href="http://twitter.com/rmat0n" title="rmat0n" >rmat0n</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/15/xebia-en-route-pour-devoxx-2/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/</link> <comments>http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#comments</comments> <pubDate>Tue, 13 Jul 2010 05:45:49 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Android]]></category> <category><![CDATA[Devoxx]]></category> <category><![CDATA[JDuchess]]></category> <category><![CDATA[JVM]]></category> <category><![CDATA[Kanban]]></category> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[SCRUM]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5022</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Agilité L&#8217;agilité à la sauce Pixar Evitez le multi-tâches dans les équipes de développement Le coin de la technique Développez vos applications Android sans écrire une ligne de code Mettez à jour votre JVM Evènements de notre communauté en France et à l&#8217;étranger Le [...]]]></description> <content:encoded><![CDATA[<p><img
style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Agilité</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#LagilitlasaucePixar">L&#8217;agilité à la sauce Pixar</a></li><li><a
href="http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#Evitezlemultitchesdanslesquipe">Evitez le multi-tâches dans les équipes de développement</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#DveloppezvosapplicationsAndroi">Développez vos applications Android sans écrire une ligne de code </a></li><li><a
href="http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#MettezjourvotreJVM">Mettez à jour votre JVM</a></li></ul><p><strong>Evènements  de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/#LeprogrammeduDevoxxsedvoile">Le programme du Devoxx 2010 se dévoile</a></li></ul><h3><a
name="Agilit"></a>Agilité</h3><h4><a
name="LagilitlasaucePixar"></a>L&#8217;agilité à la sauce Pixar</h4><p>C&#8217;est une question d&#8217;actualité avec la sortie de Toy Story 3 : mais comment Pixar fait-il pour cartonner à chaque nouveau film ? <a
title="InfoQ lve une partie du voile" href="http://www.infoq.com/news/2010/07/consistency-trust">InfoQ lève une partie du voile</a> : la cohérence construit la confiance. Derrière cette maxime &#8216;à l&#8217;américaine&#8217; se cache un processus créatif original : Pixar construit des équipes pluri-disciplinaires, qui travaillent ensemble (éventuellement durant plusieurs films) et qui créent des liens de confiance inaliénables. Chaque jour, l&#8217;équipe se réunit pour discuter du travail effectué la veille : critiques, remises en cause, les équipes travaillent dans un processus d&#8217;amélioration constante. Chaque membre de l&#8217;équipe est encouragé à donner son avis, même ses membres les plus juniors.<br
/> Ce mode de fonctionnement laisse la place à l&#8217;erreur. Comme chacun est impliqué, chacun peut se tromper. Les erreurs sont mêmes une des clés du processus créatif. L&#8217;essentiel est de se tromper rapidement, pour pouvoir corriger le tir.</p><p>Changez maintenant de point de vue, et regardez cet article sous l&#8217;angle du développement logiciel. N&#8217;y retrouve t&#8217;on pas un fort goût d&#8217;agilité ?</p><h4><a
name="Evitezlemultitchesdanslesquipe"></a>Evitez le multi-tâches dans les équipes de développement</h4><p>Toujours sur <a
title="Toujours sur InfoQ" href="http://www.infoq.com/articles/multitasking-problems">InfoQ</a>, Roger Brown nous met en garde contre les méfaits du traitement simultané de projets (tâches, user stories &#8230;) par une personne.<br
/> Le changement de contexte lorsque l&#8217;on passe d&#8217;une tâche à l&#8217;autre peut prendre plus ou moins de temps en fonction de la complexité de la tâche, du temps et de la nature de l&#8217;interruption. Le traitement d&#8217;un appel téléphonique, par exemple, pourra engendrer un délai d&#8217;un quart d&#8217;heure pour se remettre dans le contexte de la tâche précédente. D&#8217;autres types d&#8217;interruptions (travail sur une autre tâche de développement par exemple) peuvent nous faire perdre beaucoup plus de temps.<br
/> L&#8217;auteur nous explique que le travail en parallèle sur plusieurs projets implique généralement un surcoût induit par les changements de contexte pouvant représenter de 20% à plus de 50% du temps de travail lorsque nous travaillons simultanément sur plus de deux projets. Il est donc préférable de terminer une tâche (User Story par exemple) avant d&#8217;en commencer une autre, plutôt que de fragmenter son travail.<br
/> Les méthodes agiles comme Scrum ou le Kanban préconisent un nombre limité de User Stories ou de tâches en cours, et de ne pas en commencer une autre avant d&#8217;avoir atteint le statut &laquo;&nbsp;Done&nbsp;&raquo;.<br
/> Le cerveau humain ayant tendance à vouloir traiter plusieurs tâches en parallèle, Roger Brown préconise quelques techniques telles que le pair-programming afin d&#8217;aider les développeurs à rester concentrés sur leur tâche et à gagner ainsi en efficacité.<br
/> On peut aussi citer le <a
title="pomodoro" href="http://www.pomodorotechnique.com/">pomodoro</a> qui est une discipline consistant à se ménager un laps de temps de 25 minutes sans interruption, permettant de se focaliser sur une tâche et ainsi de gagner en efficacité.<br
/> L&#8217;auteur conclut en ajoutant que non seulement le traitement séquentiel des projets (tâches, user stories &#8230;) permet de gagner du temps, mais il permet aussi de créer des synergies entre les différents membres de l&#8217;équipe qui peuvent ainsi travailler de concert sur le projet.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="DveloppezvosapplicationsAndroi"></a>Développez vos applications Android sans écrire une ligne de code</h4><p>Google Labs vient d&#8217;annoncer l&#8217;arrivée d&#8217;App Inventor, un éditeur d&#8217;applications pour Android destiné aux non-développeurs. L&#8217;objectif est de permettre à tout androphile de <strong>dessiner</strong> sa propre application depuis le logiciel, puis de la transférer sur son smartphone.</p><blockquote><p><em>To use App Inventor, you do not need to be a developer. App Inventor requires NO programming knowledge. This is because instead of writing code, you visually design the way the app looks and use blocks to specify the app&#8217;s behavior.</em></p></blockquote><div><img
src="http://blog.xebia.fr/wp-content/uploads/2010/07/GAppInventor.png" border="0" alt="" /></div><p>Pour le moment, il n&#8217;est pas possible de s&#8217;inscrire. Vous pouvez seulement montrer votre intérêt en remplissant un formulaire dans lequel vous exprimerez votre enthousiasme pour l&#8217;utilisation d&#8217;AppInventor dans un cadre universitaire. Si vous n&#8217;avez rien à voir avec quelconque formation, vous pouvez toujours laisser les réponses vides.</p><p>En épluchant le site, on constate la forte volonté d&#8217;installer cet éditeur dans le monde universitaire, voire scolaire. En effet, il est fait mention à plusieurs reprises des possibilités de développements de jeux, d&#8217;applications communautaires ou d&#8217;outils d&#8217;interaction entre étudiants. Malgré tout, Google n&#8217;oublie les autres&#8230; le particuliers lambda, ou le collègue que nous sommes en précisant:</p><blockquote><p><em>The App Inventor team has created blocks for just about everything you can do with an Android phone, as well as blocks for doing &laquo;&nbsp;programming-like&nbsp;&raquo; stuff.</em></p></blockquote><p>Nous nous posons tout de même quelques questions à ce sujet:</p><ul><li>Google préfèrerait-il que nous apprenions à utiliser son logiciel plutôt qu&#8217;écrire du code <span
style="text-decoration: line-through;">propre</span> personnalisé?</li><li>Ne se cache-t-il pas un envie de maîtriser le code généré? (en y ajoutant des statistiques par exemple&#8230;)</li><li>N&#8217;y a-t-il pas un risque de voir proliférer sur le market des applications réalisées en 5 minutes, pleines de pubs et pauvres sur les plans fonctionnel et graphique? (comme HelloPurr, cf. <a
title="vido de dmo" href="http://www.youtube.com/watch?v=8ADwPLSFeY8&amp;feature=player_embedded">vidéo de démo</a>)</li></ul><p>Le futur nous le dira&#8230;</p><p>Du côté de la technique, les outils utilisés sont <a
title="OpenBlocks" href="http://dspace.mit.edu/handle/1721.1/41550">OpenBlocks</a> et <a
title="Kawa Language Framework" href="http://www.gnu.org/software/kawa/">Kawa Language Framework</a>. Le premier est le fruit de la thèse de Ricarose Roque (MIT) : une librairie Java permettant de programmer des systèmes à l&#8217;aide de blocs visuels. Le second est utilisé par le compilateur pour traduire en bytecode les blocs graphiques.</p><p>En attendant d&#8217;avantage d&#8217;informations et pourquoi pas un article plus complet sur l&#8217;outil, vous trouverez déjà quelques tutoriaux sur le site.</p><p>source : <a
title="site de lditeur" href="http://appinventor.googlelabs.com/about/">site de l&#8217;éditeur</a></p><h4><a
name="MettezjourvotreJVM"></a>Mettez à jour votre JVM</h4><p>Après une dernière release qui corrigeait un <a
title="problème de sécurité" href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#FailledescuritdansOracleJava">problème de sécurité</a>, Oracle nous invite à <a
title="télécharger" href="http://java.sun.com/javase/downloads/index.jsp">télécharger</a> la release 21 qui, outre la correction de <a
title="bugs" href="http://java.sun.com/javase/6/webnotes/BugFixes6u21.html">bugs</a> (mais pas de correction liée à la sécurité), apporte des améliorations sur la JVM HotSpot et VisualVM.</p><p>Sur la Java HostSpot VM, les améliorations portent sur la compression des pointeurs d&#8217;objets, <em>escape analysis</em> (qui améliore la gestion des piles), la gestion du cache sur le byte code, sur le garbage collector CMS (Concurrent Mark-Sweep) et G1. Pour rappel, G1 est le nouveau garbage collector en préparation pour la JDK 7 mais déjà utilisable dans la version 6 depuis la release 17. Pour l&#8217;activer il faut passer les options <code>-XX:+UnlockExperimentalVMOptions -XX:+UseG1GC</code>.</p><p>La version 1.2.2 de VisualVM, sortie il y a quelques mois, est à présent incluse dans la distribution de Java SE. Elle apporte beaucoup d&#8217;améliorations sur l&#8217;analyse de la mémoire et sur le profilage.</p><p>Enfin pour les développeurs de RIA java, un <em>listener</em> a été ajouté pour suivre l&#8217;évolution du chargement de l&#8217;application. Plus de détails <a
title="ici" href="http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/deployment/doingMoreWithRIA/customizeRIALoadingExperience.html">ici</a>.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements  de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="LeprogrammeduDevoxxsedvoile"></a>Le programme du Devoxx 2010 se dévoile</h4><p>J&#8217;espère que vous avez créé une règle sur votre outil de mailing préféré qui décline toute demande de réunion sur la période du 15 au 19 novembre 2010 car c&#8217;est &#8230; Devoxx!<br
/> À moins d&#8217;être parti 8 ans en mission dans l&#8217;océan arctique sur un brise glace, vous ne pouvez pas ne pas connaître Devoxx. C&#8217;est LA conférence européenne spécialisée sur LA technologie (i.e. Java) qui se déroule tous les ans à Anvers en Belgique.</p><p>Tout le gratin des meilleurs speakers et spécialistes sera présent dont certains français: Antonio Goncalves, Guillaume Laforge, Emmanuel Bernard pour ne citer qu&#8217;eux, mais aussi des incontournables comme Heinz Kabutz, John Smart ou bien Michael Cote.<br
/> Mais ce n&#8217;est pas tout! En effet, un BoF (<a
title="Bird of Feather" href="http://en.wikipedia.org/wiki/Birds_of_a_Feather_(computing)">Bird of Feather</a>) organisé par les JDuchess se prépare.</p><p>Le programme commence à prendre forme. Vous pouvez commencer à saliver sur des conférences plus intéressantes les unes que les autres avec quelques titres accrocheurs:</p><ul><li>JAX-RS, Java EE 6, and the future,</li><li>Reflection Madness,</li><li>Improve the performance of your Spring app,</li><li>HTML 5 Fact and Fiction,</li><li>Comparing JVM Web Frameworks,</li><li>Groovy update, ecosystem, and skyrocketing to the cloud with App Engine and Gaelyk,</li><li>Restfulie: quit pretending, use the web for real,</li><li>Women in IT an unconference,</li><li>etc.</li></ul><p>Dans le programme de cette année, c&#8217;est surtout la présence de plus d&#8217;une dizaine de sessions dédiées aux technologies NoSQL et Cloud que l&#8217;on retiendra. On se souvient en effet que l&#8217;édition 2009 de cette conférence n&#8217;avait proposé qu&#8217;une trop courte session d&#8217;introduction à NoSQL suivie d&#8217;un BOF. Cette augmentation sensible de la part accordée à ces technologies témoigne de leur popularité croissante en 2010. Une fois de plus Devoxx s&#8217;affirme comme le baromètre de notre écosystème !</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/07/13/revue-de-presse-xebia-167/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
